[Libreoffice-commits] core.git: Branch 'aoo/trunk' - offapi/com ucb/source

Andrea Pescetti pescetti at apache.org
Fri Sep 25 05:08:22 PDT 2015


 offapi/com/sun/star/ucb/InteractiveLockingLockNotAvailableException.idl |   48 +++
 ucb/source/ucp/webdav/SerfLockRefreshProcImpl.cxx                       |   80 +++++
 ucb/source/ucp/webdav/SerfLockRefreshProcImpl.hxx                       |   51 +++
 ucb/source/ucp/webdav/SerfLockReqProcImpl.cxx                           |  155 ++++++++++
 ucb/source/ucp/webdav/SerfLockReqProcImpl.hxx                           |   74 ++++
 ucb/source/ucp/webdav/SerfUnlockProcImpl.cxx                            |   92 +++++
 ucb/source/ucp/webdav/SerfUnlockProcImpl.hxx                            |   69 ++++
 7 files changed, 569 insertions(+)

New commits:
commit fd1276818e582ddb741096c87580b98e9784c42b
Author: Andrea Pescetti <pescetti at apache.org>
Date:   Fri Sep 25 11:42:53 2015 +0000

    #i126305# Add missing files from the patch.

diff --git a/offapi/com/sun/star/ucb/InteractiveLockingLockNotAvailableException.idl b/offapi/com/sun/star/ucb/InteractiveLockingLockNotAvailableException.idl
new file mode 100644
index 0000000..c084f6e
--- /dev/null
+++ b/offapi/com/sun/star/ucb/InteractiveLockingLockNotAvailableException.idl
@@ -0,0 +1,48 @@
+/**************************************************************
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ *************************************************************/
+
+
+#ifndef __com_sun_star_ucb_InteractiveLockingLockNotAvailableException_idl__
+#define __com_sun_star_ucb_InteractiveLockingLockNotAvailableException_idl__
+
+#ifndef __com_sun_star_ucb_InteractiveLockingException_idl__
+#include <com/sun/star/ucb/InteractiveLockingException.idl>
+#endif
+
+
+//=============================================================================
+
+module com { module sun { module star { module ucb {
+
+//=============================================================================
+/** An error indicating that the resource can not be locked because the lock capabiliy is not available
+
+    @since OpenOffice 4.2
+*/
+/*published*/ exception InteractiveLockingLockNotAvailableException : com::sun::star::ucb::InteractiveLockingException
+{
+};
+
+//=============================================================================
+
+}; }; }; };
+
+#endif
diff --git a/ucb/source/ucp/webdav/SerfLockRefreshProcImpl.cxx b/ucb/source/ucp/webdav/SerfLockRefreshProcImpl.cxx
new file mode 100644
index 0000000..1ed74d6
--- /dev/null
+++ b/ucb/source/ucp/webdav/SerfLockRefreshProcImpl.cxx
@@ -0,0 +1,80 @@
+/**************************************************************
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ *************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_ucb.hxx"
+
+#include "SerfTypes.hxx"
+#include "SerfLockRefreshProcImpl.hxx"
+#include "DAVProperties.hxx"
+
+#include "webdavresponseparser.hxx"
+#include <serf/serf.h>
+#include <rtl/ustrbuf.hxx>
+#include <apr/apr_strings.h>
+
+namespace http_dav_ucp
+{
+
+SerfLockRefreshProcImpl::SerfLockRefreshProcImpl( const char* inSourcePath,
+                                                  const DAVRequestHeaders& inRequestHeaders, // on debug the header look empty
+                                                  const ucb::Lock& inLock,
+                                                  const char* inLockToken,
+                                                  const char* inTimeout,
+                                          DAVPropertyValue & outLock)
+    : SerfLockReqProcImpl( inSourcePath, inRequestHeaders, inLock, inTimeout, outLock )
+    , mpLockToken( inLockToken )
+{
+}
+
+SerfLockRefreshProcImpl::~SerfLockRefreshProcImpl()
+{
+}
+
+serf_bucket_t * SerfLockRefreshProcImpl::createSerfRequestBucket( serf_request_t * inSerfRequest )
+{
+    // create serf request
+    serf_bucket_t *req_bkt = serf_request_bucket_request_create( inSerfRequest,
+                                                                 "LOCK",
+                                                                 getPathStr(),
+                                                                 0,
+                                                                 serf_request_get_alloc( inSerfRequest ) );
+    // set request header fields
+    serf_bucket_t* hdrs_bkt = serf_bucket_request_get_headers( req_bkt );
+    if (hdrs_bkt != NULL)
+    {
+        // general header fields provided by caller
+        setRequestHeaders( hdrs_bkt );
+
+        // request specific header fields
+        if(mTimeout != 0)
+        {
+            serf_bucket_headers_set( hdrs_bkt, "Timeout", mTimeout );
+        }
+        if(mpLockToken != 0)
+        {
+            serf_bucket_headers_set( hdrs_bkt, "if", mpLockToken );
+        }
+    }
+    return req_bkt;
+}
+
+} // namespace http_dav_ucp
diff --git a/ucb/source/ucp/webdav/SerfLockRefreshProcImpl.hxx b/ucb/source/ucp/webdav/SerfLockRefreshProcImpl.hxx
new file mode 100644
index 0000000..22d6cad
--- /dev/null
+++ b/ucb/source/ucp/webdav/SerfLockRefreshProcImpl.hxx
@@ -0,0 +1,51 @@
+/**************************************************************
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ *************************************************************/
+
+#ifndef INCLUDED_SERFLOCKREFRESHPROCIMPL_HXX
+#define INCLUDED_SERFLOCKREFRESHPROCIMPL_HXX
+
+#include "SerfLockReqProcImpl.hxx"
+
+namespace http_dav_ucp
+{
+
+    class SerfLockRefreshProcImpl : public SerfLockReqProcImpl
+    {
+    protected:
+        const char*         mpLockToken;
+
+    public:
+        SerfLockRefreshProcImpl( const char* inSourcePath,
+                                 const DAVRequestHeaders& inRequestHeaders,
+                                 const ucb::Lock& inLock,
+                                 const char* inLockToken,
+                                 const char* inTimeout,
+                                 DAVPropertyValue & outLock);
+
+        virtual ~SerfLockRefreshProcImpl();
+
+        virtual
+        serf_bucket_t * createSerfRequestBucket( serf_request_t * inSerfRequest );
+    };
+
+} // namespace http_dav_ucp
+
+#endif // INCLUDED_SERFLOCKREFRESHPROCIMPL_HXX
diff --git a/ucb/source/ucp/webdav/SerfLockReqProcImpl.cxx b/ucb/source/ucp/webdav/SerfLockReqProcImpl.cxx
new file mode 100644
index 0000000..3bb751d
--- /dev/null
+++ b/ucb/source/ucp/webdav/SerfLockReqProcImpl.cxx
@@ -0,0 +1,155 @@
+/**************************************************************
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ *************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_ucb.hxx"
+
+#include "SerfTypes.hxx"
+#include "SerfLockReqProcImpl.hxx"
+#include "DAVProperties.hxx"
+
+#include "webdavresponseparser.hxx"
+#include <serf/serf.h>
+#include <rtl/ustrbuf.hxx>
+#include <apr/apr_strings.h>
+
+namespace http_dav_ucp
+{
+
+SerfLockReqProcImpl::SerfLockReqProcImpl( const char* inSourcePath,
+                                          const DAVRequestHeaders& inRequestHeaders, // on debug the header look empty
+                                          const ucb::Lock& inLock,
+                                          const char* inTimeout,
+                                          DAVPropertyValue & outLock)
+    : SerfRequestProcessorImpl( inSourcePath, inRequestHeaders )
+    , mLock( inLock )
+    , mTimeout(inTimeout)
+    , mLockObtained( &outLock )
+    , xInputStream( new SerfInputStream() )
+{
+    switch ( inLock.Depth )
+    {
+        //i126305 TODO investigate on this case...
+    case ucb::LockDepth_MAKE_FIXED_SIZE:
+
+    case ucb::LockDepth_ZERO:
+        mDepthStr = "0";
+        break;
+    case ucb::LockDepth_ONE:
+            mDepthStr = "1";
+            break;
+    case ucb::LockDepth_INFINITY:
+            mDepthStr = "infinity";
+            break;
+    }
+
+    switch ( inLock.Scope )
+    {
+        //i126305 TODO investigate on this case...
+    case ucb::LockScope_MAKE_FIXED_SIZE:
+
+    case ucb::LockScope_EXCLUSIVE:
+        mLockScope = "<lockscope><exclusive/></lockscope>";
+        break;
+    case ucb::LockScope_SHARED:
+        mLockScope = "<lockscope><shared/></lockscope>";
+        break;
+    }
+}
+
+SerfLockReqProcImpl::~SerfLockReqProcImpl()
+{
+}
+
+#define LOCK_HEADER "<?xml version=\"1.0\" encoding=\"utf-8\"?><lockinfo xmlns=\"DAV:\">"
+#define LOCK_TYPE "<locktype><write/></locktype>"
+#define LOCK_TRAILER "</lockinfo>"
+
+serf_bucket_t * SerfLockReqProcImpl::createSerfRequestBucket( serf_request_t * inSerfRequest )
+{
+  //prepare body of request:
+    serf_bucket_alloc_t* pSerfBucketAlloc = serf_request_get_alloc( inSerfRequest );
+    serf_bucket_t* body_bkt = 0;
+    rtl::OString aBodyText;
+    {
+       rtl::OUStringBuffer aBuffer;
+        aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( LOCK_HEADER ));
+        aBuffer.appendAscii( mLockScope );
+        aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( LOCK_TYPE ));
+        aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( "<owner>" ));
+        rtl::OUString aStr;
+        mLock.Owner >>= aStr;
+        aBuffer.appendAscii( rtl::OUStringToOString( aStr, RTL_TEXTENCODING_UTF8 ).getStr() );
+        aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( "</owner>" ));
+        aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( LOCK_TRAILER ));
+        aBodyText = rtl::OUStringToOString( aBuffer.makeStringAndClear(), RTL_TEXTENCODING_UTF8 );
+        body_bkt = serf_bucket_simple_copy_create( aBodyText.getStr(),
+                                                   aBodyText.getLength(),
+                                                   pSerfBucketAlloc );
+    }
+
+    // create serf request
+    serf_bucket_t *req_bkt = serf_request_bucket_request_create( inSerfRequest,
+                                                                 "LOCK",
+                                                                 getPathStr(),
+                                                                 body_bkt,
+                                                                 pSerfBucketAlloc );
+    handleChunkedEncoding(req_bkt, aBodyText.getLength());
+
+    // set request header fields
+    serf_bucket_t* hdrs_bkt = serf_bucket_request_get_headers( req_bkt );
+    if (hdrs_bkt != NULL)
+    {
+        // general header fields provided by caller
+        setRequestHeaders( hdrs_bkt );
+
+        // request specific header fields
+        serf_bucket_headers_set( hdrs_bkt, "Timeout", mTimeout );
+        serf_bucket_headers_set( hdrs_bkt, "Depth", mDepthStr );
+        if (hdrs_bkt!=NULL && body_bkt != 0 && aBodyText.getLength() > 0 )
+        {
+            serf_bucket_headers_set( hdrs_bkt, "Content-Type", "application/xml" );
+        }
+    }
+    else
+    {
+        OSL_ASSERT("Headers Bucket missing");
+    }
+
+    return req_bkt;
+}
+
+void SerfLockReqProcImpl::processChunkOfResponseData( const char* data,
+                                                      apr_size_t len )
+{
+    if ( xInputStream.is() )
+    {
+        xInputStream->AddToStream( data, len );
+    }
+}
+
+void SerfLockReqProcImpl::handleEndOfResponseData( serf_bucket_t * /*inSerfResponseBucket*/ )
+{
+    const DAVPropertyValue rLocksValue( parseWebDAVLockResponse( xInputStream.get() ) );
+    *mLockObtained = rLocksValue;
+}
+
+} // namespace http_dav_ucp
diff --git a/ucb/source/ucp/webdav/SerfLockReqProcImpl.hxx b/ucb/source/ucp/webdav/SerfLockReqProcImpl.hxx
new file mode 100644
index 0000000..39d1fda
--- /dev/null
+++ b/ucb/source/ucp/webdav/SerfLockReqProcImpl.hxx
@@ -0,0 +1,74 @@
+/**************************************************************
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ *************************************************************/
+
+#ifndef INCLUDED_SERFLOCKREQPROCIMPL_HXX
+#define INCLUDED_SERFLOCKREQPROCIMPL_HXX
+
+#include "SerfTypes.hxx"
+#include "SerfRequestProcessorImpl.hxx"
+
+#include "SerfInputStream.hxx"
+
+#include <vector>
+#include <rtl/ustring.hxx>
+#include "SerfTypes.hxx"
+#include "DAVTypes.hxx"
+#include "DAVResource.hxx"
+
+namespace http_dav_ucp
+{
+
+    class SerfLockReqProcImpl : public SerfRequestProcessorImpl
+    {
+
+    protected:
+        std::vector< DAVResource > mpResources;
+        const ucb::Lock     mLock;
+        const char*         mDepthStr;
+        const char*         mLockScope;
+        const char*         mTimeout;
+        DAVPropertyValue*   mLockObtained;
+        com::sun::star::uno::Reference< SerfInputStream > xInputStream;
+
+    public:
+        SerfLockReqProcImpl( const char* inSourcePath,
+                             const DAVRequestHeaders& inRequestHeaders,
+                             const ucb::Lock& inLock,
+                             const char* inTimeout,
+                             DAVPropertyValue & outLock);
+
+        virtual ~SerfLockReqProcImpl();
+
+        virtual
+        serf_bucket_t * createSerfRequestBucket( serf_request_t * inSerfRequest );
+
+    protected:
+        virtual
+        void processChunkOfResponseData( const char* data, apr_size_t len );
+
+        virtual
+        void handleEndOfResponseData( serf_bucket_t * inSerfResponseBucket );
+
+    };
+
+} // namespace http_dav_ucp
+
+#endif // INCLUDED_SERFLOCKREQPROCIMPL_HXX
diff --git a/ucb/source/ucp/webdav/SerfUnlockProcImpl.cxx b/ucb/source/ucp/webdav/SerfUnlockProcImpl.cxx
new file mode 100644
index 0000000..bedb9ff
--- /dev/null
+++ b/ucb/source/ucp/webdav/SerfUnlockProcImpl.cxx
@@ -0,0 +1,92 @@
+/**************************************************************
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ *************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_ucb.hxx"
+
+#include "SerfTypes.hxx"
+#include "SerfUnlockProcImpl.hxx"
+#include "DAVProperties.hxx"
+
+#include "webdavresponseparser.hxx"
+#include <serf/serf.h>
+#include <rtl/ustrbuf.hxx>
+#include <apr/apr_strings.h>
+
+namespace http_dav_ucp
+{
+
+SerfUnlockProcImpl::SerfUnlockProcImpl( const char* inSourcePath,
+                                        const DAVRequestHeaders& inRequestHeaders,
+                                        const ucb::Lock& inLock,
+                                        const char* inLockToken )
+    : SerfRequestProcessorImpl( inSourcePath, inRequestHeaders )
+    , mLock( inLock )
+    , mpLockToken( inLockToken )
+    , xInputStream( new SerfInputStream() )
+{
+
+}
+
+SerfUnlockProcImpl::~SerfUnlockProcImpl()
+{
+}
+
+serf_bucket_t * SerfUnlockProcImpl::createSerfRequestBucket( serf_request_t * inSerfRequest )
+{
+    // create serf request
+    serf_bucket_t *req_bkt = serf_request_bucket_request_create( inSerfRequest,
+                                                                 "UNLOCK",
+                                                                 getPathStr(),
+                                                                 0,
+                                                                 serf_request_get_alloc( inSerfRequest ) );
+    // set request header fields
+    serf_bucket_t* hdrs_bkt = serf_bucket_request_get_headers( req_bkt );
+    if (hdrs_bkt != NULL)
+    {
+        // general header fields provided by caller
+        setRequestHeaders( hdrs_bkt );
+
+        // request specific header fields
+        serf_bucket_headers_set( hdrs_bkt, "Lock-Token", mpLockToken );
+    }
+    else
+    {
+        OSL_ASSERT("Headers Bucket missing");
+    }
+
+    return req_bkt;
+}
+
+void SerfUnlockProcImpl::processChunkOfResponseData( const char* data,
+                                                      apr_size_t len )
+{
+    if ( xInputStream.is() )
+    {
+        xInputStream->AddToStream( data, len );
+    }
+}
+
+void SerfUnlockProcImpl::handleEndOfResponseData( serf_bucket_t * /*inSerfResponseBucket*/ )
+{
+}
+
+} // namespace http_dav_ucp
diff --git a/ucb/source/ucp/webdav/SerfUnlockProcImpl.hxx b/ucb/source/ucp/webdav/SerfUnlockProcImpl.hxx
new file mode 100644
index 0000000..7816c99
--- /dev/null
+++ b/ucb/source/ucp/webdav/SerfUnlockProcImpl.hxx
@@ -0,0 +1,69 @@
+/**************************************************************
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ *************************************************************/
+
+#ifndef INCLUDED_SERFUNLOCKPROCIMPL_HXX
+#define INCLUDED_SERFUNLOCKPROCIMPL_HXX
+
+#include "SerfTypes.hxx"
+#include "SerfRequestProcessorImpl.hxx"
+
+#include "SerfInputStream.hxx"
+
+#include <vector>
+#include <rtl/ustring.hxx>
+#include "SerfTypes.hxx"
+#include "DAVTypes.hxx"
+#include "DAVResource.hxx"
+
+namespace http_dav_ucp
+{
+
+    class SerfUnlockProcImpl : public SerfRequestProcessorImpl
+    {
+
+    protected:
+        const ucb::Lock     mLock;
+        const char*         mpLockToken;
+        com::sun::star::uno::Reference< SerfInputStream > xInputStream;
+
+    public:
+        SerfUnlockProcImpl( const char* inSourcePath,
+                            const DAVRequestHeaders& inRequestHeaders,
+                            const ucb::Lock& inLock,
+                            const char* inLockToken );
+
+        virtual ~SerfUnlockProcImpl();
+
+        virtual
+        serf_bucket_t * createSerfRequestBucket( serf_request_t * inSerfRequest );
+
+    protected:
+        virtual
+        void processChunkOfResponseData( const char* data, apr_size_t len );
+
+        virtual
+        void handleEndOfResponseData( serf_bucket_t * inSerfResponseBucket );
+
+    };
+
+} // namespace http_dav_ucp
+
+#endif // INCLUDED_SERFUNLOCKPROCIMPL_HXX


More information about the Libreoffice-commits mailing list