tdf#148426 ucb: webdav-curl: fall-back to GET if OPTIONS status 500
commit5459e6ef2554005ec045b76195ef1ba813a2dd34
authorMichael Stahl <michael.stahl@allotropia.de>
Mon, 2 May 2022 14:44:31 +0000 (2 16:44 +0200)
committerAdolfo Jayme Barrientos <fitojb@ubuntu.com>
Wed, 4 May 2022 14:34:39 +0000 (4 16:34 +0200)
tree4d47fe3febc4f4d8592288068f6104721beb4223
parentea7f625a83d9d9772c2bea2d52e0ed5f8622b6b6
tdf#148426 ucb: webdav-curl: fall-back to GET if OPTIONS status 500

With the ndr.de server, OPTIONS on an image URL results in a status 500
Internal Server Error and an unexpected closed connection:

16.591:info:ucb.ucp.webdav.curl:1634132:1634170:ucb/source/ucp/webdav-curl/CurlSession.cxx:285: debug log: 0x7f9c94004988: transfer closed with 222 bytes remaining to read

Apparently Neon always reported the closed connection problem with a
string:
"Could not read response body: connection was closed by server"

The HTTP status code is extracted in makeStatusCode() and the string
doesn't contain it, so the status is reported as 0 up the stack.

With curl, it can apparently happen that either CURLE_PARTIAL_FILE is
returned, in which case the status is ignored and reported as 0,
or CURLE_OK is returned and the status 500 is reported up the stack.

Adapt the handling in Content::open() to fall back to GET in case of a
500 status.

Change-Id: I5f3dce7f67ce25c87bf3882c89e7ff2d386bcbad
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133707
Tested-by: Jenkins
Tested-by: Gabor Kelemen <kelemeng@ubuntu.com>
Reviewed-by: Michael Stahl <michael.stahl@allotropia.de>
(cherry picked from commit 5801b887629dbd784116ec6878b61bb99e991647)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133723
Reviewed-by: Adolfo Jayme Barrientos <fitojb@ubuntu.com>
ucb/source/ucp/webdav-curl/webdavcontent.cxx