summaryrefslogtreecommitdiff
path: root/ucb/source/ucp/webdav/DAVResourceAccess.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'ucb/source/ucp/webdav/DAVResourceAccess.cxx')
-rw-r--r--ucb/source/ucp/webdav/DAVResourceAccess.cxx177
1 files changed, 143 insertions, 34 deletions
diff --git a/ucb/source/ucp/webdav/DAVResourceAccess.cxx b/ucb/source/ucp/webdav/DAVResourceAccess.cxx
index 140b3dd3af94..00b42e24a5d9 100644
--- a/ucb/source/ucp/webdav/DAVResourceAccess.cxx
+++ b/ucb/source/ucp/webdav/DAVResourceAccess.cxx
@@ -67,6 +67,7 @@ int DAVAuthListener_Impl::authenticate(
{
uno::Reference< task::XInteractionHandler > xIH
= m_xEnv->getInteractionHandler();
+
if ( xIH.is() )
{
// #102871# - Supply username and password from previous try.
@@ -78,14 +79,10 @@ int DAVAuthListener_Impl::authenticate(
outPassWord = m_aPrevPassword;
rtl::Reference< ucbhelper::SimpleAuthenticationRequest > xRequest
- = new ucbhelper::SimpleAuthenticationRequest( m_aURL,
- inHostName,
- inRealm,
- inoutUserName,
- outPassWord,
- ::rtl::OUString(),
- bAllowPersistentStoring,
- bCanUseSystemCredentials );
+ = new ucbhelper::SimpleAuthenticationRequest(
+ m_aURL, inHostName, inRealm, inoutUserName,
+ outPassWord, ::rtl::OUString(),
+ bAllowPersistentStoring, bCanUseSystemCredentials );
xIH->handle( xRequest.get() );
rtl::Reference< ucbhelper::InteractionContinuation > xSelection
@@ -105,7 +102,8 @@ int DAVAuthListener_Impl::authenticate(
sal_Bool bUseSystemCredentials = sal_False;
if ( bCanUseSystemCredentials )
- bUseSystemCredentials = xSupp->getUseSystemCredentials();
+ bUseSystemCredentials
+ = xSupp->getUseSystemCredentials();
if ( bUseSystemCredentials )
{
@@ -178,6 +176,7 @@ DAVResourceAccess & DAVResourceAccess::operator=(
return *this;
}
+#if 0 // currently not used, but please don't remove code
//=========================================================================
void DAVResourceAccess::OPTIONS(
DAVCapabilities & rCapabilities,
@@ -217,6 +216,7 @@ void DAVResourceAccess::OPTIONS(
}
while ( bRetry );
}
+#endif
//=========================================================================
void DAVResourceAccess::PROPFIND(
@@ -353,6 +353,7 @@ void DAVResourceAccess::HEAD(
throw( DAVException )
{
initialize();
+
int errorCount = 0;
bool bRetry;
do
@@ -409,7 +410,8 @@ uno::Reference< io::XInputStream > DAVResourceAccess::GET(
xStream = m_xSession->GET( getRequestURI(),
DAVRequestEnvironment(
getRequestURI(),
- new DAVAuthListener_Impl( xEnv, m_aURL ),
+ new DAVAuthListener_Impl(
+ xEnv, m_aURL ),
aHeaders, xEnv ) );
}
catch ( DAVException & e )
@@ -492,7 +494,8 @@ uno::Reference< io::XInputStream > DAVResourceAccess::GET(
rResource,
DAVRequestEnvironment(
getRequestURI(),
- new DAVAuthListener_Impl( xEnv, m_aURL ),
+ new DAVAuthListener_Impl(
+ xEnv, m_aURL ),
aHeaders, xEnv ) );
}
catch ( DAVException & e )
@@ -552,13 +555,15 @@ void DAVResourceAccess::GET(
}
//=========================================================================
-void DAVResourceAccess::ABORT()
+void DAVResourceAccess::abort()
throw( DAVException )
{
- // 17.11.09 (tkr): abort currently disabled caused by issue i106766
- // initialize();
- // m_xSession->ABORT();
+ // 17.11.09 (tkr): abort currently disabled caused by issue i106766
+ // initialize();
+ // m_xSession->abort();
+ OSL_TRACE( "Not implemented. -> #i106766#" );
}
+
//=========================================================================
namespace {
@@ -674,7 +679,8 @@ uno::Reference< io::XInputStream > DAVResourceAccess::POST(
xSeekableStream,
DAVRequestEnvironment(
getRequestURI(),
- new DAVAuthListener_Impl( xEnv, m_aURL ),
+ new DAVAuthListener_Impl(
+ xEnv, m_aURL ),
aHeaders, xEnv ) );
}
catch ( DAVException & e )
@@ -697,7 +703,6 @@ uno::Reference< io::XInputStream > DAVResourceAccess::POST(
}
//=========================================================================
-
void DAVResourceAccess::POST(
const rtl::OUString & rContentType,
const rtl::OUString & rReferer,
@@ -765,6 +770,7 @@ void DAVResourceAccess::MKCOL(
throw( DAVException )
{
initialize();
+
int errorCount = 0;
bool bRetry;
do
@@ -804,6 +810,7 @@ void DAVResourceAccess::COPY(
throw( DAVException )
{
initialize();
+
int errorCount = 0;
bool bRetry;
do
@@ -845,6 +852,7 @@ void DAVResourceAccess::MOVE(
throw( DAVException )
{
initialize();
+
int errorCount = 0;
bool bRetry;
do
@@ -916,23 +924,124 @@ void DAVResourceAccess::DESTROY(
}
//=========================================================================
-void DAVResourceAccess::LOCK (
- const ucb::Lock & /*rLock*/,
- const uno::Reference< ucb::XCommandEnvironment > & /*xEnv*/ )
- throw( DAVException )
+// set new lock.
+void DAVResourceAccess::LOCK(
+ ucb::Lock & inLock,
+ const uno::Reference< ucb::XCommandEnvironment > & xEnv )
+ throw ( DAVException )
{
-// initialize();
- OSL_ENSURE( sal_False, "DAVResourceAccess::LOCK - NYI" );
+ initialize();
+
+ int errorCount = 0;
+ bool bRetry;
+ do
+ {
+ bRetry = false;
+ try
+ {
+ DAVRequestHeaders aHeaders;
+ getUserRequestHeaders( xEnv,
+ getRequestURI(),
+ rtl::OUString::createFromAscii( "LOCK" ),
+ aHeaders );
+
+ m_xSession->LOCK( getRequestURI(),
+ inLock,
+ DAVRequestEnvironment(
+ getRequestURI(),
+ new DAVAuthListener_Impl( xEnv, m_aURL ),
+ aHeaders, xEnv ) );
+ }
+ catch ( DAVException & e )
+ {
+ errorCount++;
+ bRetry = handleException( e, errorCount );
+ if ( !bRetry )
+ throw;
+ }
+ }
+ while ( bRetry );
}
//=========================================================================
-void DAVResourceAccess::UNLOCK (
- const ucb::Lock & /*rLock*/,
- const uno::Reference< ucb::XCommandEnvironment > & /*xEnv*/ )
- throw( DAVException )
+// refresh existing lock.
+sal_Int64 DAVResourceAccess::LOCK(
+ sal_Int64 nTimeout,
+ const uno::Reference< ucb::XCommandEnvironment > & xEnv )
+ throw ( DAVException )
+{
+ initialize();
+
+ sal_Int64 nNewTimeout = 0;
+ int errorCount = 0;
+ bool bRetry;
+ do
+ {
+ bRetry = false;
+ try
+ {
+ DAVRequestHeaders aHeaders;
+ getUserRequestHeaders( xEnv,
+ getRequestURI(),
+ rtl::OUString::createFromAscii( "LOCK" ),
+ aHeaders );
+
+ nNewTimeout = m_xSession->LOCK( getRequestURI(),
+ nTimeout,
+ DAVRequestEnvironment(
+ getRequestURI(),
+ new DAVAuthListener_Impl(
+ xEnv, m_aURL ),
+ aHeaders, xEnv ) );
+ }
+ catch ( DAVException & e )
+ {
+ errorCount++;
+ bRetry = handleException( e, errorCount );
+ if ( !bRetry )
+ throw;
+ }
+ }
+ while ( bRetry );
+
+ return nNewTimeout;
+}
+
+//=========================================================================
+void DAVResourceAccess::UNLOCK(
+ const uno::Reference< ucb::XCommandEnvironment > & xEnv )
+ throw ( DAVException )
{
-// initialize();
- OSL_ENSURE( sal_False, "DAVResourceAccess::UNLOCK - NYI" );
+ initialize();
+
+ int errorCount = 0;
+ bool bRetry;
+ do
+ {
+ bRetry = false;
+ try
+ {
+ DAVRequestHeaders aHeaders;
+ getUserRequestHeaders( xEnv,
+ getRequestURI(),
+ rtl::OUString::createFromAscii( "UNLOCK" ),
+ aHeaders );
+
+ m_xSession->UNLOCK( getRequestURI(),
+ DAVRequestEnvironment(
+ getRequestURI(),
+ new DAVAuthListener_Impl( xEnv, m_aURL ),
+ aHeaders, xEnv ) );
+ }
+ catch ( DAVException & e )
+ {
+ errorCount++;
+ bRetry = handleException( e, errorCount );
+ if ( !bRetry )
+ throw;
+ }
+ }
+ while ( bRetry );
}
//=========================================================================
@@ -1029,9 +1138,8 @@ void DAVResourceAccess::getUserRequestHeaders(
"Value is not a string! Ignoring..." );
}
- rRequestHeaders.push_back( DAVRequestHeader(
- aRequestHeaders[ n ].Name,
- aValue ) );
+ rRequestHeaders.push_back(
+ DAVRequestHeader( aRequestHeaders[ n ].Name, aValue ) );
}
}
}
@@ -1075,7 +1183,6 @@ void DAVResourceAccess::resetUri()
}
}
-
//=========================================================================
sal_Bool DAVResourceAccess::handleException( DAVException & e, int errorCount )
throw ( DAVException )
@@ -1095,7 +1202,9 @@ sal_Bool DAVResourceAccess::handleException( DAVException & e, int errorCount )
// if we have a bad connection try again. Up to three times.
case DAVException::DAV_HTTP_ERROR:
// retry up to three times, if not a client-side error.
- if ( ( e.getStatus() < 400 || e.getStatus() > 499 ) && errorCount < 3)
+ if ( e.getStatus() > 0 &&
+ ( e.getStatus() < 400 || e.getStatus() > 499 ) &&
+ errorCount < 3 )
{
return sal_True;
}