mirror of
https://github.com/square/okhttp.git
synced 2026-01-17 08:42:25 +03:00
92bf6552593d8d18853da203331b30992d79f82b
Prior to commit084b06b48b(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 commitc358656c87(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.
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
Languages
Kotlin
99.3%
Java
0.6%