1
0
mirror of https://github.com/square/okhttp.git synced 2026-01-17 08:42:25 +03:00
Tobias Thierer 92bf655259 HUC regression test: disconnect in the middle of connecting.
Prior to commit 084b06b48b (OkHttp 3.4.0),
a HttpURLConnection.disconnect() in the middle of connecting caused an
infinite loop. HUC does not claim to be thread safe, but concurrent
disconnect should generally be supported (it is supported by HttpEngine)
and this bug occurred even when the disconnect() happened in the same
thread, e.g. through the CookieJar.

The infinite loop prior to that CL occurred because
 - The loop in HttpURLConnectionImpl.java:418 did not check for the
   disconnected state,
 - {StreamAllocation,RetryAndFollowUpInterceptor}.recover() returns
   true for canceled StreamAllocations/calls, but
   StreamAllocation.newStream() immediately fails if already canceled.

This bug was specific to HUC and did not affect the Call API because
RetryAndFollowUpInterceptor's (and, in earlier OkHttp versions,
Call.getResponse()'s) infinite loop did check the canceled case
before proceeding.

The bug existed since at least OkHttp 2.7.5, likely introduced by
commit c358656c87 (OkHttp 2.7.0).

The new test asserts that a disconnect() while constructing the
cookie headers leads to the new connection being aborted. It would
also be permissible for the connection to succeed (as long as it
doesn't deadlock like it used to), but the stricter test seems
reasonable to ensure that any behavior change is deliberate.
A disconnect() while accessing the Cache FileSystem has the same
effect, but this is not covered by the added test because a
new FileSystem wrapper class that delegates all calls would
create code maintenance overhead.
2017-01-27 18:16:56 +00:00
2016-02-21 11:52:34 -05:00
2014-07-06 10:34:22 -07:00
2016-11-30 23:20:20 -05:00
2015-10-26 17:24:59 -04:00
2012-07-23 10:02:28 -04:00
2017-01-20 12:27:41 -08:00
2017-01-07 21:40:17 -05:00

OkHttp

An HTTP & HTTP/2 client for Android and Java applications. For more information see the website and the wiki.

Download

Download the latest JAR or grab via Maven:

<dependency>
  <groupId>com.squareup.okhttp3</groupId>
  <artifactId>okhttp</artifactId>
  <version>3.5.0</version>
</dependency>

or Gradle:

compile 'com.squareup.okhttp3:okhttp:3.5.0'

Snapshots of the development version are available in Sonatype's snapshots repository.

MockWebServer

A library for testing HTTP, HTTPS, and HTTP/2 clients.

MockWebServer coupling with OkHttp is essential for proper testing of HTTP/2 so that code can be shared.

Download

Download the latest JAR or grab via Maven:

<dependency>
  <groupId>com.squareup.okhttp3</groupId>
  <artifactId>mockwebserver</artifactId>
  <version>3.5.0</version>
  <scope>test</scope>
</dependency>

or Gradle:

testCompile 'com.squareup.okhttp3:mockwebserver:3.5.0'

ProGuard

If you are using ProGuard you might need to add the following option:

-dontwarn okhttp3.**

License

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Description
No description provided
Readme 128 MiB
Languages
Kotlin 99.3%
Java 0.6%