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 #ifndef INCLUDED_SERFREQUESTPROCESSOR_HXX 24*b1cdbd2cSJim Jagielski #define INCLUDED_SERFREQUESTPROCESSOR_HXX 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski #include <apr_errno.h> 27*b1cdbd2cSJim Jagielski #include <apr_pools.h> 28*b1cdbd2cSJim Jagielski 29*b1cdbd2cSJim Jagielski #include <serf.h> 30*b1cdbd2cSJim Jagielski 31*b1cdbd2cSJim Jagielski #include "DAVTypes.hxx" 32*b1cdbd2cSJim Jagielski #include "DAVResource.hxx" 33*b1cdbd2cSJim Jagielski #include "DAVException.hxx" 34*b1cdbd2cSJim Jagielski 35*b1cdbd2cSJim Jagielski #include "SerfTypes.hxx" 36*b1cdbd2cSJim Jagielski #include "SerfInputStream.hxx" 37*b1cdbd2cSJim Jagielski #include <com/sun/star/io/XOutputStream.hpp> 38*b1cdbd2cSJim Jagielski 39*b1cdbd2cSJim Jagielski namespace http_dav_ucp 40*b1cdbd2cSJim Jagielski { 41*b1cdbd2cSJim Jagielski 42*b1cdbd2cSJim Jagielski class SerfSession; 43*b1cdbd2cSJim Jagielski class SerfRequestProcessorImpl; 44*b1cdbd2cSJim Jagielski 45*b1cdbd2cSJim Jagielski class SerfRequestProcessor 46*b1cdbd2cSJim Jagielski { 47*b1cdbd2cSJim Jagielski public: 48*b1cdbd2cSJim Jagielski SerfRequestProcessor( SerfSession& rSerfSession, 49*b1cdbd2cSJim Jagielski const rtl::OUString & inPath, 50*b1cdbd2cSJim Jagielski const bool bUseChunkedEncoding ); 51*b1cdbd2cSJim Jagielski ~SerfRequestProcessor(); 52*b1cdbd2cSJim Jagielski 53*b1cdbd2cSJim Jagielski // PROPFIND - allprop & named 54*b1cdbd2cSJim Jagielski bool processPropFind( const Depth inDepth, 55*b1cdbd2cSJim Jagielski const std::vector< ::rtl::OUString > & inPropNames, 56*b1cdbd2cSJim Jagielski std::vector< DAVResource > & ioResources, 57*b1cdbd2cSJim Jagielski apr_status_t& outSerfStatus ); 58*b1cdbd2cSJim Jagielski 59*b1cdbd2cSJim Jagielski // PROPFIND - property names 60*b1cdbd2cSJim Jagielski bool processPropFind( const Depth inDepth, 61*b1cdbd2cSJim Jagielski std::vector< DAVResourceInfo > & ioResInfo, 62*b1cdbd2cSJim Jagielski apr_status_t& outSerfStatus ); 63*b1cdbd2cSJim Jagielski 64*b1cdbd2cSJim Jagielski // PROPPATCH 65*b1cdbd2cSJim Jagielski bool processPropPatch( const std::vector< ProppatchValue > & inProperties, 66*b1cdbd2cSJim Jagielski const com::sun::star::ucb::Lock inLock, 67*b1cdbd2cSJim Jagielski apr_status_t& outSerfStatus ); 68*b1cdbd2cSJim Jagielski 69*b1cdbd2cSJim Jagielski // GET 70*b1cdbd2cSJim Jagielski bool processGet( const com::sun::star::uno::Reference< SerfInputStream >& xioInStrm, 71*b1cdbd2cSJim Jagielski apr_status_t& outSerfStatus ); 72*b1cdbd2cSJim Jagielski 73*b1cdbd2cSJim Jagielski // GET inclusive header fields 74*b1cdbd2cSJim Jagielski bool processGet( const com::sun::star::uno::Reference< SerfInputStream >& xioInStrm, 75*b1cdbd2cSJim Jagielski const std::vector< ::rtl::OUString > & inHeaderNames, 76*b1cdbd2cSJim Jagielski DAVResource & ioResource, 77*b1cdbd2cSJim Jagielski apr_status_t& outSerfStatus ); 78*b1cdbd2cSJim Jagielski 79*b1cdbd2cSJim Jagielski // GET 80*b1cdbd2cSJim Jagielski bool processGet( const com::sun::star::uno::Reference< com::sun::star::io::XOutputStream >& xioOutStrm, 81*b1cdbd2cSJim Jagielski apr_status_t& outSerfStatus ); 82*b1cdbd2cSJim Jagielski 83*b1cdbd2cSJim Jagielski // GET inclusive header fields 84*b1cdbd2cSJim Jagielski bool processGet( const com::sun::star::uno::Reference< com::sun::star::io::XOutputStream >& xioOutStrm, 85*b1cdbd2cSJim Jagielski const std::vector< ::rtl::OUString > & inHeaderNames, 86*b1cdbd2cSJim Jagielski DAVResource & ioResource, 87*b1cdbd2cSJim Jagielski apr_status_t& outSerfStatus ); 88*b1cdbd2cSJim Jagielski 89*b1cdbd2cSJim Jagielski // HEAD 90*b1cdbd2cSJim Jagielski bool processHead( const std::vector< ::rtl::OUString > & inHeaderNames, 91*b1cdbd2cSJim Jagielski DAVResource & ioResource, 92*b1cdbd2cSJim Jagielski apr_status_t& outSerfStatus ); 93*b1cdbd2cSJim Jagielski 94*b1cdbd2cSJim Jagielski // PUT 95*b1cdbd2cSJim Jagielski bool processPut( const char* inData, 96*b1cdbd2cSJim Jagielski apr_size_t inDataLen, 97*b1cdbd2cSJim Jagielski const com::sun::star::ucb::Lock inLock, 98*b1cdbd2cSJim Jagielski apr_status_t& outSerfStatus ); 99*b1cdbd2cSJim Jagielski 100*b1cdbd2cSJim Jagielski // POST 101*b1cdbd2cSJim Jagielski bool processPost( const char* inData, 102*b1cdbd2cSJim Jagielski apr_size_t inDataLen, 103*b1cdbd2cSJim Jagielski const rtl::OUString & inContentType, 104*b1cdbd2cSJim Jagielski const rtl::OUString & inReferer, 105*b1cdbd2cSJim Jagielski const com::sun::star::ucb::Lock inLock, 106*b1cdbd2cSJim Jagielski const com::sun::star::uno::Reference< SerfInputStream >& xioInStrm, 107*b1cdbd2cSJim Jagielski apr_status_t& outSerfStatus ); 108*b1cdbd2cSJim Jagielski 109*b1cdbd2cSJim Jagielski // POST 110*b1cdbd2cSJim Jagielski bool processPost( const char* inData, 111*b1cdbd2cSJim Jagielski apr_size_t inDataLen, 112*b1cdbd2cSJim Jagielski const rtl::OUString & inContentType, 113*b1cdbd2cSJim Jagielski const rtl::OUString & inReferer, 114*b1cdbd2cSJim Jagielski const com::sun::star::ucb::Lock inLock, 115*b1cdbd2cSJim Jagielski const com::sun::star::uno::Reference< com::sun::star::io::XOutputStream >& xioOutStrm, 116*b1cdbd2cSJim Jagielski apr_status_t& outSerfStatus ); 117*b1cdbd2cSJim Jagielski 118*b1cdbd2cSJim Jagielski // DELETE 119*b1cdbd2cSJim Jagielski bool processDelete( const com::sun::star::ucb::Lock inLock, 120*b1cdbd2cSJim Jagielski apr_status_t& outSerfStatus ); 121*b1cdbd2cSJim Jagielski 122*b1cdbd2cSJim Jagielski // MKCOL 123*b1cdbd2cSJim Jagielski bool processMkCol( const com::sun::star::ucb::Lock inLock, 124*b1cdbd2cSJim Jagielski apr_status_t& outSerfStatus ); 125*b1cdbd2cSJim Jagielski 126*b1cdbd2cSJim Jagielski // COPY 127*b1cdbd2cSJim Jagielski bool processCopy( const rtl::OUString & inDestinationPath, 128*b1cdbd2cSJim Jagielski const bool inOverwrite, 129*b1cdbd2cSJim Jagielski const com::sun::star::ucb::Lock inLock, 130*b1cdbd2cSJim Jagielski apr_status_t& outSerfStatus ); 131*b1cdbd2cSJim Jagielski 132*b1cdbd2cSJim Jagielski // MOVE 133*b1cdbd2cSJim Jagielski bool processMove( const rtl::OUString & inDestinationPath, 134*b1cdbd2cSJim Jagielski const bool inOverwrite, 135*b1cdbd2cSJim Jagielski const com::sun::star::ucb::Lock inLock, 136*b1cdbd2cSJim Jagielski apr_status_t& outSerfStatus ); 137*b1cdbd2cSJim Jagielski 138*b1cdbd2cSJim Jagielski // LOCK 139*b1cdbd2cSJim Jagielski bool processLock( const rtl::OUString & inDestinationPath, 140*b1cdbd2cSJim Jagielski const com::sun::star::ucb::Lock& inLock, 141*b1cdbd2cSJim Jagielski DAVPropertyValue & outLock, 142*b1cdbd2cSJim Jagielski apr_status_t& outSerfStatus ); 143*b1cdbd2cSJim Jagielski 144*b1cdbd2cSJim Jagielski // LOCK refresh 145*b1cdbd2cSJim Jagielski bool processLockRefresh( const rtl::OUString & inDestinationPath, 146*b1cdbd2cSJim Jagielski const com::sun::star::ucb::Lock& inLock, 147*b1cdbd2cSJim Jagielski DAVPropertyValue & outLock, 148*b1cdbd2cSJim Jagielski apr_status_t& outSerfStatus ); 149*b1cdbd2cSJim Jagielski 150*b1cdbd2cSJim Jagielski //UNLOCK 151*b1cdbd2cSJim Jagielski bool processUnlock( const rtl::OUString & inDestinationPath, 152*b1cdbd2cSJim Jagielski const com::sun::star::ucb::Lock& inLock, 153*b1cdbd2cSJim Jagielski apr_status_t& outSerfStatus ); 154*b1cdbd2cSJim Jagielski 155*b1cdbd2cSJim Jagielski apr_status_t provideSerfCredentials( char ** outUsername, 156*b1cdbd2cSJim Jagielski char ** outPassword, 157*b1cdbd2cSJim Jagielski serf_request_t * inRequest, 158*b1cdbd2cSJim Jagielski int inCode, 159*b1cdbd2cSJim Jagielski const char *inAuthProtocol, 160*b1cdbd2cSJim Jagielski const char *inRealm, 161*b1cdbd2cSJim Jagielski apr_pool_t *inAprPool ); 162*b1cdbd2cSJim Jagielski 163*b1cdbd2cSJim Jagielski apr_status_t setupSerfRequest( serf_request_t * inSerfRequest, 164*b1cdbd2cSJim Jagielski serf_bucket_t ** outSerfRequestBucket, 165*b1cdbd2cSJim Jagielski serf_response_acceptor_t * outSerfResponseAcceptor, 166*b1cdbd2cSJim Jagielski void ** outSerfResponseAcceptorBaton, 167*b1cdbd2cSJim Jagielski serf_response_handler_t * outSerfResponseHandler, 168*b1cdbd2cSJim Jagielski void ** outSerfResponseHandlerBaton, 169*b1cdbd2cSJim Jagielski apr_pool_t * inAprPool ); 170*b1cdbd2cSJim Jagielski 171*b1cdbd2cSJim Jagielski serf_bucket_t* acceptSerfResponse( serf_request_t * inSerfRequest, 172*b1cdbd2cSJim Jagielski serf_bucket_t * inSerfStreamBucket, 173*b1cdbd2cSJim Jagielski apr_pool_t* inAprPool ); 174*b1cdbd2cSJim Jagielski 175*b1cdbd2cSJim Jagielski apr_status_t handleSerfResponse( serf_request_t * inSerfRequest, 176*b1cdbd2cSJim Jagielski serf_bucket_t * inSerfResponseBucket, 177*b1cdbd2cSJim Jagielski apr_pool_t * inAprPool ); 178*b1cdbd2cSJim Jagielski 179*b1cdbd2cSJim Jagielski //private: 180*b1cdbd2cSJim Jagielski void prepareProcessor(); 181*b1cdbd2cSJim Jagielski apr_status_t runProcessor(); 182*b1cdbd2cSJim Jagielski void postprocessProcessor( const apr_status_t inStatus ); 183*b1cdbd2cSJim Jagielski 184*b1cdbd2cSJim Jagielski SerfSession& mrSerfSession; 185*b1cdbd2cSJim Jagielski const char* mPathStr; 186*b1cdbd2cSJim Jagielski const bool mbUseChunkedEncoding; 187*b1cdbd2cSJim Jagielski const char* mDestPathStr; 188*b1cdbd2cSJim Jagielski const char* mContentType; 189*b1cdbd2cSJim Jagielski const char* mReferer; 190*b1cdbd2cSJim Jagielski SerfRequestProcessorImpl* mpProcImpl; 191*b1cdbd2cSJim Jagielski 192*b1cdbd2cSJim Jagielski bool mbProcessingDone; 193*b1cdbd2cSJim Jagielski 194*b1cdbd2cSJim Jagielski DAVException* mpDAVException; 195*b1cdbd2cSJim Jagielski sal_uInt16 mnHTTPStatusCode; 196*b1cdbd2cSJim Jagielski rtl::OUString mHTTPStatusCodeText; 197*b1cdbd2cSJim Jagielski rtl::OUString mRedirectLocation; 198*b1cdbd2cSJim Jagielski 199*b1cdbd2cSJim Jagielski sal_uInt8 mnSuccessfulCredentialAttempts; 200*b1cdbd2cSJim Jagielski bool mbInputOfCredentialsAborted; 201*b1cdbd2cSJim Jagielski bool mbSetupSerfRequestCalled; 202*b1cdbd2cSJim Jagielski bool mbAcceptSerfResponseCalled; 203*b1cdbd2cSJim Jagielski bool mbHandleSerfResponseCalled; 204*b1cdbd2cSJim Jagielski }; 205*b1cdbd2cSJim Jagielski 206*b1cdbd2cSJim Jagielski } // namespace http_dav_ucp 207*b1cdbd2cSJim Jagielski 208*b1cdbd2cSJim Jagielski #endif // INCLUDED_SERFREQUESTPROCESSOR_HXX 209