[Libreoffice-commits] core.git: Branch 'distro/collabora/cp-4.2' - ucb/source

Matúš Kukan matus.kukan at collabora.com
Fri Apr 4 01:39:04 PDT 2014


 ucb/source/ucp/webdav/SerfPutReqProcImpl.cxx   |    9 ++++++++-
 ucb/source/ucp/webdav/SerfPutReqProcImpl.hxx   |    5 +++--
 ucb/source/ucp/webdav/SerfRequestProcessor.cxx |    8 +++++++-
 3 files changed, 18 insertions(+), 4 deletions(-)

New commits:
commit 2b39f36386c78c819864ff374c4cc61007aa73ea
Author: Matúš Kukan <matus.kukan at collabora.com>
Date:   Fri Apr 4 10:30:38 2014 +0200

    webdav: Allow to save documents again, after locking is implemented.
    
    We need to extend PUT method with lock token in 'If' header, so that it
    does not fail on a resource locked by us.
    
    Change-Id: I82a9e3303a34607dba8bb874d1eb0fac23b9f11d
    (cherry picked from commit e250a013bae4b58a9304518aefc6da0dab574103)

diff --git a/ucb/source/ucp/webdav/SerfPutReqProcImpl.cxx b/ucb/source/ucp/webdav/SerfPutReqProcImpl.cxx
index a64ecff..20a9984 100644
--- a/ucb/source/ucp/webdav/SerfPutReqProcImpl.cxx
+++ b/ucb/source/ucp/webdav/SerfPutReqProcImpl.cxx
@@ -29,10 +29,12 @@ namespace http_dav_ucp
 SerfPutReqProcImpl::SerfPutReqProcImpl( const char* inPath,
                                         const DAVRequestHeaders& inRequestHeaders,
                                         const char* inData,
-                                        apr_size_t inDataLen )
+                                        apr_size_t inDataLen,
+                                        const OUString& sToken )
     : SerfRequestProcessorImpl( inPath, inRequestHeaders )
     , mpData( inData )
     , mnDataLen( inDataLen )
+    , msToken( sToken )
 {
 }
 
@@ -64,6 +66,11 @@ serf_bucket_t * SerfPutReqProcImpl::createSerfRequestBucket( serf_request_t * in
     // general header fields provided by caller
     setRequestHeaders( hdrs_bkt );
 
+    // 'If' header with token, so that we can save document locked by us
+    const OString sIfHeader( "<" + OString(getPathStr()) + "> (<" + OUStringToOString(
+                msToken, RTL_TEXTENCODING_UTF8) + ">)" );
+    serf_bucket_headers_set( hdrs_bkt, "If", sIfHeader.getStr() );
+
     return req_bkt;
 }
 
diff --git a/ucb/source/ucp/webdav/SerfPutReqProcImpl.hxx b/ucb/source/ucp/webdav/SerfPutReqProcImpl.hxx
index a0bcccd..4bb8adb 100644
--- a/ucb/source/ucp/webdav/SerfPutReqProcImpl.hxx
+++ b/ucb/source/ucp/webdav/SerfPutReqProcImpl.hxx
@@ -31,7 +31,8 @@ public:
     SerfPutReqProcImpl( const char* inPath,
                         const DAVRequestHeaders& inRequestHeaders,
                         const char* inData,
-                        apr_size_t inDataLen );
+                        apr_size_t inDataLen,
+                        const OUString& sToken );
 
 
     virtual ~SerfPutReqProcImpl();
@@ -49,7 +50,7 @@ protected:
 private:
     const char* mpData;
     apr_size_t mnDataLen;
-
+    OUString msToken;
 };
 
 } // namespace http_dav_ucp
diff --git a/ucb/source/ucp/webdav/SerfRequestProcessor.cxx b/ucb/source/ucp/webdav/SerfRequestProcessor.cxx
index ddeecca..c0bda26 100644
--- a/ucb/source/ucp/webdav/SerfRequestProcessor.cxx
+++ b/ucb/source/ucp/webdav/SerfRequestProcessor.cxx
@@ -203,10 +203,16 @@ bool SerfRequestProcessor::processPut( const char* inData,
                                        apr_size_t inDataLen,
                                        apr_status_t& outSerfStatus )
 {
+    // get the lock from lock store
+    const OUString sToken(
+            apr_environment::AprEnv::getAprEnv()->getSerfLockStore()->getLockToken(
+                OUString::createFromAscii(mPathStr)) );
+
     mpProcImpl = new SerfPutReqProcImpl( mPathStr,
                                        mrSerfSession.getRequestEnvironment().m_aRequestHeaders,
                                        inData,
-                                       inDataLen );
+                                       inDataLen,
+                                       sToken );
     outSerfStatus = runProcessor();
 
     return outSerfStatus == APR_SUCCESS;


More information about the Libreoffice-commits mailing list