office-gobmx/ucb
Jean-Louis Fuchs 58b84caca8 tdf#132460 Fix feedback-loop during WebDAV lock refresh
Prevent a feedback-loop, where LibreOffice would request a shorter timeout on
each refresh.

WebDAV servers do not return the lock-timeout the lock was set up with; they
have to return the remaining time. There are WebDAV servers that return a lower
timeout. Two examples [2] [3]. Other servers probably reuse the same timestamp
for the whole request and are therefore not subject to that problem. (This might
even be incorrect if the request takes very long.)

Updating the lock-timeout with the value returned by the server decreases the
timeout until it reaches zero.

LibreOffice request               SERVER response
LOCK(180)         ->              LOCK(60)
LOCK(60)          ->              LOCK(59)
LOCK(59)          ->              LOCK(58)
...
0: no LOCK header ->              FAIL

If we do not update the timeout in NeonSession::LOCK() only the initial setup
updates the timeout.

LibreOffice request               SERVER response
LOCK(180)        ->               LOCK(60)
LOCK(60)         ->               LOCK(59)
LOCK(60)         ->               LOCK(59)
...

It is essential that lastChanceToSendRefreshRequest uses the timeout returned by
the server; after it calculated the deadline, we reset the timeout.

The maintainer of neon confirmed that the timeout should stay the same after the
initial setup. [4].

[1] https://tools.ietf.org/html/rfc4918#section-6.6
[2] https://www.alfresco.com/
[3] https://github.com/mar10/wsgidav
[4] https://github.com/notroj/neon/issues/12

Change-Id: Ie76338f7a88f41f47569a62ea6efec8c6f646f50
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/92981
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
2020-04-29 08:07:35 +02:00
..
qa
source tdf#132460 Fix feedback-loop during WebDAV lock refresh 2020-04-29 08:07:35 +02:00
test/com/sun/star/comp/ucb
CppunitTest_ucb_webdav_local_neon.mk
CppunitTest_ucb_webdav_neon_opts.mk
CppunitTest_ucb_webdav_propfindcache.mk
CppunitTest_ucb_webdav_res_access.mk
IwyuFilter_ucb.yaml
JunitTest_ucb_complex.mk
JunitTest_ucb_unoapi.mk
Library_cached1.mk
Library_srtrs1.mk
Library_ucb1.mk
Library_ucpcmis1.mk
Library_ucpdav1.mk
Library_ucpexpand1.mk
Library_ucpext.mk
Library_ucpfile1.mk
Library_ucpftp1.mk
Library_ucpgio1.mk
Library_ucphier1.mk
Library_ucpimage.mk
Library_ucppkg1.mk
Library_ucptdoc1.mk
Makefile
Module_ucb.mk
README

Universal Content Broker (has ucp) which do things like convert files to strings in content broker world.

mmeeks: so - I renamed the old LGPLv3 webdav code to webdav-neon, and imported
the (not built) serf webdav ucp into the old space. so that in future, we can
merge changes more easily - and still choose which to use. cbosdonnat kindly
volunteered to do some comparative analysis of the two codebases to decide which
is best for what etc.