summaryrefslogtreecommitdiff
path: root/ucb/source/ucp/webdav/SerfLockReqProcImpl.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'ucb/source/ucp/webdav/SerfLockReqProcImpl.cxx')
-rw-r--r--ucb/source/ucp/webdav/SerfLockReqProcImpl.cxx39
1 files changed, 32 insertions, 7 deletions
diff --git a/ucb/source/ucp/webdav/SerfLockReqProcImpl.cxx b/ucb/source/ucp/webdav/SerfLockReqProcImpl.cxx
index 9e16212a2f8f..ff766effa108 100644
--- a/ucb/source/ucp/webdav/SerfLockReqProcImpl.cxx
+++ b/ucb/source/ucp/webdav/SerfLockReqProcImpl.cxx
@@ -32,10 +32,12 @@ namespace http_dav_ucp
SerfLockReqProcImpl::SerfLockReqProcImpl( const char* inPath,
const DAVRequestHeaders& inRequestHeaders,
SerfSession& rSession,
- const css::ucb::Lock & rLock )
+ const css::ucb::Lock& rLock,
+ sal_Int32* plastChanceToSendRefreshRequest )
: SerfRequestProcessorImpl( inPath, inRequestHeaders )
, m_rSession( rSession )
, m_aLock( rLock )
+ , m_plastChanceToSendRefreshRequest( plastChanceToSendRefreshRequest )
, m_xInputStream( new SerfInputStream() )
{
}
@@ -76,9 +78,12 @@ serf_bucket_t * SerfLockReqProcImpl::createSerfRequestBucket( serf_request_t * i
aBody.append("</lockinfo>\n");
const OString aBodyText(aBody.makeStringAndClear());
- serf_bucket_t* body_bkt = serf_bucket_simple_copy_create( aBodyText.getStr(),
- aBodyText.getLength(),
- pSerfBucketAlloc );
+ serf_bucket_t* body_bkt = 0;
+
+ if (!m_plastChanceToSendRefreshRequest)
+ 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,
@@ -86,7 +91,8 @@ serf_bucket_t * SerfLockReqProcImpl::createSerfRequestBucket( serf_request_t * i
getPathStr(),
body_bkt,
pSerfBucketAlloc );
- handleChunkedEncoding(req_bkt, aBodyText.getLength());
+ if (!m_plastChanceToSendRefreshRequest)
+ handleChunkedEncoding(req_bkt, aBodyText.getLength());
// set request header fields
serf_bucket_t* hdrs_bkt = serf_bucket_request_get_headers( req_bkt );
@@ -110,8 +116,18 @@ serf_bucket_t * SerfLockReqProcImpl::createSerfRequestBucket( serf_request_t * i
default:
throw DAVException( DAVException::DAV_INVALID_ARG );
}
- serf_bucket_headers_set( hdrs_bkt, "Depth", depth );
- serf_bucket_headers_set( hdrs_bkt, "Content-Type", "application/xml" );
+ if (!m_plastChanceToSendRefreshRequest)
+ {
+ serf_bucket_headers_set( hdrs_bkt, "Depth", depth );
+ serf_bucket_headers_set( hdrs_bkt, "Content-Type", "application/xml" );
+ }
+ else
+ {
+ const OString sToken( "(<" + OUStringToOString( apr_environment::AprEnv::getAprEnv()->
+ getSerfLockStore()->getLockToken( OUString::createFromAscii(getPathStr())),
+ RTL_TEXTENCODING_UTF8 ) + ">)" );
+ serf_bucket_headers_set( hdrs_bkt, "If", sToken.getStr() );
+ }
// Set the lock timeout
if (m_aLock.Timeout == -1)
@@ -121,6 +137,8 @@ serf_bucket_t * SerfLockReqProcImpl::createSerfRequestBucket( serf_request_t * i
const OString aTimeValue("Second-" + OString::number(m_aLock.Timeout));
serf_bucket_headers_set( hdrs_bkt, "Timeout", aTimeValue.getStr() );
}
+ else
+ serf_bucket_headers_set( hdrs_bkt, "Timeout", "Second-180" );
osl_getSystemTime( &m_aStartCall );
@@ -158,6 +176,13 @@ void SerfLockReqProcImpl::handleEndOfResponseData( serf_bucket_t * )
else
SAL_WARN("ucb.ucp.webdav", "No chance to refresh lock before timeout!" );
}
+ if (m_plastChanceToSendRefreshRequest)
+ {
+ *m_plastChanceToSendRefreshRequest = lastChanceToSendRefreshRequest;
+ assert(aLocks.size() == 1);
+ // We are just refreshing lock, do not add it into SerfLockStore
+ break;
+ }
apr_environment::AprEnv::getAprEnv()->getSerfLockStore()->addLock(
OUString::createFromAscii(getPathStr()),
aLocks[i].LockTokens[0],