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 <[email protected]> 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 _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
