[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