151ba086bSDamjan Jovanovic /************************************************************** 251ba086bSDamjan Jovanovic * 351ba086bSDamjan Jovanovic * Licensed to the Apache Software Foundation (ASF) under one 451ba086bSDamjan Jovanovic * or more contributor license agreements. See the NOTICE file 551ba086bSDamjan Jovanovic * distributed with this work for additional information 651ba086bSDamjan Jovanovic * regarding copyright ownership. The ASF licenses this file 751ba086bSDamjan Jovanovic * to you under the Apache License, Version 2.0 (the 851ba086bSDamjan Jovanovic * "License"); you may not use this file except in compliance 951ba086bSDamjan Jovanovic * with the License. You may obtain a copy of the License at 1051ba086bSDamjan Jovanovic * 1151ba086bSDamjan Jovanovic * http://www.apache.org/licenses/LICENSE-2.0 1251ba086bSDamjan Jovanovic * 1351ba086bSDamjan Jovanovic * Unless required by applicable law or agreed to in writing, 1451ba086bSDamjan Jovanovic * software distributed under the License is distributed on an 1551ba086bSDamjan Jovanovic * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 1651ba086bSDamjan Jovanovic * KIND, either express or implied. See the License for the 1751ba086bSDamjan Jovanovic * specific language governing permissions and limitations 1851ba086bSDamjan Jovanovic * under the License. 1951ba086bSDamjan Jovanovic * 2051ba086bSDamjan Jovanovic *************************************************************/ 2151ba086bSDamjan Jovanovic 2251ba086bSDamjan Jovanovic 2351ba086bSDamjan Jovanovic 2451ba086bSDamjan Jovanovic #ifndef INCLUDED_CURLSESSION_HXX 2551ba086bSDamjan Jovanovic #define INCLUDED_CURLSESSION_HXX 2651ba086bSDamjan Jovanovic 2751ba086bSDamjan Jovanovic #include <vector> 2851ba086bSDamjan Jovanovic #include <boost/shared_ptr.hpp> 2951ba086bSDamjan Jovanovic #include <osl/mutex.hxx> 3051ba086bSDamjan Jovanovic #include <comphelper/componentcontext.hxx> 3151ba086bSDamjan Jovanovic #include <comphelper/logging.hxx> 3251ba086bSDamjan Jovanovic #include "DAVResource.hxx" 3351ba086bSDamjan Jovanovic #include "DAVSession.hxx" 3451ba086bSDamjan Jovanovic #include "CurlTypes.hxx" 3551ba086bSDamjan Jovanovic #include "CurlRequest.hxx" 3651ba086bSDamjan Jovanovic #include "CurlLockStore.hxx" 3751ba086bSDamjan Jovanovic #include "CurlUri.hxx" 3851ba086bSDamjan Jovanovic #include "CurlInputStream.hxx" 3951ba086bSDamjan Jovanovic #include <com/sun/star/lang/XMultiServiceFactory.hpp> 40*f7b97bf7SDamjan Jovanovic #include <com/sun/star/security/CertificateContainer.hpp> 41*f7b97bf7SDamjan Jovanovic #include <com/sun/star/security/XCertificateContainer.hpp> 42*f7b97bf7SDamjan Jovanovic #include <com/sun/star/xml/crypto/XSecurityEnvironment.hpp> 43*f7b97bf7SDamjan Jovanovic #include <com/sun/star/xml/crypto/XXMLSecurityContext.hpp> 4451ba086bSDamjan Jovanovic #include <curl/curl.h> 4551ba086bSDamjan Jovanovic #include <openssl/ssl.h> 4651ba086bSDamjan Jovanovic 4751ba086bSDamjan Jovanovic namespace ucbhelper { class ProxyDecider; } 4851ba086bSDamjan Jovanovic 4951ba086bSDamjan Jovanovic namespace http_dav_ucp 5051ba086bSDamjan Jovanovic { 5151ba086bSDamjan Jovanovic 5251ba086bSDamjan Jovanovic // ------------------------------------------------------------------- 5351ba086bSDamjan Jovanovic // CurlSession 5451ba086bSDamjan Jovanovic // A DAVSession implementation using the Curl library 5551ba086bSDamjan Jovanovic // ------------------------------------------------------------------- 5651ba086bSDamjan Jovanovic 5751ba086bSDamjan Jovanovic class CurlSession : public DAVSession 5851ba086bSDamjan Jovanovic { 5951ba086bSDamjan Jovanovic private: 6051ba086bSDamjan Jovanovic osl::Mutex m_aMutex; 6151ba086bSDamjan Jovanovic ::comphelper::ComponentContext m_aContext; 6251ba086bSDamjan Jovanovic ::comphelper::EventLogger m_aLogger; 6351ba086bSDamjan Jovanovic 6451ba086bSDamjan Jovanovic CurlUri m_aUri; 6551ba086bSDamjan Jovanovic 6651ba086bSDamjan Jovanovic rtl::OUString m_aProxyName; 6751ba086bSDamjan Jovanovic sal_Int32 m_nProxyPort; 6851ba086bSDamjan Jovanovic // The server, according RFC7231 6951ba086bSDamjan Jovanovic // http://tools.ietf.org/html/rfc7231#section-7.4.2 7051ba086bSDamjan Jovanovic rtl::OString m_aServerHeaderField; 7151ba086bSDamjan Jovanovic 7251ba086bSDamjan Jovanovic CURL* m_pCurl; 7351ba086bSDamjan Jovanovic bool m_bUseChunkedEncoding; 7451ba086bSDamjan Jovanovic bool m_bTransferEncodingSwitched; 7551ba086bSDamjan Jovanovic 7651ba086bSDamjan Jovanovic const ucbhelper::InternetProxyDecider & m_rProxyDecider; 7751ba086bSDamjan Jovanovic 7851ba086bSDamjan Jovanovic DAVRequestEnvironment m_aEnv; 7951ba086bSDamjan Jovanovic 8051ba086bSDamjan Jovanovic static CurlLockStore m_aCurlLockStore; 8151ba086bSDamjan Jovanovic 82*f7b97bf7SDamjan Jovanovic ::com::sun::star::uno::Reference< ::com::sun::star::security::XCertificateContainer > m_xCertificateContainer; 83*f7b97bf7SDamjan Jovanovic ::com::sun::star::uno::Reference< ::com::sun::star::xml::crypto::XXMLSecurityContext > m_xSecurityContext; 84*f7b97bf7SDamjan Jovanovic ::com::sun::star::uno::Reference< ::com::sun::star::xml::crypto::XSecurityEnvironment > m_xSecurityEnv; 85*f7b97bf7SDamjan Jovanovic 8651ba086bSDamjan Jovanovic bool isSSLNeeded(); 8751ba086bSDamjan Jovanovic 8851ba086bSDamjan Jovanovic 8951ba086bSDamjan Jovanovic rtl::OUString composeCurrentUri( const rtl::OUString & inPath ); 9051ba086bSDamjan Jovanovic void addEnvironmentRequestHeaders( CurlRequest &curlRequest, 9151ba086bSDamjan Jovanovic const DAVRequestEnvironment &env ) 9251ba086bSDamjan Jovanovic throw ( DAVException ); 9351ba086bSDamjan Jovanovic void processResponse( CurlRequest &curlRequest, 9451ba086bSDamjan Jovanovic CURLcode curlCode ) 9551ba086bSDamjan Jovanovic throw ( DAVException ); 9651ba086bSDamjan Jovanovic 9751ba086bSDamjan Jovanovic static CURLcode Curl_SSLContextCallback( CURL *curl, 9851ba086bSDamjan Jovanovic void *ssl_ctx, 9951ba086bSDamjan Jovanovic void *userptr ); 100*f7b97bf7SDamjan Jovanovic static int OPENSSL_VerifyCertificate( X509_STORE_CTX *x509_ctx, void *arg ); 101*f7b97bf7SDamjan Jovanovic int verifyServerX509Certificate( X509_STORE_CTX *x509StoreContext ); 10251ba086bSDamjan Jovanovic int verifyCertificateChain ( 10351ba086bSDamjan Jovanovic std::vector< uno::Sequence< sal_Int8 > > &asn1DerCertificates ); 10451ba086bSDamjan Jovanovic 10551ba086bSDamjan Jovanovic static int Curl_DebugCallback( CURL *, 10651ba086bSDamjan Jovanovic curl_infotype type, 10751ba086bSDamjan Jovanovic unsigned char *data, 10851ba086bSDamjan Jovanovic size_t size, 10951ba086bSDamjan Jovanovic void* userdata ); 11051ba086bSDamjan Jovanovic int curlDebugOutput( curl_infotype type, char *data, int size ); 11151ba086bSDamjan Jovanovic 11251ba086bSDamjan Jovanovic static bool Curl_ProvideCredentials( long statusCode, 11351ba086bSDamjan Jovanovic void *userdata ) throw (DAVException); 11451ba086bSDamjan Jovanovic bool provideCredentials( const DAVRequestEnvironment &env, 11551ba086bSDamjan Jovanovic CurlRequest &request, 11651ba086bSDamjan Jovanovic long statusCode ) throw (DAVException); 11751ba086bSDamjan Jovanovic 11851ba086bSDamjan Jovanovic protected: 11951ba086bSDamjan Jovanovic virtual ~CurlSession(); 12051ba086bSDamjan Jovanovic 12151ba086bSDamjan Jovanovic public: 12251ba086bSDamjan Jovanovic CurlSession( const rtl::Reference< DAVSessionFactory > & rSessionFactory, 12351ba086bSDamjan Jovanovic const rtl::OUString& inUri, 12451ba086bSDamjan Jovanovic const ucbhelper::InternetProxyDecider & rProxyDecider ) 12551ba086bSDamjan Jovanovic throw ( DAVException ); 12651ba086bSDamjan Jovanovic 12751ba086bSDamjan Jovanovic // DAVSession methods 12851ba086bSDamjan Jovanovic virtual sal_Bool CanUse( const ::rtl::OUString & inUri ); 12951ba086bSDamjan Jovanovic 13051ba086bSDamjan Jovanovic virtual sal_Bool UsesProxy(); 13151ba086bSDamjan Jovanovic getRequestEnvironment() const13251ba086bSDamjan Jovanovic const DAVRequestEnvironment & getRequestEnvironment() const 13351ba086bSDamjan Jovanovic { return m_aEnv; } 13451ba086bSDamjan Jovanovic 13551ba086bSDamjan Jovanovic // allprop & named 13651ba086bSDamjan Jovanovic virtual void 13751ba086bSDamjan Jovanovic PROPFIND( const ::rtl::OUString & inPath, 13851ba086bSDamjan Jovanovic const Depth inDepth, 13951ba086bSDamjan Jovanovic const std::vector< ::rtl::OUString > & inPropNames, 14051ba086bSDamjan Jovanovic std::vector< DAVResource > & ioResources, 14151ba086bSDamjan Jovanovic const DAVRequestEnvironment & rEnv ) 14251ba086bSDamjan Jovanovic throw ( DAVException ); 14351ba086bSDamjan Jovanovic 14451ba086bSDamjan Jovanovic // propnames 14551ba086bSDamjan Jovanovic virtual void 14651ba086bSDamjan Jovanovic PROPFIND( const ::rtl::OUString & inPath, 14751ba086bSDamjan Jovanovic const Depth inDepth, 14851ba086bSDamjan Jovanovic std::vector< DAVResourceInfo >& ioResInfo, 14951ba086bSDamjan Jovanovic const DAVRequestEnvironment & rEnv ) 15051ba086bSDamjan Jovanovic throw ( DAVException ); 15151ba086bSDamjan Jovanovic 15251ba086bSDamjan Jovanovic virtual void 15351ba086bSDamjan Jovanovic PROPPATCH( const ::rtl::OUString & inPath, 15451ba086bSDamjan Jovanovic const std::vector< ProppatchValue > & inValues, 15551ba086bSDamjan Jovanovic const DAVRequestEnvironment & rEnv ) 15651ba086bSDamjan Jovanovic throw ( DAVException ); 15751ba086bSDamjan Jovanovic 15851ba086bSDamjan Jovanovic virtual void 15951ba086bSDamjan Jovanovic HEAD( const ::rtl::OUString & inPath, 16051ba086bSDamjan Jovanovic const std::vector< ::rtl::OUString > & inHeaderNames, 16151ba086bSDamjan Jovanovic DAVResource & ioResource, 16251ba086bSDamjan Jovanovic const DAVRequestEnvironment & rEnv ) 16351ba086bSDamjan Jovanovic throw ( DAVException ); 16451ba086bSDamjan Jovanovic 16551ba086bSDamjan Jovanovic virtual com::sun::star::uno::Reference< com::sun::star::io::XInputStream > 16651ba086bSDamjan Jovanovic GET( const ::rtl::OUString & inPath, 16751ba086bSDamjan Jovanovic const DAVRequestEnvironment & rEnv ) 16851ba086bSDamjan Jovanovic throw ( DAVException ); 16951ba086bSDamjan Jovanovic 17051ba086bSDamjan Jovanovic virtual void 17151ba086bSDamjan Jovanovic GET( const ::rtl::OUString & inPath, 17251ba086bSDamjan Jovanovic com::sun::star::uno::Reference< 17351ba086bSDamjan Jovanovic com::sun::star::io::XOutputStream > & ioOutputStream, 17451ba086bSDamjan Jovanovic const DAVRequestEnvironment & rEnv ) 17551ba086bSDamjan Jovanovic throw ( DAVException ); 17651ba086bSDamjan Jovanovic 17751ba086bSDamjan Jovanovic virtual com::sun::star::uno::Reference< com::sun::star::io::XInputStream > 17851ba086bSDamjan Jovanovic GET( const ::rtl::OUString & inPath, 17951ba086bSDamjan Jovanovic const std::vector< ::rtl::OUString > & inHeaderNames, 18051ba086bSDamjan Jovanovic DAVResource & ioResource, 18151ba086bSDamjan Jovanovic const DAVRequestEnvironment & rEnv ) 18251ba086bSDamjan Jovanovic throw ( DAVException ); 18351ba086bSDamjan Jovanovic 18451ba086bSDamjan Jovanovic virtual void 18551ba086bSDamjan Jovanovic GET( const ::rtl::OUString & inPath, 18651ba086bSDamjan Jovanovic com::sun::star::uno::Reference< 18751ba086bSDamjan Jovanovic com::sun::star::io::XOutputStream > & ioOutputStream, 18851ba086bSDamjan Jovanovic const std::vector< ::rtl::OUString > & inHeaderNames, 18951ba086bSDamjan Jovanovic DAVResource & ioResource, 19051ba086bSDamjan Jovanovic const DAVRequestEnvironment & rEnv ) 19151ba086bSDamjan Jovanovic throw ( DAVException ); 19251ba086bSDamjan Jovanovic 19351ba086bSDamjan Jovanovic virtual void 19451ba086bSDamjan Jovanovic PUT( const ::rtl::OUString & inPath, 19551ba086bSDamjan Jovanovic const com::sun::star::uno::Reference< 19651ba086bSDamjan Jovanovic com::sun::star::io::XInputStream > & inInputStream, 19751ba086bSDamjan Jovanovic const DAVRequestEnvironment & rEnv ) 19851ba086bSDamjan Jovanovic throw ( DAVException ); 19951ba086bSDamjan Jovanovic 20051ba086bSDamjan Jovanovic virtual com::sun::star::uno::Reference< com::sun::star::io::XInputStream > 20151ba086bSDamjan Jovanovic POST( const rtl::OUString & inPath, 20251ba086bSDamjan Jovanovic const rtl::OUString & rContentType, 20351ba086bSDamjan Jovanovic const rtl::OUString & rReferer, 20451ba086bSDamjan Jovanovic const com::sun::star::uno::Reference< 20551ba086bSDamjan Jovanovic com::sun::star::io::XInputStream > & inInputStream, 20651ba086bSDamjan Jovanovic const DAVRequestEnvironment & rEnv ) 20751ba086bSDamjan Jovanovic throw ( DAVException ); 20851ba086bSDamjan Jovanovic 20951ba086bSDamjan Jovanovic virtual void 21051ba086bSDamjan Jovanovic POST( const rtl::OUString & inPath, 21151ba086bSDamjan Jovanovic const rtl::OUString & rContentType, 21251ba086bSDamjan Jovanovic const rtl::OUString & rReferer, 21351ba086bSDamjan Jovanovic const com::sun::star::uno::Reference< 21451ba086bSDamjan Jovanovic com::sun::star::io::XInputStream > & inInputStream, 21551ba086bSDamjan Jovanovic com::sun::star::uno::Reference< 21651ba086bSDamjan Jovanovic com::sun::star::io::XOutputStream > & oOutputStream, 21751ba086bSDamjan Jovanovic const DAVRequestEnvironment & rEnv ) 21851ba086bSDamjan Jovanovic throw ( DAVException ); 21951ba086bSDamjan Jovanovic 22051ba086bSDamjan Jovanovic virtual void 22151ba086bSDamjan Jovanovic MKCOL( const ::rtl::OUString & inPath, 22251ba086bSDamjan Jovanovic const DAVRequestEnvironment & rEnv ) 22351ba086bSDamjan Jovanovic throw ( DAVException ); 22451ba086bSDamjan Jovanovic 22551ba086bSDamjan Jovanovic virtual void 22651ba086bSDamjan Jovanovic COPY( const ::rtl::OUString & inSourceURL, 22751ba086bSDamjan Jovanovic const ::rtl::OUString & inDestinationURL, 22851ba086bSDamjan Jovanovic const DAVRequestEnvironment & rEnv, 22951ba086bSDamjan Jovanovic sal_Bool inOverWrite ) 23051ba086bSDamjan Jovanovic throw ( DAVException ); 23151ba086bSDamjan Jovanovic 23251ba086bSDamjan Jovanovic virtual void 23351ba086bSDamjan Jovanovic MOVE( const ::rtl::OUString & inSourceURL, 23451ba086bSDamjan Jovanovic const ::rtl::OUString & inDestinationURL, 23551ba086bSDamjan Jovanovic const DAVRequestEnvironment & rEnv, 23651ba086bSDamjan Jovanovic sal_Bool inOverWrite ) 23751ba086bSDamjan Jovanovic throw ( DAVException ); 23851ba086bSDamjan Jovanovic 23951ba086bSDamjan Jovanovic virtual void DESTROY( const ::rtl::OUString & inPath, 24051ba086bSDamjan Jovanovic const DAVRequestEnvironment & rEnv ) 24151ba086bSDamjan Jovanovic throw ( DAVException ); 24251ba086bSDamjan Jovanovic 24351ba086bSDamjan Jovanovic // set new lock. 24451ba086bSDamjan Jovanovic virtual void LOCK( const ::rtl::OUString & inURL, 24551ba086bSDamjan Jovanovic com::sun::star::ucb::Lock & inLock, 24651ba086bSDamjan Jovanovic const DAVRequestEnvironment & rEnv ) 24751ba086bSDamjan Jovanovic throw ( DAVException ); 24851ba086bSDamjan Jovanovic 24951ba086bSDamjan Jovanovic // refresh existing lock. 25051ba086bSDamjan Jovanovic virtual sal_Int64 LOCK( const ::rtl::OUString & inURL, 25151ba086bSDamjan Jovanovic sal_Int64 nTimeout, 25251ba086bSDamjan Jovanovic const DAVRequestEnvironment & rEnv ) 25351ba086bSDamjan Jovanovic throw ( DAVException ); 25451ba086bSDamjan Jovanovic 25551ba086bSDamjan Jovanovic virtual void UNLOCK( const ::rtl::OUString & inURL, 25651ba086bSDamjan Jovanovic const DAVRequestEnvironment & rEnv ) 25751ba086bSDamjan Jovanovic throw ( DAVException ); 25851ba086bSDamjan Jovanovic 25951ba086bSDamjan Jovanovic // helpers 26051ba086bSDamjan Jovanovic virtual void abort() 26151ba086bSDamjan Jovanovic throw ( DAVException ); 26251ba086bSDamjan Jovanovic getHostName() const26351ba086bSDamjan Jovanovic const rtl::OUString & getHostName() const { return m_aUri.GetHost(); } getPort() const26451ba086bSDamjan Jovanovic int getPort() const { return m_aUri.GetPort(); } 26551ba086bSDamjan Jovanovic getMSF()26651ba086bSDamjan Jovanovic const ::uno::Reference< ::lang::XMultiServiceFactory > getMSF() 26751ba086bSDamjan Jovanovic { return m_xFactory->getServiceFactory(); } 26851ba086bSDamjan Jovanovic 26951ba086bSDamjan Jovanovic sal_Bool isDomainMatch( rtl::OUString certHostName ); 27051ba086bSDamjan Jovanovic getServerHeaderField()27151ba086bSDamjan Jovanovic const rtl::OString & getServerHeaderField() { return m_aServerHeaderField; }; 27251ba086bSDamjan Jovanovic 27351ba086bSDamjan Jovanovic private: 27451ba086bSDamjan Jovanovic friend class CurlLockStore; 27551ba086bSDamjan Jovanovic 27651ba086bSDamjan Jovanovic void Init( void ) 27751ba086bSDamjan Jovanovic throw ( DAVException ); 27851ba086bSDamjan Jovanovic 27951ba086bSDamjan Jovanovic void Init( const DAVRequestEnvironment & rEnv ) 28051ba086bSDamjan Jovanovic throw ( DAVException ); 28151ba086bSDamjan Jovanovic 28251ba086bSDamjan Jovanovic const ucbhelper::InternetProxyServer & getProxySettings() const; 28351ba086bSDamjan Jovanovic 28451ba086bSDamjan Jovanovic void propfind( CurlRequest &curlRequest, 28551ba086bSDamjan Jovanovic const rtl::OUString &inPath, 28651ba086bSDamjan Jovanovic const Depth inDepth, 28751ba086bSDamjan Jovanovic const std::vector< ::rtl::OUString > * propNames, 28851ba086bSDamjan Jovanovic const bool onlyPropertyNames, 28951ba086bSDamjan Jovanovic const DAVRequestEnvironment & rEnv ); 29051ba086bSDamjan Jovanovic 29151ba086bSDamjan Jovanovic bool removeExpiredLocktoken( const rtl::OUString & inURL, 29251ba086bSDamjan Jovanovic const DAVRequestEnvironment & rEnv ); 29351ba086bSDamjan Jovanovic 29451ba086bSDamjan Jovanovic // refresh lock, called by CurlLockStore::refreshLocks 29551ba086bSDamjan Jovanovic bool LOCK( CurlLock * pLock, 29651ba086bSDamjan Jovanovic sal_Int32 & rlastChanceToSendRefreshRequest ); 29751ba086bSDamjan Jovanovic 29851ba086bSDamjan Jovanovic // unlock, called by CurlLockStore::~CurlLockStore 29951ba086bSDamjan Jovanovic bool UNLOCK( CurlLock * pLock ); 30051ba086bSDamjan Jovanovic 30151ba086bSDamjan Jovanovic /* 30251ba086bSDamjan Jovanovic // low level GET implementation, used by public GET implementations 30351ba086bSDamjan Jovanovic static int GET( CurlConnection * sess, 30451ba086bSDamjan Jovanovic const char * uri, 30551ba086bSDamjan Jovanovic //ne_block_reader reader, 30651ba086bSDamjan Jovanovic bool getheaders, 30751ba086bSDamjan Jovanovic void * userdata ); 30851ba086bSDamjan Jovanovic 30951ba086bSDamjan Jovanovic // Buffer-based PUT implementation. Serf only has file descriptor- 31051ba086bSDamjan Jovanovic // based API. 31151ba086bSDamjan Jovanovic static int PUT( CurlConnection * sess, 31251ba086bSDamjan Jovanovic const char * uri, 31351ba086bSDamjan Jovanovic const char * buffer, 31451ba086bSDamjan Jovanovic size_t size ); 31551ba086bSDamjan Jovanovic 31651ba086bSDamjan Jovanovic // Buffer-based POST implementation. Serf only has file descriptor- 31751ba086bSDamjan Jovanovic // based API. 31851ba086bSDamjan Jovanovic int POST( CurlConnection * sess, 31951ba086bSDamjan Jovanovic const char * uri, 32051ba086bSDamjan Jovanovic const char * buffer, 32151ba086bSDamjan Jovanovic //ne_block_reader reader, 32251ba086bSDamjan Jovanovic void * userdata, 32351ba086bSDamjan Jovanovic const rtl::OUString & rContentType, 32451ba086bSDamjan Jovanovic const rtl::OUString & rReferer ); 32551ba086bSDamjan Jovanovic */ 32651ba086bSDamjan Jovanovic 32751ba086bSDamjan Jovanovic // Helper: XInputStream -> Sequence< sal_Int8 > 32851ba086bSDamjan Jovanovic static bool getDataFromInputStream( 32951ba086bSDamjan Jovanovic const com::sun::star::uno::Reference< 33051ba086bSDamjan Jovanovic com::sun::star::io::XInputStream > & xStream, 33151ba086bSDamjan Jovanovic com::sun::star::uno::Sequence< sal_Int8 > & rData, 33251ba086bSDamjan Jovanovic bool bAppendTrailingZeroByte ); 33351ba086bSDamjan Jovanovic 33451ba086bSDamjan Jovanovic /* 33551ba086bSDamjan Jovanovic rtl::OUString makeAbsoluteURL( rtl::OUString const & rURL ) const; 33651ba086bSDamjan Jovanovic */ 33751ba086bSDamjan Jovanovic }; 33851ba086bSDamjan Jovanovic 33951ba086bSDamjan Jovanovic } // namespace http_dav_ucp 34051ba086bSDamjan Jovanovic 34151ba086bSDamjan Jovanovic #endif // INCLUDED_CURLSESSION_HXX 342