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 (...)