ucb: webdav-curl: tdf#101094 (18) OPTIONS: Update OPTIONS cache lifetime if not found

[ ported from commit a5fc27e0575eab115de3714ae07fcac7481f4daf ]

Change-Id: I61d06051a4526676fc4ab80d653ab7c2a9e4c209
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/123470
Tested-by: Michael Stahl <michael.stahl@allotropia.de>
Reviewed-by: Michael Stahl <michael.stahl@allotropia.de>
diff --git a/ucb/source/ucp/webdav-curl/webdavcontent.cxx b/ucb/source/ucp/webdav-curl/webdavcontent.cxx
index 3f42acc..962d95f 100644
--- a/ucb/source/ucp/webdav-curl/webdavcontent.cxx
+++ b/ucb/source/ucp/webdav-curl/webdavcontent.cxx
@@ -2124,6 +2124,7 @@ uno::Any Content::open(
            if ( xDataSink.is() )
            {
                // PULL: wait for client read
                OUString aTargetURL =  m_xIdentifier->getContentIdentifier();
                try
                {
                    std::unique_ptr< DAVResourceAccess > xResAccess;
@@ -2163,6 +2164,21 @@ uno::Any Content::open(
                }
                catch ( DAVException const & 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 ) )
                        {
                            // get redirected url
                            aDAVOptions.setResourceFound( false );
                            aStaticDAVOptionsCache.addDAVOptions( aDAVOptions,
                                                                  m_nOptsCacheLifeNotFound );
                        }
                    }

                    cancelCommandExecution( e, xEnv );
                    // Unreachable
                }
@@ -3695,6 +3711,22 @@ Content::ResourceType Content::getResourceType(
                    *networkAccessAllowed = *networkAccessAllowed
                        && shouldAccessNetworkAfterException(e);
                }
                if ( e.getStatus() == SC_NOT_FOUND )
                {
                    // arrives here if OPTIONS is still cached for a resource previously available
                    // operate on the OPTIONS cache:
                    // if OPTIONS was not found, do nothing
                    // else OPTIONS returned on a resource not existent  (example a server that allows lock on null resource) set
                    // not found and adjust lifetime accordingly
                    DAVOptions aDAVOptionsInner;
                    if (aStaticDAVOptionsCache.getDAVOptions(rResAccess->getURL(), aDAVOptionsInner))
                    {
                        // get redirected url
                        aDAVOptionsInner.setResourceFound( false );
                        aStaticDAVOptionsCache.addDAVOptions( aDAVOptionsInner,
                                                              m_nOptsCacheLifeNotFound );
                    }
                }
                // if the two net events below happen, something
                // is going on to the connection so break the command flow
                if ( ( e.getError() == DAVException::DAV_HTTP_TIMEOUT ) ||