ucb/source/ucp/webdav-curl/DAVResourceAccess.cxx |   21 ++++++++++-----------
 ucb/source/ucp/webdav-curl/DAVResourceAccess.hxx |   11 ++++++-----
 ucb/source/ucp/webdav-curl/webdavcontent.cxx     |   15 ++++++---------
 3 files changed, 22 insertions(+), 25 deletions(-)

New commits:
commit acc8ba867692c4ab426daed5414f1e9fdd90ba4a
Author:     Giuseppe Castagno <giuseppe.casta...@acca-esse.eu>
AuthorDate: Mon Oct 3 16:20:43 2016 +0200
Commit:     Michael Stahl <michael.st...@allotropia.de>
CommitDate: Mon Nov 1 18:50:31 2021 +0100

    ucb: webdav-curl: tdf#101094 (36): Fix behaviour of GET in fetching Headers 
only
    
    Implement a better way to GET only headers, as HEAD method
    substitute.
    
    Wrote a new version of GET, specifically for 'no payload' service
    because sometimes neon was returning an internal error about:
    'Compressed response was truncated' but without a specific error
    state.
    
    [ port of commit f7697a633cd56003fcb1d86bee7eb658020af506
      - omit the actual change in NeonSession because it's not obvious
        if it is needed/was a neon-specific problem ]
    
    Change-Id: Ic6afe37d0e010745091301fd9647fc1b3b9e378d
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/123495
    Tested-by: Michael Stahl <michael.st...@allotropia.de>
    Reviewed-by: Michael Stahl <michael.st...@allotropia.de>

diff --git a/ucb/source/ucp/webdav-curl/DAVResourceAccess.cxx 
b/ucb/source/ucp/webdav-curl/DAVResourceAccess.cxx
index e76e6ae9d1fa..291f0d580b8d 100644
--- a/ucb/source/ucp/webdav-curl/DAVResourceAccess.cxx
+++ b/ucb/source/ucp/webdav-curl/DAVResourceAccess.cxx
@@ -483,7 +483,8 @@ uno::Reference< io::XInputStream > DAVResourceAccess::GET(
 }
 
 
-uno::Reference< io::XInputStream > DAVResourceAccess::GET(
+// used as HEAD substitute when HEAD is not implemented on server
+void DAVResourceAccess::GET0(
     DAVRequestHeaders &rRequestHeaders,
     const std::vector< OUString > & rHeaderNames,
     DAVResource & rResource,
@@ -504,14 +505,14 @@ uno::Reference< io::XInputStream > DAVResourceAccess::GET(
                                    ucb::WebDAVHTTPMethod_GET,
                                    rRequestHeaders );
 
-            xStream = m_xSession->GET( getRequestURI(),
-                                       rHeaderNames,
-                                       rResource,
-                                       DAVRequestEnvironment(
-                                           getRequestURI(),
-                                           new DAVAuthListener_Impl(
-                                               xEnv, m_aURL ),
-                                           rRequestHeaders, xEnv ) );
+            m_xSession->GET( getRequestURI(),
+                              rHeaderNames,
+                              rResource,
+                              DAVRequestEnvironment(
+                                  getRequestURI(),
+                                  new DAVAuthListener_Impl(
+                                      xEnv, m_aURL ),
+                                  rRequestHeaders, xEnv ) );
         }
         catch (DAVException const& e)
         {
@@ -522,8 +523,6 @@ uno::Reference< io::XInputStream > DAVResourceAccess::GET(
         }
     }
     while ( bRetry );
-
-    return xStream;
 }
 
 
diff --git a/ucb/source/ucp/webdav-curl/DAVResourceAccess.hxx 
b/ucb/source/ucp/webdav-curl/DAVResourceAccess.hxx
index 613953173dbf..1abde0fe2d8e 100644
--- a/ucb/source/ucp/webdav-curl/DAVResourceAccess.hxx
+++ b/ucb/source/ucp/webdav-curl/DAVResourceAccess.hxx
@@ -125,12 +125,13 @@ public:
          DAVResource & rResource,
          const css::uno::Reference< css::ucb::XCommandEnvironment > & xEnv );
 
+    /// used as HEAD substitute when HEAD is not implemented on server
     /// @throws DAVException
-    css::uno::Reference< css::io::XInputStream >
-    GET( DAVRequestHeaders & rRequestHeaders,
-         const std::vector< OUString > & rHeaderNames, // empty == 'all'
-         DAVResource & rResource,
-         const css::uno::Reference< css::ucb::XCommandEnvironment > & xEnv );
+    void
+    GET0( DAVRequestHeaders & rRequestHeaders,
+          const std::vector< OUString > & rHeaderNames, // empty == 'all'
+          DAVResource & rResource,
+          const css::uno::Reference< css::ucb::XCommandEnvironment > & xEnv );
 
     /// @throws DAVException
     void
diff --git a/ucb/source/ucp/webdav-curl/webdavcontent.cxx 
b/ucb/source/ucp/webdav-curl/webdavcontent.cxx
index d421d9ade8b1..4698f7078166 100644
--- a/ucb/source/ucp/webdav-curl/webdavcontent.cxx
+++ b/ucb/source/ucp/webdav-curl/webdavcontent.cxx
@@ -115,10 +115,7 @@ void lcl_sendPartialGETRequest( bool &bError,
     }
     try
     {
-        uno::Reference< io::XInputStream > xIn = xResAccess->GET( aPartialGet,
-                                                                  aHeaderNames,
-                                                                  aResource,
-                                                                  xEnv );
+        xResAccess->GET0( aPartialGet, aHeaderNames, aResource, xEnv );
         bError = false;
 
         if ( bIsRequestSize )
@@ -1462,7 +1459,7 @@ uno::Reference< sdbc::XRow > Content::getPropertyValues(
                         removeCachedPropertyNames( xResAccess->getURL() );
                         // test if HEAD allowed, if not, throw, will be 
catched immediately
                         if ( !aStaticDAVOptionsCache.isHeadAllowed( 
xResAccess->getURL() ) )
-                            throw DAVException( DAVException::DAV_HTTP_ERROR, 
"405 Not Implemented" );
+                            throw DAVException( DAVException::DAV_HTTP_ERROR, 
"405 Not Implemented", 405 );
 
                         xResAccess->HEAD( aHeaderNames, resource, xEnv );
                         m_bDidGetOrHead = true;
@@ -4056,10 +4053,10 @@ bool Content::isResourceAvailable( const 
css::uno::Reference< css::ucb::XCommand
                         OUString( "Range" ),
                         OUString( "bytes=0-0" )));
 
-                rResAccess->GET( aPartialGet,
-                                 aHeaderNames,
-                                 aResource,
-                                 xEnv );
+                rResAccess->GET0( aPartialGet,
+                                  aHeaderNames,
+                                  aResource,
+                                  xEnv );
                 return true;
             }
             catch (...)

Reply via email to