diff options
author | Giuseppe Castagno <giuseppe.castagno@acca-esse.eu> | 2016-07-30 15:53:27 +0200 |
---|---|---|
committer | Giuseppe Castagno <giuseppe.castagno@acca-esse.eu> | 2016-07-30 16:33:46 +0000 |
commit | 0acd13ec38fad1a63b86d2428299e469227a9069 (patch) | |
tree | 100e30ffb5940ec06b706925955ce5b3d30c865f /ucb | |
parent | b6a698b093f78dc90836d502db3d0276f335fbfe (diff) |
tdf#101094 (20) OPTIONS: Add mechanism to manage not found Web URL: HEAD
Change-Id: Ia941cfb68924140c3ab171d4ed2c4e8675947ca3
Reviewed-on: https://gerrit.libreoffice.org/27724
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Giuseppe Castagno <giuseppe.castagno@acca-esse.eu>
Diffstat (limited to 'ucb')
-rw-r--r-- | ucb/source/ucp/webdav-neon/webdavcontent.cxx | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/ucb/source/ucp/webdav-neon/webdavcontent.cxx b/ucb/source/ucp/webdav-neon/webdavcontent.cxx index 902bc7671cf2..42e3335b02d6 100644 --- a/ucb/source/ucp/webdav-neon/webdavcontent.cxx +++ b/ucb/source/ucp/webdav-neon/webdavcontent.cxx @@ -1287,12 +1287,39 @@ uno::Reference< sdbc::XRow > Content::getPropertyValues( // Obtain values from server... + // save original target URL (not redirected) + OUString aTargetURL( xResAccess->getURL() ); // First, identify whether resource is DAV or not bool bNetworkAccessAllowed = true; ResourceType eType = getResourceType( xEnv, xResAccess, &bNetworkAccessAllowed ); + // check if the resource was not found in a former try + // the result is cached for a time of 'OptsCacheLifeNotFound' seconds, + // normally a short time + if ( !aStaticDAVOptionsCache.isResourceFound( aTargetURL ) ) + { + // file was not found during a previous access + // return exception as if the resource was not found + SAL_WARN( "ucb.ucp.webdav", " URL <" << aTargetURL << "> was not found prevoiusly (was cached)" ); + uno::Sequence< uno::Any > aArgs( 1 ); + aArgs[ 0 ] <<= beans::PropertyValue( + OUString("Uri"), -1, + uno::makeAny(aTargetURL), + beans::PropertyState_DIRECT_VALUE); + + ucbhelper::cancelCommandExecution( + uno::makeAny( + ucb::InteractiveAugmentedIOException( + OUString("Not found!"), + static_cast< cppu::OWeakObject * >( this ), + task::InteractionClassification_ERROR, + ucb::IOErrorCode_NOT_EXISTING, + aArgs ) ), + xEnv ); + } + if ( eType == DAV ) { // cache lookup... getResourceType may fill the props cache via @@ -1483,6 +1510,20 @@ uno::Reference< sdbc::XRow > Content::getPropertyValues( bNetworkAccessAllowed = shouldAccessNetworkAfterException( e ); + // check if error is SC_NOT_FOUND + // if URL resource not found, set the corresponding resource + // element in option cache and update the cache lifetime accordingly + if( e.getStatus() == SC_NOT_FOUND ) + { + DAVOptions aDAVOptions; + if( aStaticDAVOptionsCache.getDAVOptions( aTargetURL, aDAVOptions ) ) + { + aDAVOptions.setResourceFound( false ); + aStaticDAVOptionsCache.addDAVOptions( aDAVOptions, + m_nOptsCacheLifeNotFound ); + } + } + if ( !bNetworkAccessAllowed ) { cancelCommandExecution( e, xEnv ); |