xref: /trunk/main/ucb/source/ucp/webdav/CurlSession.hxx (revision 914d351e5f5b84e4342a86d6ab8d4aca7308b9bd)
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