Modified: openoffice/branches/AOO410/main/ucb/source/ucp/webdav/SerfPutReqProcImpl.cxx URL: http://svn.apache.org/viewvc/openoffice/branches/AOO410/main/ucb/source/ucp/webdav/SerfPutReqProcImpl.cxx?rev=1705247&r1=1705246&r2=1705247&view=diff ============================================================================== --- openoffice/branches/AOO410/main/ucb/source/ucp/webdav/SerfPutReqProcImpl.cxx (original) +++ openoffice/branches/AOO410/main/ucb/source/ucp/webdav/SerfPutReqProcImpl.cxx Fri Sep 25 07:59:46 2015 @@ -34,11 +34,9 @@ namespace http_dav_ucp SerfPutReqProcImpl::SerfPutReqProcImpl( const char* inPath, const DAVRequestHeaders& inRequestHeaders, const char* inData, - const char* inLockToken, apr_size_t inDataLen ) : SerfRequestProcessorImpl( inPath, inRequestHeaders ) , mpData( inData ) - , mpLockToken( inLockToken) , mnDataLen( inDataLen ) { } @@ -59,7 +57,7 @@ serf_bucket_t * SerfPutReqProcImpl::crea } // create serf request - serf_bucket_t *req_bkt = serf_request_bucket_request_create( inSerfRequest, + serf_bucket_t *req_bkt = serf_request_bucket_request_create( inSerfRequest, "PUT", getPathStr(), body_bkt, @@ -70,16 +68,11 @@ serf_bucket_t * SerfPutReqProcImpl::crea serf_bucket_t* hdrs_bkt = serf_bucket_request_get_headers( req_bkt ); // general header fields provided by caller setRequestHeaders( hdrs_bkt ); - if(mpLockToken) - { - // request specific header field - serf_bucket_headers_set( hdrs_bkt, "if", mpLockToken ); - } return req_bkt; } -void SerfPutReqProcImpl::processChunkOfResponseData( const char* /*data*/, +void SerfPutReqProcImpl::processChunkOfResponseData( const char* /*data*/, apr_size_t /*len*/ ) { // nothing to do;
Modified: openoffice/branches/AOO410/main/ucb/source/ucp/webdav/SerfPutReqProcImpl.hxx URL: http://svn.apache.org/viewvc/openoffice/branches/AOO410/main/ucb/source/ucp/webdav/SerfPutReqProcImpl.hxx?rev=1705247&r1=1705246&r2=1705247&view=diff ============================================================================== --- openoffice/branches/AOO410/main/ucb/source/ucp/webdav/SerfPutReqProcImpl.hxx (original) +++ openoffice/branches/AOO410/main/ucb/source/ucp/webdav/SerfPutReqProcImpl.hxx Fri Sep 25 07:59:46 2015 @@ -33,7 +33,6 @@ public: SerfPutReqProcImpl( const char* inPath, const DAVRequestHeaders& inRequestHeaders, const char* inData, - const char* inLockToken, apr_size_t inDataLen ); @@ -51,7 +50,6 @@ protected: private: const char* mpData; - const char* mpLockToken; apr_size_t mnDataLen; }; Modified: openoffice/branches/AOO410/main/ucb/source/ucp/webdav/SerfRequestProcessor.cxx URL: http://svn.apache.org/viewvc/openoffice/branches/AOO410/main/ucb/source/ucp/webdav/SerfRequestProcessor.cxx?rev=1705247&r1=1705246&r2=1705247&view=diff ============================================================================== --- openoffice/branches/AOO410/main/ucb/source/ucp/webdav/SerfRequestProcessor.cxx (original) +++ openoffice/branches/AOO410/main/ucb/source/ucp/webdav/SerfRequestProcessor.cxx Fri Sep 25 07:59:46 2015 @@ -30,9 +30,6 @@ #include <apr_strings.h> -//to examine returned http code -#include "DAVException.hxx" - namespace http_dav_ucp { @@ -114,19 +111,11 @@ bool SerfRequestProcessor::processPropFi // PROPPATCH bool SerfRequestProcessor::processPropPatch( const std::vector< ProppatchValue > & inProperties, - const com::sun::star::ucb::Lock inLock, apr_status_t& outSerfStatus ) { - char * inLockToken = static_cast<char*>(0); - if(inLock.LockTokens.getLength() > 0) - { - inLockToken = apr_psprintf( mrSerfSession.getAprPool(), "(<%s>)", - rtl::OUStringToOString(inLock.LockTokens[0], RTL_TEXTENCODING_UTF8 ).getStr() ); - } mpProcImpl = createPropPatchReqProcImpl( mPathStr, mrSerfSession.getRequestEnvironment().m_aRequestHeaders, - inProperties, - inLockToken ); + inProperties ); outSerfStatus = runProcessor(); return outSerfStatus == APR_SUCCESS; @@ -205,19 +194,11 @@ bool SerfRequestProcessor::processHead( // PUT bool SerfRequestProcessor::processPut( const char* inData, apr_size_t inDataLen, - const com::sun::star::ucb::Lock inLock, apr_status_t& outSerfStatus ) { - char * inLockToken = static_cast<char*>(0); - if(inLock.LockTokens.getLength() > 0) - { - inLockToken = apr_psprintf( mrSerfSession.getAprPool(), "(<%s>)", - rtl::OUStringToOString(inLock.LockTokens[0], RTL_TEXTENCODING_UTF8 ).getStr() ); - } mpProcImpl = createPutReqProcImpl( mPathStr, mrSerfSession.getRequestEnvironment().m_aRequestHeaders, inData, - inLockToken, inDataLen ); outSerfStatus = runProcessor(); @@ -229,7 +210,6 @@ bool SerfRequestProcessor::processPost( apr_size_t inDataLen, const rtl::OUString & inContentType, const rtl::OUString & inReferer, - const com::sun::star::ucb::Lock inLock, const com::sun::star::uno::Reference< SerfInputStream >& xioInStrm, apr_status_t& outSerfStatus ) { @@ -237,17 +217,10 @@ bool SerfRequestProcessor::processPost( rtl::OUStringToOString( inContentType, RTL_TEXTENCODING_UTF8 ).getStr() ); mReferer = apr_pstrdup( mrSerfSession.getAprPool(), rtl::OUStringToOString( inReferer, RTL_TEXTENCODING_UTF8 ).getStr() ); - char * inLockToken = static_cast<char*>(0); - if(inLock.LockTokens.getLength() > 0) - { - inLockToken = apr_psprintf( mrSerfSession.getAprPool(), "(<%s>)", - rtl::OUStringToOString(inLock.LockTokens[0], RTL_TEXTENCODING_UTF8 ).getStr() ); - } mpProcImpl = createPostReqProcImpl( mPathStr, mrSerfSession.getRequestEnvironment().m_aRequestHeaders, inData, inDataLen, - inLockToken, mContentType, mReferer, xioInStrm ); @@ -261,7 +234,6 @@ bool SerfRequestProcessor::processPost( apr_size_t inDataLen, const rtl::OUString & inContentType, const rtl::OUString & inReferer, - const com::sun::star::ucb::Lock inLock, const com::sun::star::uno::Reference< com::sun::star::io::XOutputStream >& xioOutStrm, apr_status_t& outSerfStatus ) { @@ -269,17 +241,10 @@ bool SerfRequestProcessor::processPost( rtl::OUStringToOString( inContentType, RTL_TEXTENCODING_UTF8 ).getStr() ); mReferer = apr_pstrdup( mrSerfSession.getAprPool(), rtl::OUStringToOString( inReferer, RTL_TEXTENCODING_UTF8 ).getStr() ); - char * inLockToken = static_cast<char*>(0); - if(inLock.LockTokens.getLength() > 0) - { - inLockToken = apr_psprintf( mrSerfSession.getAprPool(), "(<%s>)", - rtl::OUStringToOString(inLock.LockTokens[0], RTL_TEXTENCODING_UTF8 ).getStr() ); - } mpProcImpl = createPostReqProcImpl( mPathStr, mrSerfSession.getRequestEnvironment().m_aRequestHeaders, inData, inDataLen, - inLockToken, mContentType, mReferer, xioOutStrm ); @@ -289,36 +254,20 @@ bool SerfRequestProcessor::processPost( } // DELETE -bool SerfRequestProcessor::processDelete( const com::sun::star::ucb::Lock inLock, - apr_status_t& outSerfStatus ) +bool SerfRequestProcessor::processDelete( apr_status_t& outSerfStatus ) { - char * inLockToken = static_cast<char*>(0); - if(inLock.LockTokens.getLength() > 0) - { - inLockToken = apr_psprintf( mrSerfSession.getAprPool(), "(<%s>)", - rtl::OUStringToOString(inLock.LockTokens[0], RTL_TEXTENCODING_UTF8 ).getStr() ); - } mpProcImpl = createDeleteReqProcImpl( mPathStr, - mrSerfSession.getRequestEnvironment().m_aRequestHeaders, - inLockToken ); + mrSerfSession.getRequestEnvironment().m_aRequestHeaders ); outSerfStatus = runProcessor(); return outSerfStatus == APR_SUCCESS; } // MKCOL -bool SerfRequestProcessor::processMkCol( const com::sun::star::ucb::Lock inLock, - apr_status_t& outSerfStatus ) +bool SerfRequestProcessor::processMkCol( apr_status_t& outSerfStatus ) { - char * inLockToken = static_cast<char*>(0); - if(inLock.LockTokens.getLength() > 0) - { - inLockToken = apr_psprintf( mrSerfSession.getAprPool(), "(<%s>)", - rtl::OUStringToOString(inLock.LockTokens[0], RTL_TEXTENCODING_UTF8 ).getStr() ); - } mpProcImpl = createMkColReqProcImpl( mPathStr, - mrSerfSession.getRequestEnvironment().m_aRequestHeaders, - inLockToken ); + mrSerfSession.getRequestEnvironment().m_aRequestHeaders ); outSerfStatus = runProcessor(); return outSerfStatus == APR_SUCCESS; @@ -327,22 +276,14 @@ bool SerfRequestProcessor::processMkCol( // COPY bool SerfRequestProcessor::processCopy( const rtl::OUString & inDestinationPath, const bool inOverwrite, - const com::sun::star::ucb::Lock inLock, apr_status_t& outSerfStatus ) { mDestPathStr = apr_pstrdup( mrSerfSession.getAprPool(), rtl::OUStringToOString( inDestinationPath, RTL_TEXTENCODING_UTF8 ).getStr() ); - char * inLockToken = static_cast<char*>(0); - if(inLock.LockTokens.getLength() > 0) - { - inLockToken = apr_psprintf( mrSerfSession.getAprPool(), "(<%s>)", - rtl::OUStringToOString(inLock.LockTokens[0], RTL_TEXTENCODING_UTF8 ).getStr() ); - } mpProcImpl = createCopyReqProcImpl( mPathStr, mrSerfSession.getRequestEnvironment().m_aRequestHeaders, mDestPathStr, - inOverwrite, - inLockToken ); + inOverwrite ); outSerfStatus = runProcessor(); return outSerfStatus == APR_SUCCESS; @@ -351,95 +292,14 @@ bool SerfRequestProcessor::processCopy( // MOVE bool SerfRequestProcessor::processMove( const rtl::OUString & inDestinationPath, const bool inOverwrite, - const com::sun::star::ucb::Lock inLock, apr_status_t& outSerfStatus ) { mDestPathStr = apr_pstrdup( mrSerfSession.getAprPool(), rtl::OUStringToOString( inDestinationPath, RTL_TEXTENCODING_UTF8 ).getStr() ); - char * inLockToken = static_cast<char*>(0); - if(inLock.LockTokens.getLength() > 0) - { - inLockToken = apr_psprintf( mrSerfSession.getAprPool(), "(<%s>)", - rtl::OUStringToOString(inLock.LockTokens[0], RTL_TEXTENCODING_UTF8 ).getStr() ); - } mpProcImpl = createMoveReqProcImpl( mPathStr, mrSerfSession.getRequestEnvironment().m_aRequestHeaders, mDestPathStr, - inOverwrite, - inLockToken ); - outSerfStatus = runProcessor(); - - return outSerfStatus == APR_SUCCESS; -} - -//LOCK creating a new lock -bool SerfRequestProcessor::processLock( const rtl::OUString & inDestinationPath, - const com::sun::star::ucb::Lock& inLock, - DAVPropertyValue & outLock, - apr_status_t& outSerfStatus ) -{ - mDestPathStr = apr_pstrdup( mrSerfSession.getAprPool(), - rtl::OUStringToOString( inDestinationPath, RTL_TEXTENCODING_UTF8 ).getStr() ); - char * Timeout; - if(inLock.Timeout == -1) - Timeout = apr_psprintf( mrSerfSession.getAprPool(), "Infinite" ); - else - Timeout = apr_psprintf( mrSerfSession.getAprPool(), "Second-%ld", inLock.Timeout ); - - mpProcImpl = createLockReqProcImpl( mPathStr, - mrSerfSession.getRequestEnvironment().m_aRequestHeaders, - inLock, - Timeout, - outLock); - outSerfStatus = runProcessor(); - - return outSerfStatus == APR_SUCCESS; -} - -//LOCK refresh an existing lock -bool SerfRequestProcessor::processLockRefresh( const rtl::OUString & inDestinationPath, - const com::sun::star::ucb::Lock& inLock, - DAVPropertyValue & outLock, - apr_status_t& outSerfStatus ) -{ - mDestPathStr = apr_pstrdup( mrSerfSession.getAprPool(), - rtl::OUStringToOString( inDestinationPath, RTL_TEXTENCODING_UTF8 ).getStr() ); - char * Timeout; - if(inLock.Timeout == -1) - Timeout = apr_psprintf( mrSerfSession.getAprPool(), "Infinite" ); - else - Timeout = apr_psprintf( mrSerfSession.getAprPool(), "Second-%ld", inLock.Timeout ); - - char * inLockToken = apr_psprintf( mrSerfSession.getAprPool(), "(<%s>)", - rtl::OUStringToOString(inLock.LockTokens[0], RTL_TEXTENCODING_UTF8 ).getStr() ); - - mpProcImpl = createLockRefreshProcImpl( mPathStr, - mrSerfSession.getRequestEnvironment().m_aRequestHeaders, - inLock, - inLockToken, - Timeout, - outLock); - outSerfStatus = runProcessor(); - - return outSerfStatus == APR_SUCCESS; -} - -//ULOCK unlock an existing lock -bool SerfRequestProcessor::processUnlock( const rtl::OUString & inDestinationPath, - const com::sun::star::ucb::Lock& inLock, - apr_status_t& outSerfStatus ) -{ - mDestPathStr = apr_pstrdup( mrSerfSession.getAprPool(), - rtl::OUStringToOString( inDestinationPath, RTL_TEXTENCODING_UTF8 ).getStr() ); - - char * aToken = apr_psprintf( mrSerfSession.getAprPool(), "<%s>", - rtl::OUStringToOString(inLock.LockTokens[0], RTL_TEXTENCODING_UTF8 ).getStr() ); - - mpProcImpl = createUnlockProcImpl( mPathStr, - mrSerfSession.getRequestEnvironment().m_aRequestHeaders, - inLock, - aToken ); - + inOverwrite ); outSerfStatus = runProcessor(); return outSerfStatus == APR_SUCCESS; @@ -456,8 +316,7 @@ apr_status_t SerfRequestProcessor::runPr } // create serf request - OSL_ASSERT(mrSerfSession.getSerfConnection() != NULL); - serf_connection_request_create( mrSerfSession.getSerfConnection(), + serf_connection_request_create( mrSerfSession.getSerfConnection(), Serf_SetupRequest, this ); @@ -468,19 +327,15 @@ apr_status_t SerfRequestProcessor::runPr apr_pool_t* pAprPool = mrSerfSession.getAprPool(); while ( true ) { - status = serf_context_run( pSerfContext, - SERF_DURATION_FOREVER, + status = serf_context_run( pSerfContext, + SERF_DURATION_FOREVER, pAprPool ); if ( APR_STATUS_IS_TIMEUP( status ) ) { continue; } - if ( status != APR_SUCCESS ) + if ( status != APR_SUCCESS ) { -#if OSL_DEBUG_LEVEL > 0 - char buff[512]; - OSL_TRACE("SerfRequestProcessor::runProcessor, status != APR_SUCCESS: %d (%s)",status, apr_strerror(status, buff, 512)); -#endif break; } if ( mbProcessingDone ) @@ -501,7 +356,6 @@ void SerfRequestProcessor::postprocessPr return; } - OSL_TRACE("SerfRequestProcessor::postprocessProcessor:%d",__LINE__); switch ( inStatus ) { case APR_EGENERAL: @@ -525,8 +379,8 @@ void SerfRequestProcessor::postprocessPr } else { - mpDAVException = new DAVException( DAVException::DAV_HTTP_ERROR, - mHTTPStatusCodeText, + mpDAVException = new DAVException( DAVException::DAV_HTTP_ERROR, + mHTTPStatusCodeText, mnHTTPStatusCode ); } break; @@ -534,17 +388,12 @@ void SerfRequestProcessor::postprocessPr case SC_MOVED_TEMPORARILY: case SC_SEE_OTHER: case SC_TEMPORARY_REDIRECT: - mpDAVException = new DAVException( DAVException::DAV_HTTP_REDIRECT, + mpDAVException = new DAVException( DAVException::DAV_HTTP_REDIRECT, mRedirectLocation ); break; - case SC_LOCKED: - mpDAVException = new DAVException( DAVException::DAV_LOCKED, - mHTTPStatusCodeText, - mnHTTPStatusCode ); - break; default: - mpDAVException = new DAVException( DAVException::DAV_HTTP_ERROR, - mHTTPStatusCodeText, + mpDAVException = new DAVException( DAVException::DAV_HTTP_ERROR, + mHTTPStatusCodeText, mnHTTPStatusCode ); break; } @@ -555,12 +404,13 @@ void SerfRequestProcessor::postprocessPr mpDAVException = new DAVException( DAVException::DAV_HTTP_ERROR ); break; } + } -apr_status_t SerfRequestProcessor::provideSerfCredentials( char ** outUsername, +apr_status_t SerfRequestProcessor::provideSerfCredentials( char ** outUsername, char ** outPassword, - serf_request_t * inRequest, - int inCode, + serf_request_t * inRequest, + int inCode, const char *inAuthProtocol, const char *inRealm, apr_pool_t *inAprPool ) @@ -636,7 +486,7 @@ apr_status_t SerfRequestProcessor::handl // some general response handling and error handling { - if ( !inSerfResponseBucket ) + if ( !inSerfResponseBucket ) { /* A NULL response can come back if the request failed completely */ mbProcessingDone = true; @@ -645,29 +495,11 @@ apr_status_t SerfRequestProcessor::handl serf_status_line sl; apr_status_t status = serf_bucket_response_status( inSerfResponseBucket, &sl ); - if ( status ) + if ( status ) { mbProcessingDone = false; // allow another try in order to get a response return status; } - serf_bucket_t *headers = serf_bucket_response_get_headers( inSerfResponseBucket ); - - // check header according: - // http://tools.ietf.org/html/rfc7231#section-7.4.2 - // need to do this so we can adjust the protocol accordingly - // serf_bucket_headers_get is case independent - const char* server = serf_bucket_headers_get( headers, "server" ); - if( server ) - { - //update the server type on session - mrSerfSession.setServerHeaderField( ::rtl::OUString::createFromAscii( server ) ); - } - //the following extension is MS IIS specific, - //see https://msdn.microsoft.com/en-us/library/cc250064.aspx - //site last checked on 2015-03-02 - //TODO i126305 need to be added when serf is updated to a version supporting Windows authentication - //const char* msDavExtErr = serf_bucket_headers_get( headers, "X-MSDAVEXT_ERROR" ); - // TODO - check, if response status code handling is correct mnHTTPStatusCode = ( sl.version != 0 && sl.code >= 0 ) ? static_cast< sal_uInt16 >( sl.code ) @@ -676,7 +508,7 @@ apr_status_t SerfRequestProcessor::handl { mHTTPStatusCodeText = ::rtl::OUString::createFromAscii( sl.reason ); } - if ( ( sl.version == 0 || sl.code < 0 ) || + if ( ( sl.version == 0 || sl.code < 0 ) || mnHTTPStatusCode >= 300 ) { if ( mnHTTPStatusCode == 301 || @@ -685,6 +517,7 @@ apr_status_t SerfRequestProcessor::handl mnHTTPStatusCode == 307 ) { // new location for certain redirections + serf_bucket_t *headers = serf_bucket_response_get_headers( inSerfResponseBucket ); const char* location = serf_bucket_headers_get( headers, "Location" ); if ( location ) { Modified: openoffice/branches/AOO410/main/ucb/source/ucp/webdav/SerfRequestProcessor.hxx URL: http://svn.apache.org/viewvc/openoffice/branches/AOO410/main/ucb/source/ucp/webdav/SerfRequestProcessor.hxx?rev=1705247&r1=1705246&r2=1705247&view=diff ============================================================================== --- openoffice/branches/AOO410/main/ucb/source/ucp/webdav/SerfRequestProcessor.hxx (original) +++ openoffice/branches/AOO410/main/ucb/source/ucp/webdav/SerfRequestProcessor.hxx Fri Sep 25 07:59:46 2015 @@ -32,7 +32,6 @@ #include "DAVResource.hxx" #include "DAVException.hxx" -#include "SerfTypes.hxx" #include "SerfInputStream.hxx" #include <com/sun/star/io/XOutputStream.hpp> @@ -63,7 +62,6 @@ public: // PROPPATCH bool processPropPatch( const std::vector< ProppatchValue > & inProperties, - const com::sun::star::ucb::Lock inLock, apr_status_t& outSerfStatus ); // GET @@ -94,7 +92,6 @@ public: // PUT bool processPut( const char* inData, apr_size_t inDataLen, - const com::sun::star::ucb::Lock inLock, apr_status_t& outSerfStatus ); // POST @@ -102,7 +99,6 @@ public: apr_size_t inDataLen, const rtl::OUString & inContentType, const rtl::OUString & inReferer, - const com::sun::star::ucb::Lock inLock, const com::sun::star::uno::Reference< SerfInputStream >& xioInStrm, apr_status_t& outSerfStatus ); @@ -111,47 +107,25 @@ public: apr_size_t inDataLen, const rtl::OUString & inContentType, const rtl::OUString & inReferer, - const com::sun::star::ucb::Lock inLock, const com::sun::star::uno::Reference< com::sun::star::io::XOutputStream >& xioOutStrm, apr_status_t& outSerfStatus ); // DELETE - bool processDelete( const com::sun::star::ucb::Lock inLock, - apr_status_t& outSerfStatus ); + bool processDelete( apr_status_t& outSerfStatus ); // MKCOL - bool processMkCol( const com::sun::star::ucb::Lock inLock, - apr_status_t& outSerfStatus ); + bool processMkCol( apr_status_t& outSerfStatus ); // COPY bool processCopy( const rtl::OUString & inDestinationPath, const bool inOverwrite, - const com::sun::star::ucb::Lock inLock, apr_status_t& outSerfStatus ); // MOVE bool processMove( const rtl::OUString & inDestinationPath, const bool inOverwrite, - const com::sun::star::ucb::Lock inLock, apr_status_t& outSerfStatus ); - // LOCK - bool processLock( const rtl::OUString & inDestinationPath, - const com::sun::star::ucb::Lock& inLock, - DAVPropertyValue & outLock, - apr_status_t& outSerfStatus ); - - // LOCK refresh - bool processLockRefresh( const rtl::OUString & inDestinationPath, - const com::sun::star::ucb::Lock& inLock, - DAVPropertyValue & outLock, - apr_status_t& outSerfStatus ); - - //UNLOCK - bool processUnlock( const rtl::OUString & inDestinationPath, - const com::sun::star::ucb::Lock& inLock, - apr_status_t& outSerfStatus ); - apr_status_t provideSerfCredentials( char ** outUsername, char ** outPassword, serf_request_t * inRequest, Modified: openoffice/branches/AOO410/main/ucb/source/ucp/webdav/SerfRequestProcessorImplFac.cxx URL: http://svn.apache.org/viewvc/openoffice/branches/AOO410/main/ucb/source/ucp/webdav/SerfRequestProcessorImplFac.cxx?rev=1705247&r1=1705246&r2=1705247&view=diff ============================================================================== --- openoffice/branches/AOO410/main/ucb/source/ucp/webdav/SerfRequestProcessorImplFac.cxx (original) +++ openoffice/branches/AOO410/main/ucb/source/ucp/webdav/SerfRequestProcessorImplFac.cxx Fri Sep 25 07:59:46 2015 @@ -22,7 +22,6 @@ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_ucb.hxx" -#include "SerfTypes.hxx" #include "SerfRequestProcessorImplFac.hxx" #include "SerfPropFindReqProcImpl.hxx" #include "SerfPropPatchReqProcImpl.hxx" @@ -34,9 +33,6 @@ #include "SerfMkColReqProcImpl.hxx" #include "SerfCopyReqProcImpl.hxx" #include "SerfMoveReqProcImpl.hxx" -#include "SerfLockReqProcImpl.hxx" -#include "SerfLockRefreshProcImpl.hxx" -#include "SerfUnlockProcImpl.hxx" namespace http_dav_ucp { @@ -68,13 +64,11 @@ namespace http_dav_ucp SerfRequestProcessorImpl* createPropPatchReqProcImpl( const char* inPath, const DAVRequestHeaders& inRequestHeaders, - const std::vector< ProppatchValue > & inProperties, - const char* inLockToken ) + const std::vector< ProppatchValue > & inProperties ) { SerfRequestProcessorImpl* pReqProcImpl = new SerfPropPatchReqProcImpl( inPath, inRequestHeaders, - inProperties, - inLockToken ); + inProperties ); return pReqProcImpl; } @@ -142,13 +136,11 @@ namespace http_dav_ucp SerfRequestProcessorImpl* createPutReqProcImpl( const char* inPath, const DAVRequestHeaders& inRequestHeaders, const char* inData, - const char* inLockToken, apr_size_t inDataLen ) { SerfRequestProcessorImpl* pReqProcImpl = new SerfPutReqProcImpl( inPath, inRequestHeaders, inData, - inLockToken, inDataLen ); return pReqProcImpl; } @@ -157,7 +149,6 @@ namespace http_dav_ucp const DAVRequestHeaders& inRequestHeaders, const char* inData, apr_size_t inDataLen, - const char* inLockToken, const char* inContentType, const char* inReferer, const com::sun::star::uno::Reference< SerfInputStream >& xioInStrm ) @@ -166,7 +157,6 @@ namespace http_dav_ucp inRequestHeaders, inData, inDataLen, - inLockToken, inContentType, inReferer, xioInStrm ); @@ -177,7 +167,6 @@ namespace http_dav_ucp const DAVRequestHeaders& inRequestHeaders, const char* inData, apr_size_t inDataLen, - const char* inLockToken, const char* inContentType, const char* inReferer, const com::sun::star::uno::Reference< com::sun::star::io::XOutputStream >& xioOutStrm ) @@ -186,7 +175,6 @@ namespace http_dav_ucp inRequestHeaders, inData, inDataLen, - inLockToken, inContentType, inReferer, xioOutStrm ); @@ -194,92 +182,42 @@ namespace http_dav_ucp } SerfRequestProcessorImpl* createDeleteReqProcImpl( const char* inPath, - const DAVRequestHeaders& inRequestHeaders, - const char * inLockToken ) + const DAVRequestHeaders& inRequestHeaders ) { SerfRequestProcessorImpl* pReqProcImpl = new SerfDeleteReqProcImpl( inPath, - inRequestHeaders, - inLockToken ); + inRequestHeaders ); return pReqProcImpl; } SerfRequestProcessorImpl* createMkColReqProcImpl( const char* inPath, - const DAVRequestHeaders& inRequestHeaders, - const char * inLockToken ) + const DAVRequestHeaders& inRequestHeaders ) { SerfRequestProcessorImpl* pReqProcImpl = new SerfMkColReqProcImpl( inPath, - inRequestHeaders, - inLockToken ); + inRequestHeaders ); return pReqProcImpl; } SerfRequestProcessorImpl* createCopyReqProcImpl( const char* inSourcePath, const DAVRequestHeaders& inRequestHeaders, const char* inDestinationPath, - const bool inOverwrite, - const char* inLockToken ) + const bool inOverwrite ) { SerfRequestProcessorImpl* pReqProcImpl = new SerfCopyReqProcImpl( inSourcePath, inRequestHeaders, inDestinationPath, - inOverwrite, - inLockToken ); + inOverwrite ); return pReqProcImpl; } SerfRequestProcessorImpl* createMoveReqProcImpl( const char* inSourcePath, const DAVRequestHeaders& inRequestHeaders, const char* inDestinationPath, - const bool inOverwrite, - const char* inLockToken ) + const bool inOverwrite ) { SerfRequestProcessorImpl* pReqProcImpl = new SerfMoveReqProcImpl( inSourcePath, inRequestHeaders, inDestinationPath, - inOverwrite, - inLockToken ); - return pReqProcImpl; - } - - SerfRequestProcessorImpl* createLockReqProcImpl( const char* inSourcePath, - const DAVRequestHeaders& inRequestHeaders, - const ucb::Lock& inLock, - const char* inTimeout, - DAVPropertyValue & outLock) - { - SerfRequestProcessorImpl* pReqProcImpl = new SerfLockReqProcImpl( inSourcePath, - inRequestHeaders, - inLock, - inTimeout, - outLock); - return pReqProcImpl; - } - - SerfRequestProcessorImpl* createLockRefreshProcImpl( const char* inSourcePath, - const DAVRequestHeaders& inRequestHeaders, - const ucb::Lock& inLock, - const char* inLockToken, - const char* inTimeout, - DAVPropertyValue & outLock) - { - SerfRequestProcessorImpl* pReqProcImpl = new SerfLockRefreshProcImpl( inSourcePath, - inRequestHeaders, - inLock, - inLockToken, - inTimeout, - outLock); - return pReqProcImpl; - } - - SerfRequestProcessorImpl* createUnlockProcImpl( const char* inSourcePath, - const DAVRequestHeaders& inRequestHeaders, - const ucb::Lock& inLock, - const char* inToken ) - { - SerfRequestProcessorImpl* pReqProcImpl = new SerfUnlockProcImpl( inSourcePath, - inRequestHeaders, - inLock, - inToken ); + inOverwrite ); return pReqProcImpl; } Modified: openoffice/branches/AOO410/main/ucb/source/ucp/webdav/SerfRequestProcessorImplFac.hxx URL: http://svn.apache.org/viewvc/openoffice/branches/AOO410/main/ucb/source/ucp/webdav/SerfRequestProcessorImplFac.hxx?rev=1705247&r1=1705246&r2=1705247&view=diff ============================================================================== --- openoffice/branches/AOO410/main/ucb/source/ucp/webdav/SerfRequestProcessorImplFac.hxx (original) +++ openoffice/branches/AOO410/main/ucb/source/ucp/webdav/SerfRequestProcessorImplFac.hxx Fri Sep 25 07:59:46 2015 @@ -27,7 +27,6 @@ #include "DAVTypes.hxx" #include "DAVResource.hxx" -#include "SerfTypes.hxx" #include "SerfRequestProcessorImpl.hxx" #include "SerfInputStream.hxx" #include <com/sun/star/io/XOutputStream.hpp> @@ -47,8 +46,7 @@ namespace http_dav_ucp SerfRequestProcessorImpl* createPropPatchReqProcImpl( const char* inPath, const DAVRequestHeaders& inRequestHeaders, - const std::vector< ProppatchValue > & inProperties, - const char* inLockToken ); + const std::vector< ProppatchValue > & inProperties ); SerfRequestProcessorImpl* createGetReqProcImpl( const char* inPath, const DAVRequestHeaders& inRequestHeaders, @@ -78,14 +76,12 @@ namespace http_dav_ucp SerfRequestProcessorImpl* createPutReqProcImpl( const char* inPath, const DAVRequestHeaders& inRequestHeaders, const char* inData, - const char* inLockToken, apr_size_t inDataLen ); SerfRequestProcessorImpl* createPostReqProcImpl( const char* inPath, const DAVRequestHeaders& inRequestHeaders, const char* inData, apr_size_t inDataLen, - const char* inLockToken, const char* inContentType, const char* inReferer, const com::sun::star::uno::Reference< SerfInputStream >& xioInStrm ); @@ -94,48 +90,25 @@ namespace http_dav_ucp const DAVRequestHeaders& inRequestHeaders, const char* inData, apr_size_t inDataLen, - const char* inLockToken, const char* inContentType, const char* inReferer, const com::sun::star::uno::Reference< com::sun::star::io::XOutputStream >& xioOutStrm ); SerfRequestProcessorImpl* createDeleteReqProcImpl( const char* inPath, - const DAVRequestHeaders& inRequestHeaders, - const char * inLockToken ); + const DAVRequestHeaders& inRequestHeaders ); SerfRequestProcessorImpl* createMkColReqProcImpl( const char* inPath, - const DAVRequestHeaders& inRequestHeaders, - const char * inLockToken ); + const DAVRequestHeaders& inRequestHeaders ); SerfRequestProcessorImpl* createCopyReqProcImpl( const char* inSourcePath, const DAVRequestHeaders& inRequestHeaders, const char* inDestinationPath, - const bool inOverwrite, - const char* inLockToken ); + const bool inOverwrite ); SerfRequestProcessorImpl* createMoveReqProcImpl( const char* inSourcePath, const DAVRequestHeaders& inRequestHeaders, const char* inDestinationPath, - const bool inOverwrite, - const char* inLockToken ); - - SerfRequestProcessorImpl* createLockReqProcImpl( const char* inSourcePath, - const DAVRequestHeaders& inRequestHeaders, - const ucb::Lock& inLock, - const char* inTimeout, - DAVPropertyValue & outLock ); - - SerfRequestProcessorImpl* createLockRefreshProcImpl( const char* inSourcePath, - const DAVRequestHeaders& inRequestHeaders, - const ucb::Lock& inLock, - const char* inToken, - const char* inTimeout, - DAVPropertyValue & outLock ); - - SerfRequestProcessorImpl* createUnlockProcImpl( const char* inSourcePath, - const DAVRequestHeaders& inRequestHeaders, - const ucb::Lock& inLock, - const char* inToken ); + const bool inOverwrite ); } // namespace http_dav_ucp Modified: openoffice/branches/AOO410/main/ucb/source/ucp/webdav/SerfSession.cxx URL: http://svn.apache.org/viewvc/openoffice/branches/AOO410/main/ucb/source/ucp/webdav/SerfSession.cxx?rev=1705247&r1=1705246&r2=1705247&view=diff ============================================================================== --- openoffice/branches/AOO410/main/ucb/source/ucp/webdav/SerfSession.cxx (original) +++ openoffice/branches/AOO410/main/ucb/source/ucp/webdav/SerfSession.cxx Fri Sep 25 07:59:46 2015 @@ -26,8 +26,6 @@ #include <vector> #include <string.h> #include <rtl/string.h> -#include <rtl/ustrbuf.hxx> -#include <osl/time.h> #include "comphelper/sequence.hxx" #include "ucbhelper/simplecertificatevalidationrequest.hxx" @@ -59,9 +57,10 @@ using namespace com::sun::star; using namespace http_dav_ucp; + // ------------------------------------------------------------------- // static members! -SerfLockStore SerfSession::m_aSerfLockStore; +//SerfLockStore SerfSession::m_aSerfLockStore; // ------------------------------------------------------------------- // Constructor @@ -76,7 +75,6 @@ SerfSession::SerfSession( , m_aUri( inUri ) , m_aProxyName() , m_nProxyPort( 0 ) - , m_aServerHeaderField() , m_pSerfConnection( 0 ) , m_pSerfContext( 0 ) , m_bIsHeadRequestInProgress( false ) @@ -99,7 +97,6 @@ SerfSession::~SerfSession( ) { serf_connection_close( m_pSerfConnection ); m_pSerfConnection = 0; - OSL_TRACE("SerfSession::~SerfSession: closed serf connection"); } } @@ -129,7 +126,6 @@ void SerfSession::Init() // Not yet initialized. Create new session. bCreateNewSession = true; - OSL_TRACE("SerfSession::Init: serf connection created"); } else { @@ -170,7 +166,7 @@ void SerfSession::Init() if ( m_aProxyName.getLength() ) { apr_sockaddr_t *proxy_address = NULL; - status = apr_sockaddr_info_get( &proxy_address, + status = apr_sockaddr_info_get( &proxy_address, rtl::OUStringToOString( m_aProxyName, RTL_TEXTENCODING_UTF8 ).getStr(), APR_UNSPEC, static_cast<apr_port_t>(m_nProxyPort), @@ -227,55 +223,6 @@ char* SerfSession::getHostinfo() return m_aUri.getAprUri()->hostinfo; } -// ------------------------------------------------------------------- -// helper function -// it composes the uri for lockstore registration -rtl::OUString SerfSession::composeCurrentUri(const rtl::OUString & inPath) -{ - rtl::OUString aScheme( m_aUri.GetScheme() ); - rtl::OUStringBuffer aBuf( aScheme ); - aBuf.appendAscii( "://" ); - if ( m_aUri.GetUserInfo().getLength() > 0 ) - { - aBuf.append( m_aUri.GetUserInfo() ); - aBuf.appendAscii( "@" ); - } - // Is host a numeric IPv6 address? - if ( ( m_aUri.GetHost().indexOf( ':' ) != -1 ) && - ( m_aUri.GetHost()[ 0 ] != sal_Unicode( '[' ) ) ) - { - aBuf.appendAscii( "[" ); - aBuf.append( m_aUri.GetHost() ); - aBuf.appendAscii( "]" ); - } - else - { - aBuf.append( m_aUri.GetHost() ); - } - - // append port, but only, if not default port. - bool bAppendPort = true; - sal_Int32 aPort = m_aUri.GetPort(); - switch ( aPort ) - { - case DEFAULT_HTTP_PORT: - bAppendPort = aScheme.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "http" ) ); - break; - - case DEFAULT_HTTPS_PORT: - bAppendPort = !aScheme.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "https" ) ); - break; - } - if ( bAppendPort ) - { - aBuf.appendAscii( ":" ); - aBuf.append( rtl::OUString::valueOf( aPort ) ); - } - aBuf.append( inPath ); - - rtl::OUString aUri(aBuf.makeStringAndClear() ); - return aUri; -} // ------------------------------------------------------------------- // virtual @@ -312,11 +259,11 @@ apr_status_t SerfSession::setupSerfConne apr_pool_t* /*inAprPool*/ ) { serf_bucket_t *tmpInputBkt; - tmpInputBkt = serf_context_bucket_socket_create( getSerfContext(), - inAprSocket, + tmpInputBkt = serf_context_bucket_socket_create( getSerfContext(), + inAprSocket, getSerfBktAlloc() ); - - if ( isSSLNeeded() ) + + if ( isSSLNeeded() ) { tmpInputBkt = serf_bucket_ssl_decrypt_create( tmpInputBkt, 0, @@ -329,7 +276,7 @@ apr_status_t SerfSession::setupSerfConne NULL, Serf_CertificateChainValidation, this); - serf_ssl_set_hostname( serf_bucket_ssl_decrypt_context_get( tmpInputBkt ), + serf_ssl_set_hostname( serf_bucket_ssl_decrypt_context_get( tmpInputBkt ), getHostinfo() ); *outSerfOutputBucket = serf_bucket_ssl_encrypt_create( *outSerfOutputBucket, @@ -343,10 +290,10 @@ apr_status_t SerfSession::setupSerfConne } apr_status_t SerfSession::provideSerfCredentials( bool bGiveProvidedCredentialsASecondTry, - char ** outUsername, + char ** outUsername, char ** outPassword, - serf_request_t * /*inRequest*/, - int /*inCode*/, + serf_request_t * /*inRequest*/, + int /*inCode*/, const char *inAuthProtocol, const char *inRealm, apr_pool_t *inAprPool ) @@ -653,7 +600,7 @@ serf_bucket_t* SerfSession::acceptSerfRe SerfBktAlloc ); // create response bucket - responseBkt = serf_bucket_response_create( responseBkt, + responseBkt = serf_bucket_response_create( responseBkt, SerfBktAlloc ); if ( isHeadRequestInProgress() ) @@ -746,16 +693,7 @@ void SerfSession::PROPPATCH( const rtl:: apr_status_t status = APR_SUCCESS; boost::shared_ptr<SerfRequestProcessor> aReqProc( createReqProc( inPath ) ); - //check whether a lock on this resource is already owned - rtl::OUString aUri( composeCurrentUri( inPath ) ); - ucb::Lock inLock; - SerfLock * pLock = m_aSerfLockStore.findByUri( aUri ); - if ( pLock ) - { - inLock = pLock->getLock(); - } aReqProc->processPropPatch( inValues, - inLock, status ); HandleError( aReqProc ); @@ -905,18 +843,8 @@ void SerfSession::PUT( const rtl::OUStri if ( !getDataFromInputStream( inInputStream, aDataToSend, false ) ) throw DAVException( DAVException::DAV_INVALID_ARG ); apr_status_t status = APR_SUCCESS; - - //check whether a lock on this resource is already owned - rtl::OUString aUri( composeCurrentUri( inPath ) ); - ucb::Lock inLock; - SerfLock * pLock = m_aSerfLockStore.findByUri( aUri ); - if ( pLock ) - { - inLock = pLock->getLock(); - } aReqProc->processPut( reinterpret_cast< const char * >( aDataToSend.getConstArray() ), aDataToSend.getLength(), - inLock, status ); HandleError( aReqProc ); @@ -946,19 +874,10 @@ SerfSession::POST( const rtl::OUString & boost::shared_ptr<SerfRequestProcessor> aReqProc( createReqProc( inPath ) ); uno::Reference< SerfInputStream > xInputStream( new SerfInputStream ); apr_status_t status = APR_SUCCESS; - //check whether a lock on this resource is already owned - rtl::OUString aUri( composeCurrentUri( inPath ) ); - ucb::Lock inLock; - SerfLock * pLock = m_aSerfLockStore.findByUri( aUri ); - if ( pLock ) - { - inLock = pLock->getLock(); - } aReqProc->processPost( reinterpret_cast< const char * >( aDataToSend.getConstArray() ), aDataToSend.getLength(), rContentType, rReferer, - inLock, xInputStream, status ); @@ -989,19 +908,10 @@ void SerfSession::POST( const rtl::OUStr boost::shared_ptr<SerfRequestProcessor> aReqProc( createReqProc( inPath ) ); apr_status_t status = APR_SUCCESS; - //check whether a lock on this resource is already owned - rtl::OUString aUri( composeCurrentUri( inPath ) ); - ucb::Lock inLock; - SerfLock * pLock = m_aSerfLockStore.findByUri( aUri ); - if ( pLock ) - { - inLock = pLock->getLock(); - } aReqProc->processPost( reinterpret_cast< const char * >( aDataToSend.getConstArray() ), aDataToSend.getLength(), rContentType, rReferer, - inLock, oOutputStream, status ); @@ -1021,15 +931,7 @@ void SerfSession::MKCOL( const rtl::OUSt boost::shared_ptr<SerfRequestProcessor> aReqProc( createReqProc( inPath ) ); apr_status_t status = APR_SUCCESS; - //check whether a lock on the destination resource is already owned - rtl::OUString aUri( composeCurrentUri( inPath ) ); - ucb::Lock inLock; - SerfLock * pLock = m_aSerfLockStore.findByUri( aUri ); - if ( pLock ) - { - inLock = pLock->getLock(); - } - aReqProc->processMkCol( inLock, status ); + aReqProc->processMkCol( status ); HandleError( aReqProc ); } @@ -1050,17 +952,8 @@ void SerfSession::COPY( const rtl::OUStr SerfUri theSourceUri( inSourceURL ); boost::shared_ptr<SerfRequestProcessor> aReqProc( createReqProc( theSourceUri.GetPath() ) ); apr_status_t status = APR_SUCCESS; - //check whether a lock on the destination resource is already owned - rtl::OUString aUri( composeCurrentUri( inDestinationURL ) ); - ucb::Lock inLock; - SerfLock * pLock = m_aSerfLockStore.findByUri( aUri ); - if ( pLock ) - { - inLock = pLock->getLock(); - } aReqProc->processCopy( inDestinationURL, (inOverWrite ? true : false), - inLock, status ); HandleError( aReqProc ); @@ -1082,17 +975,8 @@ void SerfSession::MOVE( const rtl::OUStr SerfUri theSourceUri( inSourceURL ); boost::shared_ptr<SerfRequestProcessor> aReqProc( createReqProc( theSourceUri.GetPath() ) ); apr_status_t status = APR_SUCCESS; - //check whether a lock on the destination resource is already owned - rtl::OUString aUri( composeCurrentUri( inDestinationURL ) ); - ucb::Lock inLock; - SerfLock * pLock = m_aSerfLockStore.findByUri( aUri ); - if ( pLock ) - { - inLock = pLock->getLock(); - } aReqProc->processMove( inDestinationURL, (inOverWrite ? true : false), - inLock, status ); HandleError( aReqProc ); @@ -1111,33 +995,25 @@ void SerfSession::DESTROY( const rtl::OU boost::shared_ptr<SerfRequestProcessor> aReqProc( createReqProc( inPath ) ); apr_status_t status = APR_SUCCESS; - //check whether a lock on this resource is already owned - rtl::OUString aUri( composeCurrentUri( inPath ) ); - ucb::Lock inLock; - SerfLock * pLock = m_aSerfLockStore.findByUri( aUri ); - if ( pLock ) - { - inLock = pLock->getLock(); - } - aReqProc->processDelete( inLock, status ); + aReqProc->processDelete( status ); HandleError( aReqProc ); } // ------------------------------------------------------------------- - +/* namespace { sal_Int32 lastChanceToSendRefreshRequest( TimeValue const & rStart, - sal_Int32 timeout ) + int timeout ) { TimeValue aEnd; osl_getSystemTime( &aEnd ); // Try to estimate a safe absolute time for sending the // lock refresh request. - sal_Int32 lastChanceToSendRefreshRequest = DAVINFINITY; - if ( timeout != DAVINFINITY ) + sal_Int32 lastChanceToSendRefreshRequest = -1; + if ( timeout != NE_TIMEOUT_INFINITE ) { sal_Int32 calltime = aEnd.Seconds - rStart.Seconds; if ( calltime <= timeout ) @@ -1154,62 +1030,108 @@ namespace } } // namespace - +*/ // ------------------------------------------------------------------- // LOCK (set new lock) // ------------------------------------------------------------------- void SerfSession::LOCK( const ::rtl::OUString & inPath, - ucb::Lock & rLock, + ucb::Lock & /*rLock*/, const DAVRequestEnvironment & rEnv ) throw ( DAVException ) { osl::Guard< osl::Mutex > theGuard( m_aMutex ); - //before locking, search in the lock store if we already own a lock for this resource - //if present, return with exception DAV_LOCKED_SELF - rtl::OUString aUri( composeCurrentUri( inPath ) ); - SerfLock * pLock = m_aSerfLockStore.findByUri( aUri ); - if ( pLock ) - { -//already present, meaning already locked by the same AOO session and already in the lockstore -//just return, nothing to do - return; - } - Init( rEnv ); boost::shared_ptr<SerfRequestProcessor> aReqProc( createReqProc( inPath ) ); - apr_status_t status = APR_SUCCESS; + HandleError( aReqProc ); + /* Create a depth zero, exclusive write lock, with default timeout + * (allowing a server to pick a default). token, owner and uri are + * unset. */ + /* + SerfLock * theLock = ne_lock_create(); - //the returned property, a sequence of locks - //only the first is used - DAVPropertyValue outLock; + // Set the lock uri + ne_uri aUri; + ne_uri_parse( rtl::OUStringToOString( makeAbsoluteURL( inPath ), + RTL_TEXTENCODING_UTF8 ).getStr(), + &aUri ); + theLock->uri = aUri; + + // Set the lock depth + switch( rLock.Depth ) + { + case ucb::LockDepth_ZERO: + theLock->depth = NE_DEPTH_ZERO; + break; + case ucb::LockDepth_ONE: + theLock->depth = NE_DEPTH_ONE; + break; + case ucb::LockDepth_INFINITY: + theLock->depth = NE_DEPTH_INFINITE; + break; + default: + throw DAVException( DAVException::DAV_INVALID_ARG ); + } + // Set the lock scope + switch ( rLock.Scope ) + { + case ucb::LockScope_EXCLUSIVE: + theLock->scope = ne_lockscope_exclusive; + break; + case ucb::LockScope_SHARED: + theLock->scope = ne_lockscope_shared; + break; + default: + throw DAVException( DAVException::DAV_INVALID_ARG ); + } + + // Set the lock timeout + theLock->timeout = (long)rLock.Timeout; + + // Set the lock owner + rtl::OUString aValue; + rLock.Owner >>= aValue; + theLock->owner = + ne_strdup( rtl::OUStringToOString( aValue, + RTL_TEXTENCODING_UTF8 ).getStr() ); TimeValue startCall; osl_getSystemTime( &startCall ); - aReqProc->processLock(inPath, rLock, outLock, status); - //HandleError will handle the error and throw an exception, if needed - HandleError( aReqProc ); + int theRetVal = ne_lock( m_pHttpSession, theLock ); - if(outLock.Name.compareToAscii(RTL_CONSTASCII_STRINGPARAM( "DAV:lockdiscovery" )) == 0 ) + if ( theRetVal == NE_OK ) { - //got a lock, use only the first returned - uno::Sequence< ucb::Lock > aLocks; - outLock.Value >>= aLocks; - ucb::Lock aLock = aLocks[0]; + m_aSerfLockStore.addLock( theLock, + this, + lastChanceToSendRefreshRequest( + startCall, theLock->timeout ) ); + + uno::Sequence< rtl::OUString > aTokens( 1 ); + aTokens[ 0 ] = rtl::OUString::createFromAscii( theLock->token ); + rLock.LockTokens = aTokens; - SerfLock* aNewLock = new SerfLock( aLock, aUri, inPath ); - // add the store the new lock - m_aSerfLockStore.addLock(aNewLock,this, - lastChanceToSendRefreshRequest( - startCall, static_cast< sal_Int32 >(aLock.Timeout) ) ); + OSL_TRACE( "SerfSession::LOCK: created lock for %s. token: %s", + rtl::OUStringToOString( makeAbsoluteURL( inPath ), + RTL_TEXTENCODING_UTF8 ).getStr(), + theLock->token ); + } + else + { + ne_lock_destroy( theLock ); + + OSL_TRACE( "SerfSession::LOCK: obtaining lock for %s failed!", + rtl::OUStringToOString( makeAbsoluteURL( inPath ), + RTL_TEXTENCODING_UTF8 ).getStr() ); } + HandleError( theRetVal, inPath, rEnv ); + */ } // ------------------------------------------------------------------- -// LOCK (refresh existing lock from DAVResourceAccess) +// LOCK (refresh existing lock) // ------------------------------------------------------------------- sal_Int64 SerfSession::LOCK( const ::rtl::OUString & /*inPath*/, sal_Int64 nTimeout, @@ -1250,102 +1172,92 @@ sal_Int64 SerfSession::LOCK( const ::rtl } // ------------------------------------------------------------------- -// LOCK (refresh existing lock from SerfLockStore) +// LOCK (refresh existing lock) // ------------------------------------------------------------------- -bool SerfSession::LOCK( SerfLock * pLock, - sal_Int32 & rlastChanceToSendRefreshRequest ) +bool SerfSession::LOCK( SerfLock * /*pLock*/, + sal_Int32 & /*rlastChanceToSendRefreshRequest*/ ) { osl::Guard< osl::Mutex > theGuard( m_aMutex ); - rtl::OUString inPath = pLock->getResourcePath(); - - boost::shared_ptr<SerfRequestProcessor> aReqProc( createReqProc( inPath ) ); - apr_status_t status = APR_SUCCESS; - //the returned property, a sequence of locks - //only the first is used - DAVPropertyValue outLock; + return true; + /* + // refresh existing lock. TimeValue startCall; osl_getSystemTime( &startCall ); - // refresh existing lock. - aReqProc->processLockRefresh( inPath, pLock->getLock(), outLock, status); - - // TODO: possible enhancement as the following: - // - use an interaction handler to alert the user if the lock was not refreshed, - // offering to try again with a new session, asking the user for credential, if necessary. - // This may happen if the WebDAV server goes off-line for whatever reason, or the connection is dropped for time-out - // To implement this behavior, some redesigning of the current session implementation may be needed. - // - - //HandleError will handle the error and throw an exception, if needed - HandleError( aReqProc ); - - uno::Sequence< ucb::Lock > aLocks; - outLock.Value >>= aLocks; - ucb::Lock aLock = aLocks[0]; - - //if ok, udate the lastchance refresh time in lock - rlastChanceToSendRefreshRequest - = lastChanceToSendRefreshRequest( startCall, static_cast< sal_Int32 >(aLock.Timeout) ); + if ( ne_lock_refresh( m_pHttpSession, pLock ) == NE_OK ) + { + rlastChanceToSendRefreshRequest + = lastChanceToSendRefreshRequest( startCall, pLock->timeout ); - return true; + OSL_TRACE( "Lock successfully refreshed." ); + return true; + } + else + { + OSL_TRACE( "Lock not refreshed!" ); + return false; + } + */ } // ------------------------------------------------------------------- -// UNLOCK called from external (DAVResourceAccess) +// UNLOCK // ------------------------------------------------------------------- -void SerfSession::UNLOCK( const ::rtl::OUString & inPath, - const DAVRequestEnvironment & rEnv ) +void SerfSession::UNLOCK( const ::rtl::OUString & /*inPath*/, + const DAVRequestEnvironment & /*rEnv*/ ) throw ( DAVException ) { osl::Guard< osl::Mutex > theGuard( m_aMutex ); - rtl::OUString aUri( composeCurrentUri( inPath ) ); - SerfLock * pLock = m_aSerfLockStore.findByUri( aUri ); - if ( !pLock ) - { + /* + // get the neon lock from lock store + SerfLock * theLock + = m_aSerfLockStore.findByUri( makeAbsoluteURL( inPath ) ); + if ( !theLock ) throw DAVException( DAVException::DAV_NOT_LOCKED ); - } Init( rEnv ); - boost::shared_ptr<SerfRequestProcessor> aReqProc( createReqProc( inPath ) ); - apr_status_t status = APR_SUCCESS; + int theRetVal = ne_unlock( m_pHttpSession, theLock ); - ucb::Lock inLock = pLock->getLock(); - //remove lock from lockstore - // so, if something goes wrong, we don't refresh it anymore - m_aSerfLockStore.removeLock(pLock); - delete pLock; - - // remove existing lock - aReqProc->processUnlock( inPath, inLock, status); + if ( theRetVal == NE_OK ) + { + m_aSerfLockStore.removeLock( theLock ); + ne_lock_destroy( theLock ); + } + else + { + OSL_TRACE( "SerfSession::UNLOCK: unlocking of %s failed.", + rtl::OUStringToOString( makeAbsoluteURL( inPath ), + RTL_TEXTENCODING_UTF8 ).getStr() ); + } - //HandleError will handle the error and throw an exception, if needed - HandleError( aReqProc ); + HandleError( theRetVal, inPath, rEnv ); + */ } // ------------------------------------------------------------------- -// UNLOCK (called from SerfLockStore) +// UNLOCK // ------------------------------------------------------------------- -bool SerfSession::UNLOCK( SerfLock * pLock ) +bool SerfSession::UNLOCK( SerfLock * /*pLock*/ ) { osl::Guard< osl::Mutex > theGuard( m_aMutex ); - rtl::OUString inPath = pLock->getResourcePath(); - - boost::shared_ptr<SerfRequestProcessor> aReqProc( createReqProc( inPath ) ); - apr_status_t status = APR_SUCCESS; - - rtl::OUString aToken; - aToken = pLock->getLock().LockTokens[0]; - - aReqProc->processUnlock( inPath, pLock->getLock(), status); - - //HandleError will handle the error and throw an exception, if needed - HandleError( aReqProc ); return true; + /* + if ( ne_unlock( m_pHttpSession, pLock ) == NE_OK ) + { + OSL_TRACE( "UNLOCK succeeded." ); + return true; + } + else + { + OSL_TRACE( "UNLOCK failed!" ); + return false; + } + */ } // ------------------------------------------------------------------- @@ -1403,10 +1315,6 @@ bool containsLocktoken( const uno::Seque */ // ------------------------------------------------------------------- -// This method doesn't seem to be used. -// In any case the default behavior is to ask a lock whith a life of 3 minutes -// it will then be refreshed automatically (see SerfLockStore class) -// In case of AOO crash the lock will expire by itself bool SerfSession::removeExpiredLocktoken( const rtl::OUString & /*inURL*/, const DAVRequestEnvironment & /*rEnv*/ ) { @@ -1704,3 +1612,37 @@ SerfSession::isDomainMatch( rtl::OUStrin } return sal_False; } + +/* +// --------------------------------------------------------------------- +rtl::OUString SerfSession::makeAbsoluteURL( rtl::OUString const & rURL ) const +{ + try + { + // Is URL relative or already absolute? + if ( rURL[ 0 ] != sal_Unicode( '/' ) ) + { + // absolute. + return rtl::OUString( rURL ); + } + else + { + ne_uri aUri; + memset( &aUri, 0, sizeof( aUri ) ); + + ne_fill_server_uri( m_pHttpSession, &aUri ); + aUri.path + = ne_strdup( rtl::OUStringToOString( + rURL, RTL_TEXTENCODING_UTF8 ).getStr() ); + SerfUri aSerfUri( &aUri ); + ne_uri_free( &aUri ); + return aSerfUri.GetURI(); + } + } + catch ( DAVException const & ) + { + } + // error. + return rtl::OUString(); +} +*/ Modified: openoffice/branches/AOO410/main/ucb/source/ucp/webdav/SerfSession.hxx URL: http://svn.apache.org/viewvc/openoffice/branches/AOO410/main/ucb/source/ucp/webdav/SerfSession.hxx?rev=1705247&r1=1705246&r2=1705247&view=diff ============================================================================== --- openoffice/branches/AOO410/main/ucb/source/ucp/webdav/SerfSession.hxx (original) +++ openoffice/branches/AOO410/main/ucb/source/ucp/webdav/SerfSession.hxx Fri Sep 25 07:59:46 2015 @@ -27,10 +27,9 @@ #include <vector> #include <boost/shared_ptr.hpp> #include <osl/mutex.hxx> -#include "DAVResource.hxx" #include "DAVSession.hxx" #include "SerfTypes.hxx" -#include "SerfLockStore.hxx" +//#include "SerfLockStore.hxx" #include "SerfUri.hxx" #include <com/sun/star/lang/XMultiServiceFactory.hpp> @@ -55,9 +54,6 @@ private: rtl::OUString m_aProxyName; sal_Int32 m_nProxyPort; - // The server, according RFC7231 - // http://tools.ietf.org/html/rfc7231#section-7.4.2 - rtl::OUString m_aServerHeaderField; SerfConnection* m_pSerfConnection; serf_context_t* m_pSerfContext; @@ -70,14 +66,12 @@ private: DAVRequestEnvironment m_aEnv; - static SerfLockStore m_aSerfLockStore; +// static SerfLockStore m_aSerfLockStore; char* getHostinfo(); bool isSSLNeeded(); - SerfRequestProcessor* createReqProc( const rtl::OUString & inPath ); - - rtl::OUString composeCurrentUri( const rtl::OUString & inPath ); + SerfRequestProcessor* createReqProc( const rtl::OUString & inPath ); protected: virtual ~SerfSession(); @@ -264,10 +258,6 @@ public: sal_Bool isDomainMatch( rtl::OUString certHostName ); - const rtl::OUString & getServerHeaderField() { return m_aServerHeaderField; }; - - void setServerHeaderField( rtl::OUString aServerHeaderField ) { m_aServerHeaderField = aServerHeaderField; }; - private: friend class SerfLockStore; Modified: openoffice/branches/AOO410/main/ucb/source/ucp/webdav/SerfTypes.hxx URL: http://svn.apache.org/viewvc/openoffice/branches/AOO410/main/ucb/source/ucp/webdav/SerfTypes.hxx?rev=1705247&r1=1705246&r2=1705247&view=diff ============================================================================== --- openoffice/branches/AOO410/main/ucb/source/ucp/webdav/SerfTypes.hxx (original) +++ openoffice/branches/AOO410/main/ucb/source/ucp/webdav/SerfTypes.hxx Fri Sep 25 07:59:46 2015 @@ -25,42 +25,13 @@ #define INCLUDED_SERFTYPES_HXX #include <serf.h> -#include <com/sun/star/ucb/Lock.hpp> -#include "DAVTypes.hxx" -#include "DAVRequestEnvironment.hxx" - -using namespace com::sun::star; - -namespace http_dav_ucp -{ typedef serf_connection_t SerfConnection; -class SerfLock -{ -private: - ucb::Lock mLock; - const rtl::OUString mResourceUri; - const rtl::OUString mPathStr; - // const DAVRequestEnvironment& mrRequestEnvironment; -public: - - SerfLock(const ucb::Lock inLock, rtl::OUString inUri, rtl::OUString inPath) - : mLock( inLock ) - , mResourceUri( inUri ) - , mPathStr( inPath ) - // , mrRequestEnvironment( rEnv ) - {}; - - void setLock(const ucb::Lock inLock) { mLock = inLock; }; - const ucb::Lock getLock() { return mLock; }; - const rtl::OUString getResourceUri() { return mResourceUri; }; - const rtl::OUString getResourcePath() { return mPathStr; }; - // const DAVRequestEnvironment& getRequestEnvironment() { return mrRequestEnvironment; }; -}; +// TODO, figure out type of <SerfLock> +typedef int SerfLock; // TODO, check if we need it later on typedef struct { const char *nspace, *name; } SerfPropName; -}; #endif // INCLUDED_SERFTYPES_HXX Modified: openoffice/branches/AOO410/main/ucb/source/ucp/webdav/makefile.mk URL: http://svn.apache.org/viewvc/openoffice/branches/AOO410/main/ucb/source/ucp/webdav/makefile.mk?rev=1705247&r1=1705246&r2=1705247&view=diff ============================================================================== --- openoffice/branches/AOO410/main/ucb/source/ucp/webdav/makefile.mk (original) +++ openoffice/branches/AOO410/main/ucb/source/ucp/webdav/makefile.mk Fri Sep 25 07:59:46 2015 @@ -131,10 +131,6 @@ SLOFILES=\ $(SLO)$/SerfMkColReqProcImpl.obj \ $(SLO)$/SerfCopyReqProcImpl.obj \ $(SLO)$/SerfMoveReqProcImpl.obj \ - $(SLO)$/SerfLockReqProcImpl.obj \ - $(SLO)$/SerfLockRefreshProcImpl.obj \ - $(SLO)$/SerfUnlockProcImpl.obj \ - $(SLO)$/SerfLockStore.obj \ $(SLO)$/SerfSession.obj \ $(SLO)$/SerfCallbacks.obj \ $(SLO)$/SerfInputStream.obj \ @@ -152,7 +148,6 @@ SHL1IMPLIB=i$(TARGET) SHL1VERSIONMAP=$(SOLARENV)/src/component.map SHL1STDLIBS+=\ - $(TOOLSLIB) \ $(CPPUHELPERLIB) \ $(CPPULIB) \ $(SALLIB) \
