[Libreoffice-commits] core.git: ucb/source
Giuseppe Castagno
giuseppe.castagno at acca-esse.eu
Sat Jul 30 16:34:17 UTC 2016
ucb/source/ucp/webdav-neon/webdavcontent.cxx | 41 +++++++++++++++++++++++++++
1 file changed, 41 insertions(+)
New commits:
commit 0acd13ec38fad1a63b86d2428299e469227a9069
Author: Giuseppe Castagno <giuseppe.castagno at acca-esse.eu>
Date: Sat Jul 30 15:53:27 2016 +0200
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 at libreoffice.org>
Reviewed-by: Giuseppe Castagno <giuseppe.castagno at acca-esse.eu>
diff --git a/ucb/source/ucp/webdav-neon/webdavcontent.cxx b/ucb/source/ucp/webdav-neon/webdavcontent.cxx
index 902bc76..42e3335 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 );
More information about the Libreoffice-commits
mailing list