[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