1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski #ifndef INCLUDED_SERFSESSION_HXX 25*b1cdbd2cSJim Jagielski #define INCLUDED_SERFSESSION_HXX 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski #include <vector> 28*b1cdbd2cSJim Jagielski #include <boost/shared_ptr.hpp> 29*b1cdbd2cSJim Jagielski #include <osl/mutex.hxx> 30*b1cdbd2cSJim Jagielski #include "DAVResource.hxx" 31*b1cdbd2cSJim Jagielski #include "DAVSession.hxx" 32*b1cdbd2cSJim Jagielski #include "SerfTypes.hxx" 33*b1cdbd2cSJim Jagielski #include "SerfLockStore.hxx" 34*b1cdbd2cSJim Jagielski #include "SerfUri.hxx" 35*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XMultiServiceFactory.hpp> 36*b1cdbd2cSJim Jagielski 37*b1cdbd2cSJim Jagielski namespace ucbhelper { class ProxyDecider; } 38*b1cdbd2cSJim Jagielski 39*b1cdbd2cSJim Jagielski namespace http_dav_ucp 40*b1cdbd2cSJim Jagielski { 41*b1cdbd2cSJim Jagielski 42*b1cdbd2cSJim Jagielski class SerfRequestProcessor; 43*b1cdbd2cSJim Jagielski 44*b1cdbd2cSJim Jagielski // ------------------------------------------------------------------- 45*b1cdbd2cSJim Jagielski // SerfSession 46*b1cdbd2cSJim Jagielski // A DAVSession implementation using the neon/expat library 47*b1cdbd2cSJim Jagielski // ------------------------------------------------------------------- 48*b1cdbd2cSJim Jagielski 49*b1cdbd2cSJim Jagielski class SerfSession : public DAVSession 50*b1cdbd2cSJim Jagielski { 51*b1cdbd2cSJim Jagielski private: 52*b1cdbd2cSJim Jagielski osl::Mutex m_aMutex; 53*b1cdbd2cSJim Jagielski 54*b1cdbd2cSJim Jagielski SerfUri m_aUri; 55*b1cdbd2cSJim Jagielski 56*b1cdbd2cSJim Jagielski rtl::OUString m_aProxyName; 57*b1cdbd2cSJim Jagielski sal_Int32 m_nProxyPort; 58*b1cdbd2cSJim Jagielski // The server, according RFC7231 59*b1cdbd2cSJim Jagielski // http://tools.ietf.org/html/rfc7231#section-7.4.2 60*b1cdbd2cSJim Jagielski rtl::OUString m_aServerHeaderField; 61*b1cdbd2cSJim Jagielski 62*b1cdbd2cSJim Jagielski SerfConnection* m_pSerfConnection; 63*b1cdbd2cSJim Jagielski serf_context_t* m_pSerfContext; 64*b1cdbd2cSJim Jagielski serf_bucket_alloc_t* m_pSerfBucket_Alloc; 65*b1cdbd2cSJim Jagielski bool m_bIsHeadRequestInProgress; 66*b1cdbd2cSJim Jagielski bool m_bUseChunkedEncoding; 67*b1cdbd2cSJim Jagielski sal_Int16 m_bNoOfTransferEncodingSwitches; 68*b1cdbd2cSJim Jagielski 69*b1cdbd2cSJim Jagielski const ucbhelper::InternetProxyDecider & m_rProxyDecider; 70*b1cdbd2cSJim Jagielski 71*b1cdbd2cSJim Jagielski DAVRequestEnvironment m_aEnv; 72*b1cdbd2cSJim Jagielski 73*b1cdbd2cSJim Jagielski static SerfLockStore m_aSerfLockStore; 74*b1cdbd2cSJim Jagielski 75*b1cdbd2cSJim Jagielski char* getHostinfo(); 76*b1cdbd2cSJim Jagielski bool isSSLNeeded(); 77*b1cdbd2cSJim Jagielski 78*b1cdbd2cSJim Jagielski SerfRequestProcessor* createReqProc( const rtl::OUString & inPath ); 79*b1cdbd2cSJim Jagielski 80*b1cdbd2cSJim Jagielski rtl::OUString composeCurrentUri( const rtl::OUString & inPath ); 81*b1cdbd2cSJim Jagielski 82*b1cdbd2cSJim Jagielski protected: 83*b1cdbd2cSJim Jagielski virtual ~SerfSession(); 84*b1cdbd2cSJim Jagielski 85*b1cdbd2cSJim Jagielski public: 86*b1cdbd2cSJim Jagielski SerfSession( const rtl::Reference< DAVSessionFactory > & rSessionFactory, 87*b1cdbd2cSJim Jagielski const rtl::OUString& inUri, 88*b1cdbd2cSJim Jagielski const ucbhelper::InternetProxyDecider & rProxyDecider ) 89*b1cdbd2cSJim Jagielski throw ( DAVException ); 90*b1cdbd2cSJim Jagielski 91*b1cdbd2cSJim Jagielski // Serf library callbacks 92*b1cdbd2cSJim Jagielski apr_status_t setupSerfConnection( apr_socket_t * inAprSocket, 93*b1cdbd2cSJim Jagielski serf_bucket_t **outSerfInputBucket, 94*b1cdbd2cSJim Jagielski serf_bucket_t **outSerfOutputBucket, 95*b1cdbd2cSJim Jagielski apr_pool_t* inAprPool ); 96*b1cdbd2cSJim Jagielski 97*b1cdbd2cSJim Jagielski apr_status_t provideSerfCredentials( bool bGiveProvidedCredentialsASecondTry, 98*b1cdbd2cSJim Jagielski char ** outUsername, 99*b1cdbd2cSJim Jagielski char ** outPassword, 100*b1cdbd2cSJim Jagielski serf_request_t * inRequest, 101*b1cdbd2cSJim Jagielski int inCode, 102*b1cdbd2cSJim Jagielski const char *inAuthProtocol, 103*b1cdbd2cSJim Jagielski const char *inRealm, 104*b1cdbd2cSJim Jagielski apr_pool_t *inAprPool ); 105*b1cdbd2cSJim Jagielski 106*b1cdbd2cSJim Jagielski apr_status_t verifySerfCertificateChain ( 107*b1cdbd2cSJim Jagielski int nFailures, 108*b1cdbd2cSJim Jagielski const serf_ssl_certificate_t * const * pCertificateChainBase64Encoded, 109*b1cdbd2cSJim Jagielski int nCertificateChainLength); 110*b1cdbd2cSJim Jagielski 111*b1cdbd2cSJim Jagielski serf_bucket_t* acceptSerfResponse( serf_request_t * inSerfRequest, 112*b1cdbd2cSJim Jagielski serf_bucket_t * inSerfStreamBucket, 113*b1cdbd2cSJim Jagielski apr_pool_t* inAprPool ); 114*b1cdbd2cSJim Jagielski 115*b1cdbd2cSJim Jagielski // Serf-related data structures 116*b1cdbd2cSJim Jagielski apr_pool_t* getAprPool(); 117*b1cdbd2cSJim Jagielski serf_bucket_alloc_t* getSerfBktAlloc(); 118*b1cdbd2cSJim Jagielski serf_context_t* getSerfContext(); 119*b1cdbd2cSJim Jagielski SerfConnection* getSerfConnection(); 120*b1cdbd2cSJim Jagielski 121*b1cdbd2cSJim Jagielski // DAVSession methods 122*b1cdbd2cSJim Jagielski virtual sal_Bool CanUse( const ::rtl::OUString & inUri ); 123*b1cdbd2cSJim Jagielski 124*b1cdbd2cSJim Jagielski virtual sal_Bool UsesProxy(); 125*b1cdbd2cSJim Jagielski getRequestEnvironment() const126*b1cdbd2cSJim Jagielski const DAVRequestEnvironment & getRequestEnvironment() const 127*b1cdbd2cSJim Jagielski { return m_aEnv; } 128*b1cdbd2cSJim Jagielski 129*b1cdbd2cSJim Jagielski // allprop & named 130*b1cdbd2cSJim Jagielski virtual void 131*b1cdbd2cSJim Jagielski PROPFIND( const ::rtl::OUString & inPath, 132*b1cdbd2cSJim Jagielski const Depth inDepth, 133*b1cdbd2cSJim Jagielski const std::vector< ::rtl::OUString > & inPropNames, 134*b1cdbd2cSJim Jagielski std::vector< DAVResource > & ioResources, 135*b1cdbd2cSJim Jagielski const DAVRequestEnvironment & rEnv ) 136*b1cdbd2cSJim Jagielski throw ( DAVException ); 137*b1cdbd2cSJim Jagielski 138*b1cdbd2cSJim Jagielski // propnames 139*b1cdbd2cSJim Jagielski virtual void 140*b1cdbd2cSJim Jagielski PROPFIND( const ::rtl::OUString & inPath, 141*b1cdbd2cSJim Jagielski const Depth inDepth, 142*b1cdbd2cSJim Jagielski std::vector< DAVResourceInfo >& ioResInfo, 143*b1cdbd2cSJim Jagielski const DAVRequestEnvironment & rEnv ) 144*b1cdbd2cSJim Jagielski throw ( DAVException ); 145*b1cdbd2cSJim Jagielski 146*b1cdbd2cSJim Jagielski virtual void 147*b1cdbd2cSJim Jagielski PROPPATCH( const ::rtl::OUString & inPath, 148*b1cdbd2cSJim Jagielski const std::vector< ProppatchValue > & inValues, 149*b1cdbd2cSJim Jagielski const DAVRequestEnvironment & rEnv ) 150*b1cdbd2cSJim Jagielski throw ( DAVException ); 151*b1cdbd2cSJim Jagielski 152*b1cdbd2cSJim Jagielski virtual void 153*b1cdbd2cSJim Jagielski HEAD( const ::rtl::OUString & inPath, 154*b1cdbd2cSJim Jagielski const std::vector< ::rtl::OUString > & inHeaderNames, 155*b1cdbd2cSJim Jagielski DAVResource & ioResource, 156*b1cdbd2cSJim Jagielski const DAVRequestEnvironment & rEnv ) 157*b1cdbd2cSJim Jagielski throw ( DAVException ); 158*b1cdbd2cSJim Jagielski 159*b1cdbd2cSJim Jagielski bool isHeadRequestInProgress(); 160*b1cdbd2cSJim Jagielski 161*b1cdbd2cSJim Jagielski virtual com::sun::star::uno::Reference< com::sun::star::io::XInputStream > 162*b1cdbd2cSJim Jagielski GET( const ::rtl::OUString & inPath, 163*b1cdbd2cSJim Jagielski const DAVRequestEnvironment & rEnv ) 164*b1cdbd2cSJim Jagielski throw ( DAVException ); 165*b1cdbd2cSJim Jagielski 166*b1cdbd2cSJim Jagielski virtual void 167*b1cdbd2cSJim Jagielski GET( const ::rtl::OUString & inPath, 168*b1cdbd2cSJim Jagielski com::sun::star::uno::Reference< 169*b1cdbd2cSJim Jagielski com::sun::star::io::XOutputStream > & ioOutputStream, 170*b1cdbd2cSJim Jagielski const DAVRequestEnvironment & rEnv ) 171*b1cdbd2cSJim Jagielski throw ( DAVException ); 172*b1cdbd2cSJim Jagielski 173*b1cdbd2cSJim Jagielski virtual com::sun::star::uno::Reference< com::sun::star::io::XInputStream > 174*b1cdbd2cSJim Jagielski GET( const ::rtl::OUString & inPath, 175*b1cdbd2cSJim Jagielski const std::vector< ::rtl::OUString > & inHeaderNames, 176*b1cdbd2cSJim Jagielski DAVResource & ioResource, 177*b1cdbd2cSJim Jagielski const DAVRequestEnvironment & rEnv ) 178*b1cdbd2cSJim Jagielski throw ( DAVException ); 179*b1cdbd2cSJim Jagielski 180*b1cdbd2cSJim Jagielski virtual void 181*b1cdbd2cSJim Jagielski GET( const ::rtl::OUString & inPath, 182*b1cdbd2cSJim Jagielski com::sun::star::uno::Reference< 183*b1cdbd2cSJim Jagielski com::sun::star::io::XOutputStream > & ioOutputStream, 184*b1cdbd2cSJim Jagielski const std::vector< ::rtl::OUString > & inHeaderNames, 185*b1cdbd2cSJim Jagielski DAVResource & ioResource, 186*b1cdbd2cSJim Jagielski const DAVRequestEnvironment & rEnv ) 187*b1cdbd2cSJim Jagielski throw ( DAVException ); 188*b1cdbd2cSJim Jagielski 189*b1cdbd2cSJim Jagielski virtual void 190*b1cdbd2cSJim Jagielski PUT( const ::rtl::OUString & inPath, 191*b1cdbd2cSJim Jagielski const com::sun::star::uno::Reference< 192*b1cdbd2cSJim Jagielski com::sun::star::io::XInputStream > & inInputStream, 193*b1cdbd2cSJim Jagielski const DAVRequestEnvironment & rEnv ) 194*b1cdbd2cSJim Jagielski throw ( DAVException ); 195*b1cdbd2cSJim Jagielski 196*b1cdbd2cSJim Jagielski virtual com::sun::star::uno::Reference< com::sun::star::io::XInputStream > 197*b1cdbd2cSJim Jagielski POST( const rtl::OUString & inPath, 198*b1cdbd2cSJim Jagielski const rtl::OUString & rContentType, 199*b1cdbd2cSJim Jagielski const rtl::OUString & rReferer, 200*b1cdbd2cSJim Jagielski const com::sun::star::uno::Reference< 201*b1cdbd2cSJim Jagielski com::sun::star::io::XInputStream > & inInputStream, 202*b1cdbd2cSJim Jagielski const DAVRequestEnvironment & rEnv ) 203*b1cdbd2cSJim Jagielski throw ( DAVException ); 204*b1cdbd2cSJim Jagielski 205*b1cdbd2cSJim Jagielski virtual void 206*b1cdbd2cSJim Jagielski POST( const rtl::OUString & inPath, 207*b1cdbd2cSJim Jagielski const rtl::OUString & rContentType, 208*b1cdbd2cSJim Jagielski const rtl::OUString & rReferer, 209*b1cdbd2cSJim Jagielski const com::sun::star::uno::Reference< 210*b1cdbd2cSJim Jagielski com::sun::star::io::XInputStream > & inInputStream, 211*b1cdbd2cSJim Jagielski com::sun::star::uno::Reference< 212*b1cdbd2cSJim Jagielski com::sun::star::io::XOutputStream > & oOutputStream, 213*b1cdbd2cSJim Jagielski const DAVRequestEnvironment & rEnv ) 214*b1cdbd2cSJim Jagielski throw ( DAVException ); 215*b1cdbd2cSJim Jagielski 216*b1cdbd2cSJim Jagielski virtual void 217*b1cdbd2cSJim Jagielski MKCOL( const ::rtl::OUString & inPath, 218*b1cdbd2cSJim Jagielski const DAVRequestEnvironment & rEnv ) 219*b1cdbd2cSJim Jagielski throw ( DAVException ); 220*b1cdbd2cSJim Jagielski 221*b1cdbd2cSJim Jagielski virtual void 222*b1cdbd2cSJim Jagielski COPY( const ::rtl::OUString & inSourceURL, 223*b1cdbd2cSJim Jagielski const ::rtl::OUString & inDestinationURL, 224*b1cdbd2cSJim Jagielski const DAVRequestEnvironment & rEnv, 225*b1cdbd2cSJim Jagielski sal_Bool inOverWrite ) 226*b1cdbd2cSJim Jagielski throw ( DAVException ); 227*b1cdbd2cSJim Jagielski 228*b1cdbd2cSJim Jagielski virtual void 229*b1cdbd2cSJim Jagielski MOVE( const ::rtl::OUString & inSourceURL, 230*b1cdbd2cSJim Jagielski const ::rtl::OUString & inDestinationURL, 231*b1cdbd2cSJim Jagielski const DAVRequestEnvironment & rEnv, 232*b1cdbd2cSJim Jagielski sal_Bool inOverWrite ) 233*b1cdbd2cSJim Jagielski throw ( DAVException ); 234*b1cdbd2cSJim Jagielski 235*b1cdbd2cSJim Jagielski virtual void DESTROY( const ::rtl::OUString & inPath, 236*b1cdbd2cSJim Jagielski const DAVRequestEnvironment & rEnv ) 237*b1cdbd2cSJim Jagielski throw ( DAVException ); 238*b1cdbd2cSJim Jagielski 239*b1cdbd2cSJim Jagielski // set new lock. 240*b1cdbd2cSJim Jagielski virtual void LOCK( const ::rtl::OUString & inURL, 241*b1cdbd2cSJim Jagielski com::sun::star::ucb::Lock & inLock, 242*b1cdbd2cSJim Jagielski const DAVRequestEnvironment & rEnv ) 243*b1cdbd2cSJim Jagielski throw ( DAVException ); 244*b1cdbd2cSJim Jagielski 245*b1cdbd2cSJim Jagielski // refresh existing lock. 246*b1cdbd2cSJim Jagielski virtual sal_Int64 LOCK( const ::rtl::OUString & inURL, 247*b1cdbd2cSJim Jagielski sal_Int64 nTimeout, 248*b1cdbd2cSJim Jagielski const DAVRequestEnvironment & rEnv ) 249*b1cdbd2cSJim Jagielski throw ( DAVException ); 250*b1cdbd2cSJim Jagielski 251*b1cdbd2cSJim Jagielski virtual void UNLOCK( const ::rtl::OUString & inURL, 252*b1cdbd2cSJim Jagielski const DAVRequestEnvironment & rEnv ) 253*b1cdbd2cSJim Jagielski throw ( DAVException ); 254*b1cdbd2cSJim Jagielski 255*b1cdbd2cSJim Jagielski // helpers 256*b1cdbd2cSJim Jagielski virtual void abort() 257*b1cdbd2cSJim Jagielski throw ( DAVException ); 258*b1cdbd2cSJim Jagielski getHostName() const259*b1cdbd2cSJim Jagielski const rtl::OUString & getHostName() const { return m_aUri.GetHost(); } getPort() const260*b1cdbd2cSJim Jagielski int getPort() const { return m_aUri.GetPort(); } 261*b1cdbd2cSJim Jagielski getMSF()262*b1cdbd2cSJim Jagielski const ::uno::Reference< ::lang::XMultiServiceFactory > getMSF() 263*b1cdbd2cSJim Jagielski { return m_xFactory->getServiceFactory(); } 264*b1cdbd2cSJim Jagielski 265*b1cdbd2cSJim Jagielski sal_Bool isDomainMatch( rtl::OUString certHostName ); 266*b1cdbd2cSJim Jagielski getServerHeaderField()267*b1cdbd2cSJim Jagielski const rtl::OUString & getServerHeaderField() { return m_aServerHeaderField; }; 268*b1cdbd2cSJim Jagielski setServerHeaderField(rtl::OUString aServerHeaderField)269*b1cdbd2cSJim Jagielski void setServerHeaderField( rtl::OUString aServerHeaderField ) { m_aServerHeaderField = aServerHeaderField; }; 270*b1cdbd2cSJim Jagielski 271*b1cdbd2cSJim Jagielski private: 272*b1cdbd2cSJim Jagielski friend class SerfLockStore; 273*b1cdbd2cSJim Jagielski 274*b1cdbd2cSJim Jagielski void Init( void ) 275*b1cdbd2cSJim Jagielski throw ( DAVException ); 276*b1cdbd2cSJim Jagielski 277*b1cdbd2cSJim Jagielski void Init( const DAVRequestEnvironment & rEnv ) 278*b1cdbd2cSJim Jagielski throw ( DAVException ); 279*b1cdbd2cSJim Jagielski 280*b1cdbd2cSJim Jagielski void HandleError( boost::shared_ptr<SerfRequestProcessor> rReqProc ) 281*b1cdbd2cSJim Jagielski throw ( DAVException ); 282*b1cdbd2cSJim Jagielski 283*b1cdbd2cSJim Jagielski const ucbhelper::InternetProxyServer & getProxySettings() const; 284*b1cdbd2cSJim Jagielski 285*b1cdbd2cSJim Jagielski bool removeExpiredLocktoken( const rtl::OUString & inURL, 286*b1cdbd2cSJim Jagielski const DAVRequestEnvironment & rEnv ); 287*b1cdbd2cSJim Jagielski 288*b1cdbd2cSJim Jagielski // refresh lock, called by SerfLockStore::refreshLocks 289*b1cdbd2cSJim Jagielski bool LOCK( SerfLock * pLock, 290*b1cdbd2cSJim Jagielski sal_Int32 & rlastChanceToSendRefreshRequest ); 291*b1cdbd2cSJim Jagielski 292*b1cdbd2cSJim Jagielski // unlock, called by SerfLockStore::~SerfLockStore 293*b1cdbd2cSJim Jagielski bool UNLOCK( SerfLock * pLock ); 294*b1cdbd2cSJim Jagielski 295*b1cdbd2cSJim Jagielski /* 296*b1cdbd2cSJim Jagielski // low level GET implementation, used by public GET implementations 297*b1cdbd2cSJim Jagielski static int GET( SerfConnection * sess, 298*b1cdbd2cSJim Jagielski const char * uri, 299*b1cdbd2cSJim Jagielski //ne_block_reader reader, 300*b1cdbd2cSJim Jagielski bool getheaders, 301*b1cdbd2cSJim Jagielski void * userdata ); 302*b1cdbd2cSJim Jagielski 303*b1cdbd2cSJim Jagielski // Buffer-based PUT implementation. Serf only has file descriptor- 304*b1cdbd2cSJim Jagielski // based API. 305*b1cdbd2cSJim Jagielski static int PUT( SerfConnection * sess, 306*b1cdbd2cSJim Jagielski const char * uri, 307*b1cdbd2cSJim Jagielski const char * buffer, 308*b1cdbd2cSJim Jagielski size_t size ); 309*b1cdbd2cSJim Jagielski 310*b1cdbd2cSJim Jagielski // Buffer-based POST implementation. Serf only has file descriptor- 311*b1cdbd2cSJim Jagielski // based API. 312*b1cdbd2cSJim Jagielski int POST( SerfConnection * sess, 313*b1cdbd2cSJim Jagielski const char * uri, 314*b1cdbd2cSJim Jagielski const char * buffer, 315*b1cdbd2cSJim Jagielski //ne_block_reader reader, 316*b1cdbd2cSJim Jagielski void * userdata, 317*b1cdbd2cSJim Jagielski const rtl::OUString & rContentType, 318*b1cdbd2cSJim Jagielski const rtl::OUString & rReferer ); 319*b1cdbd2cSJim Jagielski */ 320*b1cdbd2cSJim Jagielski 321*b1cdbd2cSJim Jagielski // Helper: XInputStream -> Sequence< sal_Int8 > 322*b1cdbd2cSJim Jagielski static bool getDataFromInputStream( 323*b1cdbd2cSJim Jagielski const com::sun::star::uno::Reference< 324*b1cdbd2cSJim Jagielski com::sun::star::io::XInputStream > & xStream, 325*b1cdbd2cSJim Jagielski com::sun::star::uno::Sequence< sal_Int8 > & rData, 326*b1cdbd2cSJim Jagielski bool bAppendTrailingZeroByte ); 327*b1cdbd2cSJim Jagielski 328*b1cdbd2cSJim Jagielski /* 329*b1cdbd2cSJim Jagielski rtl::OUString makeAbsoluteURL( rtl::OUString const & rURL ) const; 330*b1cdbd2cSJim Jagielski */ 331*b1cdbd2cSJim Jagielski }; 332*b1cdbd2cSJim Jagielski 333*b1cdbd2cSJim Jagielski } // namespace http_dav_ucp 334*b1cdbd2cSJim Jagielski 335*b1cdbd2cSJim Jagielski #endif // INCLUDED_SERFSESSION_HXX 336