Increase WebDAV timeouts and declare body one-shot

As most output streams come from the system, we can't re-send them. So when okhttp wants to retry it tries to write to closed streams which will fail. We declare our outputstream writing as one-shot for this reason.
This commit is contained in:
Torsten Grote 2024-06-05 12:40:42 -03:00
parent af15b4afdf
commit e76ab1ca43
No known key found for this signature in database
GPG key ID: 3E5F77D92CF891FF

View file

@ -54,9 +54,9 @@ internal abstract class WebDavStorage(
.followRedirects(false) .followRedirects(false)
.authenticator(authHandler) .authenticator(authHandler)
.addNetworkInterceptor(authHandler) .addNetworkInterceptor(authHandler)
.connectTimeout(15, TimeUnit.SECONDS) .connectTimeout(30, TimeUnit.SECONDS)
.writeTimeout(30, TimeUnit.SECONDS) .writeTimeout(60, TimeUnit.SECONDS)
.readTimeout(120, TimeUnit.SECONDS) .readTimeout(240, TimeUnit.SECONDS)
.pingInterval(45, TimeUnit.SECONDS) .pingInterval(45, TimeUnit.SECONDS)
.connectionSpecs(listOf(ConnectionSpec.MODERN_TLS)) .connectionSpecs(listOf(ConnectionSpec.MODERN_TLS))
.retryOnConnectionFailure(true) .retryOnConnectionFailure(true)
@ -73,6 +73,7 @@ internal abstract class WebDavStorage(
val pipedOutputStream = PipedCloseActionOutputStream(pipedInputStream) val pipedOutputStream = PipedCloseActionOutputStream(pipedInputStream)
val body = object : RequestBody() { val body = object : RequestBody() {
override fun isOneShot(): Boolean = true
override fun contentType() = "application/octet-stream".toMediaType() override fun contentType() = "application/octet-stream".toMediaType()
override fun writeTo(sink: BufferedSink) { override fun writeTo(sink: BufferedSink) {
pipedInputStream.use { inputStream -> pipedInputStream.use { inputStream ->