Writing this change has led me to believe that the concurrency here is just plain awful, and I need to find a better solution than what I have. In particular, there are too many threads: - the internal reader thread - application reader threads - application writer threads And too many locks: - the SpdyWriter I/O write lock - the SpdyConnection internal state lock - each SpdyStream's internal state lock What's currently very wrong is the internal reader thread is updating state in the SpdyStream, and reading bytes from the network into a particular stream. It is an error to hold the SpdyStream's lock while reading, but we're doing it because we need to hold the state on the buffer, position and limit. We need to rethink this! Chrome doesn't run into this problem because it can 'fire and forget' events. We can't do that because SPDY writes need to throw IOExceptions if the writes fail.
OkHttp
An HTTP+SPDY client for Android and Java applications.
Download
Downloadable .jars can be found on the GitHub download page.
You can also depend on the .jar through Maven:
<dependency>
<groupId>com.squareup</groupId>
<artifactId>okhttp</artifactId>
<version>(insert latest version)</version>
</dependency>
Known Issues
The SPDY implementation is incomplete:
- Settings frames are not honored. Flow control is not implemented.
- It assumes a well-behaved peer. If the peer sends an invalid frame, OkHttp's SPDY client will not respond with the required
RSTframe.
OkHttp uses the platform's ProxySelector. Prior to Android 4.0, ProxySelector didn't honor the proxyHost and proxyPort system properties for HTTPS connections. Work around this by specifying the https.proxyHost and https.proxyPort system properties when using a proxy with HTTPS.
OkHttp's test suite creates an in-process HTTPS server. Prior to Android 2.3, SSL server sockets were broken, and so HTTPS tests will time out when run on such devices.
Contributing
If you would like to contribute code to OkHttp you can do so through GitHub by forking the repository and sending a pull request.
When submitting code, please make every effort to follow existing conventions
and style in order to keep the code as readable as possible. Please also make
sure your code compiles by running mvn clean verify. Checkstyle failures
during compilation indicate errors in your style and can be viewed in the
checkstyle-result.xml file.
Before your code can be accepted into the project you must also sign the Individual Contributor License Agreement (CLA).
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.