1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 #ifndef _DAVRESOURCEACCESS_HXX_ 25 #define _DAVRESOURCEACCESS_HXX_ 26 27 #include <vector> 28 #include <rtl/ustring.hxx> 29 #include <rtl/ref.hxx> 30 #include <osl/mutex.hxx> 31 #include <com/sun/star/io/XInputStream.hpp> 32 #include <com/sun/star/io/XOutputStream.hpp> 33 #include <com/sun/star/ucb/Lock.hpp> 34 #include <com/sun/star/ucb/XCommandEnvironment.hpp> 35 #include <com/sun/star/ucb/WebDAVHTTPMethod.hpp> 36 #include "DAVAuthListener.hxx" 37 #include "DAVException.hxx" 38 #include "DAVSession.hxx" 39 #include "DAVResource.hxx" 40 #include "DAVTypes.hxx" 41 #include "CurlUri.hxx" 42 43 namespace http_dav_ucp 44 { 45 46 class DAVSessionFactory; 47 48 class DAVResourceAccess 49 { 50 osl::Mutex m_aMutex; 51 rtl::OUString m_aURL; 52 rtl::OUString m_aPath; 53 rtl::Reference< DAVSession > m_xSession; 54 rtl::Reference< DAVSessionFactory > m_xSessionFactory; 55 com::sun::star::uno::Reference< 56 com::sun::star::lang::XMultiServiceFactory > m_xSMgr; 57 std::vector< CurlUri > m_aRedirectURIs; 58 59 public: DAVResourceAccess()60 DAVResourceAccess() : m_xSessionFactory( 0 ) {} 61 DAVResourceAccess( const com::sun::star::uno::Reference< 62 com::sun::star::lang::XMultiServiceFactory > & rSMgr, 63 rtl::Reference< 64 DAVSessionFactory > const & rSessionFactory, 65 const rtl::OUString & rURL ); 66 DAVResourceAccess( const DAVResourceAccess & rOther ); 67 68 DAVResourceAccess & operator=( const DAVResourceAccess & rOther ); 69 70 void setURL( const rtl::OUString & rNewURL ); 71 72 void resetUri(); 73 getURL() const74 const rtl::OUString & getURL() const { return m_aURL; } 75 getSessionFactory() const76 rtl::Reference< DAVSessionFactory > getSessionFactory() const 77 { return m_xSessionFactory; } 78 79 // DAV methods 80 // 81 82 // allprop & named 83 void 84 PROPFIND( const Depth nDepth, 85 const std::vector< rtl::OUString > & rPropertyNames, 86 std::vector< DAVResource > & rResources, 87 const com::sun::star::uno::Reference< 88 com::sun::star::ucb::XCommandEnvironment > & xEnv ); 89 90 // propnames 91 void 92 PROPFIND( const Depth nDepth, 93 std::vector< DAVResourceInfo > & rResInfo, 94 const com::sun::star::uno::Reference< 95 com::sun::star::ucb::XCommandEnvironment > & xEnv ); 96 97 void 98 PROPPATCH( const std::vector< ProppatchValue > & rValues, 99 const com::sun::star::uno::Reference< 100 com::sun::star::ucb::XCommandEnvironment >& xEnv ); 101 102 void 103 HEAD( const std::vector< rtl::OUString > & rHeaderNames, // empty == 'all' 104 DAVResource & rResource, 105 const com::sun::star::uno::Reference< 106 com::sun::star::ucb::XCommandEnvironment >& xEnv ); 107 108 com::sun::star::uno::Reference< com::sun::star::io::XInputStream > 109 GET( const com::sun::star::uno::Reference< 110 com::sun::star::ucb::XCommandEnvironment > & xEnv ); 111 112 void 113 GET( com::sun::star::uno::Reference< 114 com::sun::star::io::XOutputStream > & rStream, 115 const com::sun::star::uno::Reference< 116 com::sun::star::ucb::XCommandEnvironment > & xEnv ); 117 118 com::sun::star::uno::Reference< com::sun::star::io::XInputStream > 119 GET( const std::vector< rtl::OUString > & rHeaderNames, // empty == 'all' 120 DAVResource & rResource, 121 const com::sun::star::uno::Reference< 122 com::sun::star::ucb::XCommandEnvironment > & xEnv ); 123 124 com::sun::star::uno::Reference< com::sun::star::io::XInputStream > 125 GET( DAVRequestHeaders & rRequestHeaders, 126 const std::vector< rtl::OUString > & rHeaderNames, // empty == 'all' 127 DAVResource & rResource, 128 const com::sun::star::uno::Reference< 129 com::sun::star::ucb::XCommandEnvironment > & xEnv ); 130 131 void 132 GET( com::sun::star::uno::Reference< 133 com::sun::star::io::XOutputStream > & rStream, 134 const std::vector< rtl::OUString > & rHeaderNames, // empty == 'all' 135 DAVResource & rResource, 136 const com::sun::star::uno::Reference< 137 com::sun::star::ucb::XCommandEnvironment > & xEnv ); 138 139 void 140 PUT( const com::sun::star::uno::Reference< 141 com::sun::star::io::XInputStream > & rStream, 142 const com::sun::star::uno::Reference< 143 com::sun::star::ucb::XCommandEnvironment > & xEnv ); 144 145 com::sun::star::uno::Reference< com::sun::star::io::XInputStream > 146 POST( const rtl::OUString & rContentType, 147 const rtl::OUString & rReferer, 148 const com::sun::star::uno::Reference< 149 com::sun::star::io::XInputStream > & rInputStream, 150 const com::sun::star::uno::Reference< 151 com::sun::star::ucb::XCommandEnvironment >& xEnv ); 152 153 void 154 POST( const rtl::OUString & rContentType, 155 const rtl::OUString & rReferer, 156 const com::sun::star::uno::Reference< 157 com::sun::star::io::XInputStream > & rInputStream, 158 com::sun::star::uno::Reference< 159 com::sun::star::io::XOutputStream > & rOutputStream, 160 const com::sun::star::uno::Reference< 161 com::sun::star::ucb::XCommandEnvironment >& xEnv ); 162 163 void 164 MKCOL( const com::sun::star::uno::Reference< 165 com::sun::star::ucb::XCommandEnvironment > & xEnv ); 166 167 void 168 COPY( const ::rtl::OUString & rSourcePath, 169 const ::rtl::OUString & rDestinationURI, 170 sal_Bool bOverwrite, 171 const com::sun::star::uno::Reference< 172 com::sun::star::ucb::XCommandEnvironment > & xEnv ); 173 174 void 175 MOVE( const ::rtl::OUString & rSourcePath, 176 const ::rtl::OUString & rDestinationURI, 177 sal_Bool bOverwrite, 178 const com::sun::star::uno::Reference< 179 com::sun::star::ucb::XCommandEnvironment > & xEnv ); 180 181 void 182 DESTROY( const com::sun::star::uno::Reference< 183 com::sun::star::ucb::XCommandEnvironment > & xEnv ); 184 185 // set new lock. 186 void 187 LOCK( com::sun::star::ucb::Lock & inLock, 188 const com::sun::star::uno::Reference< 189 com::sun::star::ucb::XCommandEnvironment > & xEnv ); 190 191 #if 0 // currently not used, but please don't remove code 192 // refresh existing lock. 193 sal_Int64 194 LOCK( sal_Int64 nTimeout, 195 const com::sun::star::uno::Reference< 196 com::sun::star::ucb::XCommandEnvironment > & xEnv ); 197 #endif 198 199 void 200 UNLOCK( const com::sun::star::uno::Reference< 201 com::sun::star::ucb::XCommandEnvironment > & xEnv ); 202 203 void 204 abort(); 205 206 // helper 207 static void 208 getUserRequestHeaders( 209 const com::sun::star::uno::Reference< 210 com::sun::star::ucb::XCommandEnvironment > & xEnv, 211 const rtl::OUString & rURI, 212 com::sun::star::ucb::WebDAVHTTPMethod eMethod, 213 DAVRequestHeaders & rRequestHeaders ); 214 215 private: 216 const rtl::OUString & getRequestURI() const; 217 sal_Bool detectRedirectCycle( const rtl::OUString& rRedirectURL ); 218 sal_Bool handleException( DAVException & e, int errorCount ); 219 void initialize(); 220 }; 221 222 } // namespace http_dav_ucp 223 224 #endif // _DAVRESOURCEACCESS_HXX_ 225