xref: /AOO42X/main/ucb/source/ucp/webdav/CurlSession.hxx (revision 9bce9b0d387299c68bd81d539e1478357a103de5)
19646dec5SDamjan Jovanovic /**************************************************************
29646dec5SDamjan Jovanovic  *
39646dec5SDamjan Jovanovic  * Licensed to the Apache Software Foundation (ASF) under one
49646dec5SDamjan Jovanovic  * or more contributor license agreements.  See the NOTICE file
59646dec5SDamjan Jovanovic  * distributed with this work for additional information
69646dec5SDamjan Jovanovic  * regarding copyright ownership.  The ASF licenses this file
79646dec5SDamjan Jovanovic  * to you under the Apache License, Version 2.0 (the
89646dec5SDamjan Jovanovic  * "License"); you may not use this file except in compliance
99646dec5SDamjan Jovanovic  * with the License.  You may obtain a copy of the License at
109646dec5SDamjan Jovanovic  *
119646dec5SDamjan Jovanovic  *   http://www.apache.org/licenses/LICENSE-2.0
129646dec5SDamjan Jovanovic  *
139646dec5SDamjan Jovanovic  * Unless required by applicable law or agreed to in writing,
149646dec5SDamjan Jovanovic  * software distributed under the License is distributed on an
159646dec5SDamjan Jovanovic  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
169646dec5SDamjan Jovanovic  * KIND, either express or implied.  See the License for the
179646dec5SDamjan Jovanovic  * specific language governing permissions and limitations
189646dec5SDamjan Jovanovic  * under the License.
199646dec5SDamjan Jovanovic  *
209646dec5SDamjan Jovanovic  *************************************************************/
219646dec5SDamjan Jovanovic 
229646dec5SDamjan Jovanovic 
239646dec5SDamjan Jovanovic 
249646dec5SDamjan Jovanovic #ifndef INCLUDED_CURLSESSION_HXX
259646dec5SDamjan Jovanovic #define INCLUDED_CURLSESSION_HXX
269646dec5SDamjan Jovanovic 
279646dec5SDamjan Jovanovic #include <vector>
289646dec5SDamjan Jovanovic #include <boost/shared_ptr.hpp>
299646dec5SDamjan Jovanovic #include <osl/mutex.hxx>
309646dec5SDamjan Jovanovic #include <comphelper/componentcontext.hxx>
319646dec5SDamjan Jovanovic #include <comphelper/logging.hxx>
329646dec5SDamjan Jovanovic #include "DAVResource.hxx"
339646dec5SDamjan Jovanovic #include "DAVSession.hxx"
349646dec5SDamjan Jovanovic #include "CurlTypes.hxx"
359646dec5SDamjan Jovanovic #include "CurlRequest.hxx"
369646dec5SDamjan Jovanovic #include "CurlLockStore.hxx"
379646dec5SDamjan Jovanovic #include "CurlUri.hxx"
389646dec5SDamjan Jovanovic #include "CurlInputStream.hxx"
399646dec5SDamjan Jovanovic #include <com/sun/star/lang/XMultiServiceFactory.hpp>
40*0ec0f743SDamjan Jovanovic #include <com/sun/star/security/CertificateContainer.hpp>
41*0ec0f743SDamjan Jovanovic #include <com/sun/star/security/XCertificateContainer.hpp>
42*0ec0f743SDamjan Jovanovic #include <com/sun/star/xml/crypto/XSecurityEnvironment.hpp>
43*0ec0f743SDamjan Jovanovic #include <com/sun/star/xml/crypto/XXMLSecurityContext.hpp>
449646dec5SDamjan Jovanovic #include <curl/curl.h>
459646dec5SDamjan Jovanovic #include <openssl/ssl.h>
469646dec5SDamjan Jovanovic 
479646dec5SDamjan Jovanovic namespace ucbhelper { class ProxyDecider; }
489646dec5SDamjan Jovanovic 
499646dec5SDamjan Jovanovic namespace http_dav_ucp
509646dec5SDamjan Jovanovic {
519646dec5SDamjan Jovanovic 
529646dec5SDamjan Jovanovic // -------------------------------------------------------------------
539646dec5SDamjan Jovanovic // CurlSession
549646dec5SDamjan Jovanovic // A DAVSession implementation using the Curl library
559646dec5SDamjan Jovanovic // -------------------------------------------------------------------
569646dec5SDamjan Jovanovic 
579646dec5SDamjan Jovanovic class CurlSession : public DAVSession
589646dec5SDamjan Jovanovic {
599646dec5SDamjan Jovanovic private:
609646dec5SDamjan Jovanovic     osl::Mutex                      m_aMutex;
619646dec5SDamjan Jovanovic     ::comphelper::ComponentContext  m_aContext;
629646dec5SDamjan Jovanovic     ::comphelper::EventLogger       m_aLogger;
639646dec5SDamjan Jovanovic 
649646dec5SDamjan Jovanovic     CurlUri                 m_aUri;
659646dec5SDamjan Jovanovic 
669646dec5SDamjan Jovanovic     rtl::OUString           m_aProxyName;
679646dec5SDamjan Jovanovic     sal_Int32               m_nProxyPort;
689646dec5SDamjan Jovanovic     // The server, according RFC7231
699646dec5SDamjan Jovanovic     // http://tools.ietf.org/html/rfc7231#section-7.4.2
709646dec5SDamjan Jovanovic     rtl::OString            m_aServerHeaderField;
719646dec5SDamjan Jovanovic 
729646dec5SDamjan Jovanovic     CURL*                   m_pCurl;
739646dec5SDamjan Jovanovic     bool                    m_bUseChunkedEncoding;
749646dec5SDamjan Jovanovic     bool                    m_bTransferEncodingSwitched;
759646dec5SDamjan Jovanovic 
769646dec5SDamjan Jovanovic     const ucbhelper::InternetProxyDecider & m_rProxyDecider;
779646dec5SDamjan Jovanovic 
789646dec5SDamjan Jovanovic     DAVRequestEnvironment m_aEnv;
799646dec5SDamjan Jovanovic 
809646dec5SDamjan Jovanovic     static CurlLockStore m_aCurlLockStore;
819646dec5SDamjan Jovanovic 
82*0ec0f743SDamjan Jovanovic     ::com::sun::star::uno::Reference< ::com::sun::star::security::XCertificateContainer > m_xCertificateContainer;
83*0ec0f743SDamjan Jovanovic     ::com::sun::star::uno::Reference< ::com::sun::star::xml::crypto::XXMLSecurityContext > m_xSecurityContext;
84*0ec0f743SDamjan Jovanovic     ::com::sun::star::uno::Reference< ::com::sun::star::xml::crypto::XSecurityEnvironment > m_xSecurityEnv;
85*0ec0f743SDamjan Jovanovic 
869646dec5SDamjan Jovanovic     bool isSSLNeeded();
879646dec5SDamjan Jovanovic 
889646dec5SDamjan Jovanovic 
899646dec5SDamjan Jovanovic     rtl::OUString           composeCurrentUri( const rtl::OUString & inPath );
909646dec5SDamjan Jovanovic     void                    addEnvironmentRequestHeaders( CurlRequest &curlRequest,
919646dec5SDamjan Jovanovic                                                           const DAVRequestEnvironment &env )
929646dec5SDamjan Jovanovic                                 throw ( DAVException );
939646dec5SDamjan Jovanovic     void                    processResponse( CurlRequest &curlRequest,
949646dec5SDamjan Jovanovic                                              CURLcode curlCode )
959646dec5SDamjan Jovanovic                                 throw ( DAVException );
969646dec5SDamjan Jovanovic 
979646dec5SDamjan Jovanovic     static CURLcode         Curl_SSLContextCallback( CURL *curl,
989646dec5SDamjan Jovanovic                                                      void *ssl_ctx,
999646dec5SDamjan Jovanovic                                                      void *userptr );
100*0ec0f743SDamjan Jovanovic     static int              OPENSSL_VerifyCertificate( X509_STORE_CTX *x509_ctx, void *arg );
101*0ec0f743SDamjan Jovanovic     int                     verifyServerX509Certificate( X509_STORE_CTX *x509StoreContext );
1029646dec5SDamjan Jovanovic     int                     verifyCertificateChain (
1039646dec5SDamjan Jovanovic                                 std::vector< uno::Sequence< sal_Int8 > > &asn1DerCertificates );
1049646dec5SDamjan Jovanovic 
1059646dec5SDamjan Jovanovic     static int              Curl_DebugCallback( CURL *,
1069646dec5SDamjan Jovanovic                                                 curl_infotype type,
1079646dec5SDamjan Jovanovic                                                 unsigned char *data,
1089646dec5SDamjan Jovanovic                                                 size_t size,
1099646dec5SDamjan Jovanovic                                                 void* userdata );
1109646dec5SDamjan Jovanovic     int                     curlDebugOutput( curl_infotype type, char *data, int size );
1119646dec5SDamjan Jovanovic 
1129646dec5SDamjan Jovanovic     static bool             Curl_ProvideCredentials( long statusCode,
1139646dec5SDamjan Jovanovic                                                      void *userdata ) throw (DAVException);
1149646dec5SDamjan Jovanovic     bool                    provideCredentials( const DAVRequestEnvironment &env,
1159646dec5SDamjan Jovanovic                                                 CurlRequest &request,
1169646dec5SDamjan Jovanovic                                                 long statusCode ) throw (DAVException);
1179646dec5SDamjan Jovanovic 
1189646dec5SDamjan Jovanovic protected:
1199646dec5SDamjan Jovanovic     virtual ~CurlSession();
1209646dec5SDamjan Jovanovic 
1219646dec5SDamjan Jovanovic public:
1229646dec5SDamjan Jovanovic     CurlSession( const rtl::Reference< DAVSessionFactory > & rSessionFactory,
1239646dec5SDamjan Jovanovic                  const rtl::OUString& inUri,
1249646dec5SDamjan Jovanovic                  const ucbhelper::InternetProxyDecider & rProxyDecider )
1259646dec5SDamjan Jovanovic         throw ( DAVException );
1269646dec5SDamjan Jovanovic 
1279646dec5SDamjan Jovanovic     // DAVSession methods
1289646dec5SDamjan Jovanovic     virtual sal_Bool CanUse( const ::rtl::OUString & inUri );
1299646dec5SDamjan Jovanovic 
1309646dec5SDamjan Jovanovic     virtual sal_Bool UsesProxy();
1319646dec5SDamjan Jovanovic 
getRequestEnvironment() const1329646dec5SDamjan Jovanovic     const DAVRequestEnvironment & getRequestEnvironment() const
1339646dec5SDamjan Jovanovic     { return m_aEnv; }
1349646dec5SDamjan Jovanovic 
1359646dec5SDamjan Jovanovic     // allprop & named
1369646dec5SDamjan Jovanovic     virtual void
1379646dec5SDamjan Jovanovic     PROPFIND( const ::rtl::OUString & inPath,
1389646dec5SDamjan Jovanovic               const Depth inDepth,
1399646dec5SDamjan Jovanovic               const std::vector< ::rtl::OUString > & inPropNames,
1409646dec5SDamjan Jovanovic               std::vector< DAVResource > & ioResources,
1419646dec5SDamjan Jovanovic               const DAVRequestEnvironment & rEnv )
1429646dec5SDamjan Jovanovic         throw ( DAVException );
1439646dec5SDamjan Jovanovic 
1449646dec5SDamjan Jovanovic     // propnames
1459646dec5SDamjan Jovanovic     virtual void
1469646dec5SDamjan Jovanovic     PROPFIND( const ::rtl::OUString & inPath,
1479646dec5SDamjan Jovanovic               const Depth inDepth,
1489646dec5SDamjan Jovanovic               std::vector< DAVResourceInfo >& ioResInfo,
1499646dec5SDamjan Jovanovic               const DAVRequestEnvironment & rEnv )
1509646dec5SDamjan Jovanovic         throw ( DAVException );
1519646dec5SDamjan Jovanovic 
1529646dec5SDamjan Jovanovic     virtual void
1539646dec5SDamjan Jovanovic     PROPPATCH( const ::rtl::OUString & inPath,
1549646dec5SDamjan Jovanovic                const std::vector< ProppatchValue > & inValues,
1559646dec5SDamjan Jovanovic                const DAVRequestEnvironment & rEnv )
1569646dec5SDamjan Jovanovic         throw ( DAVException );
1579646dec5SDamjan Jovanovic 
1589646dec5SDamjan Jovanovic     virtual void
1599646dec5SDamjan Jovanovic     HEAD( const ::rtl::OUString &  inPath,
1609646dec5SDamjan Jovanovic           const std::vector< ::rtl::OUString > & inHeaderNames,
1619646dec5SDamjan Jovanovic           DAVResource & ioResource,
1629646dec5SDamjan Jovanovic           const DAVRequestEnvironment & rEnv )
1639646dec5SDamjan Jovanovic         throw ( DAVException );
1649646dec5SDamjan Jovanovic 
1659646dec5SDamjan Jovanovic     virtual com::sun::star::uno::Reference< com::sun::star::io::XInputStream >
1669646dec5SDamjan Jovanovic     GET( const ::rtl::OUString & inPath,
1679646dec5SDamjan Jovanovic          const DAVRequestEnvironment & rEnv )
1689646dec5SDamjan Jovanovic         throw ( DAVException );
1699646dec5SDamjan Jovanovic 
1709646dec5SDamjan Jovanovic     virtual void
1719646dec5SDamjan Jovanovic     GET( const ::rtl::OUString & inPath,
1729646dec5SDamjan Jovanovic          com::sun::star::uno::Reference<
1739646dec5SDamjan Jovanovic              com::sun::star::io::XOutputStream > &  ioOutputStream,
1749646dec5SDamjan Jovanovic          const DAVRequestEnvironment & rEnv )
1759646dec5SDamjan Jovanovic         throw ( DAVException );
1769646dec5SDamjan Jovanovic 
1779646dec5SDamjan Jovanovic     virtual com::sun::star::uno::Reference< com::sun::star::io::XInputStream >
1789646dec5SDamjan Jovanovic     GET( const ::rtl::OUString & inPath,
1799646dec5SDamjan Jovanovic          const std::vector< ::rtl::OUString > & inHeaderNames,
1809646dec5SDamjan Jovanovic          DAVResource & ioResource,
1819646dec5SDamjan Jovanovic          const DAVRequestEnvironment & rEnv )
1829646dec5SDamjan Jovanovic         throw ( DAVException );
1839646dec5SDamjan Jovanovic 
1849646dec5SDamjan Jovanovic     virtual void
1859646dec5SDamjan Jovanovic     GET( const ::rtl::OUString & inPath,
1869646dec5SDamjan Jovanovic          com::sun::star::uno::Reference<
1879646dec5SDamjan Jovanovic              com::sun::star::io::XOutputStream > & ioOutputStream,
1889646dec5SDamjan Jovanovic          const std::vector< ::rtl::OUString > & inHeaderNames,
1899646dec5SDamjan Jovanovic          DAVResource & ioResource,
1909646dec5SDamjan Jovanovic          const DAVRequestEnvironment & rEnv )
1919646dec5SDamjan Jovanovic         throw ( DAVException );
1929646dec5SDamjan Jovanovic 
1939646dec5SDamjan Jovanovic     virtual void
1949646dec5SDamjan Jovanovic     PUT( const ::rtl::OUString & inPath,
1959646dec5SDamjan Jovanovic          const com::sun::star::uno::Reference<
1969646dec5SDamjan Jovanovic              com::sun::star::io::XInputStream > & inInputStream,
1979646dec5SDamjan Jovanovic          const DAVRequestEnvironment & rEnv )
1989646dec5SDamjan Jovanovic         throw ( DAVException );
1999646dec5SDamjan Jovanovic 
2009646dec5SDamjan Jovanovic     virtual com::sun::star::uno::Reference< com::sun::star::io::XInputStream >
2019646dec5SDamjan Jovanovic     POST( const rtl::OUString & inPath,
2029646dec5SDamjan Jovanovic           const rtl::OUString & rContentType,
2039646dec5SDamjan Jovanovic           const rtl::OUString & rReferer,
2049646dec5SDamjan Jovanovic           const com::sun::star::uno::Reference<
2059646dec5SDamjan Jovanovic               com::sun::star::io::XInputStream > & inInputStream,
2069646dec5SDamjan Jovanovic           const DAVRequestEnvironment & rEnv )
2079646dec5SDamjan Jovanovic         throw ( DAVException );
2089646dec5SDamjan Jovanovic 
2099646dec5SDamjan Jovanovic     virtual void
2109646dec5SDamjan Jovanovic     POST( const rtl::OUString & inPath,
2119646dec5SDamjan Jovanovic           const rtl::OUString & rContentType,
2129646dec5SDamjan Jovanovic           const rtl::OUString & rReferer,
2139646dec5SDamjan Jovanovic           const com::sun::star::uno::Reference<
2149646dec5SDamjan Jovanovic               com::sun::star::io::XInputStream > & inInputStream,
2159646dec5SDamjan Jovanovic           com::sun::star::uno::Reference<
2169646dec5SDamjan Jovanovic               com::sun::star::io::XOutputStream > & oOutputStream,
2179646dec5SDamjan Jovanovic           const DAVRequestEnvironment & rEnv )
2189646dec5SDamjan Jovanovic         throw ( DAVException );
2199646dec5SDamjan Jovanovic 
2209646dec5SDamjan Jovanovic     virtual void
2219646dec5SDamjan Jovanovic     MKCOL( const ::rtl::OUString & inPath,
2229646dec5SDamjan Jovanovic            const DAVRequestEnvironment & rEnv )
2239646dec5SDamjan Jovanovic         throw ( DAVException );
2249646dec5SDamjan Jovanovic 
2259646dec5SDamjan Jovanovic     virtual void
2269646dec5SDamjan Jovanovic     COPY( const ::rtl::OUString & inSourceURL,
2279646dec5SDamjan Jovanovic           const ::rtl::OUString & inDestinationURL,
2289646dec5SDamjan Jovanovic           const DAVRequestEnvironment & rEnv,
2299646dec5SDamjan Jovanovic           sal_Bool inOverWrite )
2309646dec5SDamjan Jovanovic         throw ( DAVException );
2319646dec5SDamjan Jovanovic 
2329646dec5SDamjan Jovanovic     virtual void
2339646dec5SDamjan Jovanovic     MOVE( const ::rtl::OUString & inSourceURL,
2349646dec5SDamjan Jovanovic           const ::rtl::OUString & inDestinationURL,
2359646dec5SDamjan Jovanovic           const DAVRequestEnvironment & rEnv,
2369646dec5SDamjan Jovanovic           sal_Bool inOverWrite )
2379646dec5SDamjan Jovanovic         throw ( DAVException );
2389646dec5SDamjan Jovanovic 
2399646dec5SDamjan Jovanovic     virtual void DESTROY( const ::rtl::OUString & inPath,
2409646dec5SDamjan Jovanovic                           const DAVRequestEnvironment & rEnv )
2419646dec5SDamjan Jovanovic         throw ( DAVException );
2429646dec5SDamjan Jovanovic 
2439646dec5SDamjan Jovanovic     // set new lock.
2449646dec5SDamjan Jovanovic     virtual void LOCK( const ::rtl::OUString & inURL,
2459646dec5SDamjan Jovanovic                        com::sun::star::ucb::Lock & inLock,
2469646dec5SDamjan Jovanovic                        const DAVRequestEnvironment & rEnv )
2479646dec5SDamjan Jovanovic         throw ( DAVException );
2489646dec5SDamjan Jovanovic 
2499646dec5SDamjan Jovanovic     // refresh existing lock.
2509646dec5SDamjan Jovanovic     virtual sal_Int64 LOCK( const ::rtl::OUString & inURL,
2519646dec5SDamjan Jovanovic                             sal_Int64 nTimeout,
2529646dec5SDamjan Jovanovic                             const DAVRequestEnvironment & rEnv )
2539646dec5SDamjan Jovanovic         throw ( DAVException );
2549646dec5SDamjan Jovanovic 
2559646dec5SDamjan Jovanovic     virtual void UNLOCK( const ::rtl::OUString & inURL,
2569646dec5SDamjan Jovanovic                          const DAVRequestEnvironment & rEnv )
2579646dec5SDamjan Jovanovic         throw ( DAVException );
2589646dec5SDamjan Jovanovic 
2599646dec5SDamjan Jovanovic     // helpers
2609646dec5SDamjan Jovanovic     virtual void abort()
2619646dec5SDamjan Jovanovic         throw ( DAVException );
2629646dec5SDamjan Jovanovic 
getHostName() const2639646dec5SDamjan Jovanovic     const rtl::OUString & getHostName() const { return m_aUri.GetHost(); }
getPort() const2649646dec5SDamjan Jovanovic     int getPort() const { return m_aUri.GetPort(); }
2659646dec5SDamjan Jovanovic 
getMSF()2669646dec5SDamjan Jovanovic     const ::uno::Reference< ::lang::XMultiServiceFactory > getMSF()
2679646dec5SDamjan Jovanovic     { return m_xFactory->getServiceFactory(); }
2689646dec5SDamjan Jovanovic 
2699646dec5SDamjan Jovanovic     sal_Bool isDomainMatch( rtl::OUString certHostName );
2709646dec5SDamjan Jovanovic 
getServerHeaderField()2719646dec5SDamjan Jovanovic     const rtl::OString & getServerHeaderField() { return m_aServerHeaderField; };
2729646dec5SDamjan Jovanovic 
2739646dec5SDamjan Jovanovic private:
2749646dec5SDamjan Jovanovic     friend class CurlLockStore;
2759646dec5SDamjan Jovanovic 
2769646dec5SDamjan Jovanovic     void Init( void )
2779646dec5SDamjan Jovanovic         throw ( DAVException );
2789646dec5SDamjan Jovanovic 
2799646dec5SDamjan Jovanovic     void Init( const DAVRequestEnvironment & rEnv )
2809646dec5SDamjan Jovanovic         throw ( DAVException );
2819646dec5SDamjan Jovanovic 
2829646dec5SDamjan Jovanovic     const ucbhelper::InternetProxyServer & getProxySettings() const;
2839646dec5SDamjan Jovanovic 
2849646dec5SDamjan Jovanovic     void propfind( CurlRequest &curlRequest,
2859646dec5SDamjan Jovanovic                    const rtl::OUString &inPath,
2869646dec5SDamjan Jovanovic                    const Depth inDepth,
2879646dec5SDamjan Jovanovic                    const std::vector< ::rtl::OUString > * propNames,
2889646dec5SDamjan Jovanovic                    const bool onlyPropertyNames,
2899646dec5SDamjan Jovanovic                    const DAVRequestEnvironment & rEnv );
2909646dec5SDamjan Jovanovic 
2919646dec5SDamjan Jovanovic     bool removeExpiredLocktoken( const rtl::OUString & inURL,
2929646dec5SDamjan Jovanovic                                  const DAVRequestEnvironment & rEnv );
2939646dec5SDamjan Jovanovic 
2949646dec5SDamjan Jovanovic     // refresh lock, called by CurlLockStore::refreshLocks
2959646dec5SDamjan Jovanovic     bool LOCK( CurlLock * pLock,
2969646dec5SDamjan Jovanovic                sal_Int32 & rlastChanceToSendRefreshRequest );
2979646dec5SDamjan Jovanovic 
2989646dec5SDamjan Jovanovic     // unlock, called by CurlLockStore::~CurlLockStore
2999646dec5SDamjan Jovanovic     bool UNLOCK( CurlLock * pLock );
3009646dec5SDamjan Jovanovic 
3019646dec5SDamjan Jovanovic     /*
3029646dec5SDamjan Jovanovic     // low level GET implementation, used by public GET implementations
3039646dec5SDamjan Jovanovic     static int GET( CurlConnection * sess,
3049646dec5SDamjan Jovanovic                     const char * uri,
3059646dec5SDamjan Jovanovic                     //ne_block_reader reader,
3069646dec5SDamjan Jovanovic                     bool getheaders,
3079646dec5SDamjan Jovanovic                     void * userdata );
3089646dec5SDamjan Jovanovic 
3099646dec5SDamjan Jovanovic     // Buffer-based PUT implementation. Serf only has file descriptor-
3109646dec5SDamjan Jovanovic     // based API.
3119646dec5SDamjan Jovanovic     static int PUT( CurlConnection * sess,
3129646dec5SDamjan Jovanovic                     const char * uri,
3139646dec5SDamjan Jovanovic                     const char * buffer,
3149646dec5SDamjan Jovanovic                     size_t size );
3159646dec5SDamjan Jovanovic 
3169646dec5SDamjan Jovanovic     // Buffer-based POST implementation. Serf only has file descriptor-
3179646dec5SDamjan Jovanovic     // based API.
3189646dec5SDamjan Jovanovic     int POST( CurlConnection * sess,
3199646dec5SDamjan Jovanovic               const char * uri,
3209646dec5SDamjan Jovanovic               const char * buffer,
3219646dec5SDamjan Jovanovic               //ne_block_reader reader,
3229646dec5SDamjan Jovanovic               void * userdata,
3239646dec5SDamjan Jovanovic               const rtl::OUString & rContentType,
3249646dec5SDamjan Jovanovic               const rtl::OUString & rReferer );
3259646dec5SDamjan Jovanovic     */
3269646dec5SDamjan Jovanovic 
3279646dec5SDamjan Jovanovic     // Helper: XInputStream -> Sequence< sal_Int8 >
3289646dec5SDamjan Jovanovic     static bool getDataFromInputStream(
3299646dec5SDamjan Jovanovic         const com::sun::star::uno::Reference<
3309646dec5SDamjan Jovanovic             com::sun::star::io::XInputStream > & xStream,
3319646dec5SDamjan Jovanovic         com::sun::star::uno::Sequence< sal_Int8 > & rData,
3329646dec5SDamjan Jovanovic         bool bAppendTrailingZeroByte );
3339646dec5SDamjan Jovanovic 
3349646dec5SDamjan Jovanovic     /*
3359646dec5SDamjan Jovanovic     rtl::OUString makeAbsoluteURL( rtl::OUString const & rURL ) const;
3369646dec5SDamjan Jovanovic     */
3379646dec5SDamjan Jovanovic };
3389646dec5SDamjan Jovanovic 
3399646dec5SDamjan Jovanovic } // namespace http_dav_ucp
3409646dec5SDamjan Jovanovic 
3419646dec5SDamjan Jovanovic #endif // INCLUDED_CURLSESSION_HXX
342