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.cxx24
1 files changed, 23 insertions, 1 deletions
diff --git a/ucb/source/ucp/webdav/SerfLockReqProcImpl.cxx b/ucb/source/ucp/webdav/SerfLockReqProcImpl.cxx
index 667583dbf661..9e16212a2f8f 100644
--- a/ucb/source/ucp/webdav/SerfLockReqProcImpl.cxx
+++ b/ucb/source/ucp/webdav/SerfLockReqProcImpl.cxx
@@ -18,6 +18,9 @@
*/
#include "SerfLockReqProcImpl.hxx"
+
+#include "AprEnv.hxx"
+#include "SerfSession.hxx"
#include "DAVException.hxx"
#include "webdavresponseparser.hxx"
@@ -28,8 +31,10 @@ namespace http_dav_ucp
SerfLockReqProcImpl::SerfLockReqProcImpl( const char* inPath,
const DAVRequestHeaders& inRequestHeaders,
+ SerfSession& rSession,
const css::ucb::Lock & rLock )
: SerfRequestProcessorImpl( inPath, inRequestHeaders )
+ , m_rSession( rSession )
, m_aLock( rLock )
, m_xInputStream( new SerfInputStream() )
{
@@ -139,7 +144,24 @@ void SerfLockReqProcImpl::handleEndOfResponseData( serf_bucket_t * )
{
for (size_t i = 0; i < aLocks.size(); ++i)
{
- // m_pSerfLockStore->addLock( aLocks[i], m_pSerfSession, m_aStartCall );
+ sal_Int64 timeout = aLocks[i].Timeout;
+ TimeValue aEnd;
+ osl_getSystemTime( &aEnd );
+ // Try to estimate a safe absolute time for sending the
+ // lock refresh request.
+ sal_Int32 lastChanceToSendRefreshRequest = -1;
+ if ( timeout != -1 )
+ {
+ sal_Int32 calltime = aEnd.Seconds - m_aStartCall.Seconds;
+ if ( calltime <= timeout )
+ lastChanceToSendRefreshRequest = aEnd.Seconds + timeout - calltime;
+ else
+ SAL_WARN("ucb.ucp.webdav", "No chance to refresh lock before timeout!" );
+ }
+ apr_environment::AprEnv::getAprEnv()->getSerfLockStore()->addLock(
+ OUString::createFromAscii(getPathStr()),
+ aLocks[i].LockTokens[0],
+ &m_rSession, lastChanceToSendRefreshRequest );
SAL_INFO("ucb.ucp.webdav", "SerfSession::LOCK: created lock for "
<< getPathStr() << ". token: " << aLocks[i].LockTokens[0]);
}