Showing preview only (1,334K chars total). Download the full file or copy to clipboard to get everything.
Repository: hyperium/hyper
Branch: master
Commit: 28e73ccd230c
Files: 128
Total size: 1.3 MB
Directory structure:
gitextract_tk80unb4/
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.yml
│ │ └── feature_request.md
│ ├── PULL_REQUEST_TEMPLATE
│ └── workflows/
│ ├── CI.yml
│ ├── bench.yml
│ ├── cargo-audit.yml
│ └── external-types.toml
├── .gitignore
├── CHANGELOG.md
├── CONTRIBUTING.md
├── Cargo.toml
├── LICENSE
├── README.md
├── SECURITY.md
├── benches/
│ ├── body.rs
│ ├── connect.rs
│ ├── end_to_end.rs
│ ├── pipeline.rs
│ ├── server.rs
│ └── support/
│ ├── mod.rs
│ └── tokiort.rs
├── capi/
│ ├── README.md
│ ├── cbindgen.toml
│ ├── examples/
│ │ ├── Makefile
│ │ ├── client.c
│ │ └── upload.c
│ ├── gen_header.sh
│ └── include/
│ └── hyper.h
├── docs/
│ ├── CODE_OF_CONDUCT.md
│ ├── CODE_STYLE.md
│ ├── COMMITS.md
│ ├── GOVERNANCE.md
│ ├── ISSUES.md
│ ├── MAINTAINERS.md
│ ├── MSRV.md
│ ├── PULL_REQUESTS.md
│ ├── README.md
│ ├── ROADMAP-1.0.md
│ ├── ROADMAP.md
│ ├── TENETS.md
│ └── VISION.md
├── examples/
│ ├── README.md
│ ├── client.rs
│ ├── client_json.rs
│ ├── echo.rs
│ ├── gateway.rs
│ ├── graceful_shutdown.rs
│ ├── hello-http2.rs
│ ├── hello.rs
│ ├── http_proxy.rs
│ ├── multi_server.rs
│ ├── params.rs
│ ├── send_file.rs
│ ├── send_file_index.html
│ ├── service_struct_impl.rs
│ ├── single_threaded.rs
│ ├── state.rs
│ ├── upgrades.rs
│ └── web_api.rs
├── src/
│ ├── body/
│ │ ├── incoming.rs
│ │ ├── length.rs
│ │ └── mod.rs
│ ├── cfg.rs
│ ├── client/
│ │ ├── conn/
│ │ │ ├── http1.rs
│ │ │ ├── http2.rs
│ │ │ └── mod.rs
│ │ ├── dispatch.rs
│ │ ├── mod.rs
│ │ └── tests.rs
│ ├── common/
│ │ ├── buf.rs
│ │ ├── date.rs
│ │ ├── either.rs
│ │ ├── future.rs
│ │ ├── io/
│ │ │ ├── compat.rs
│ │ │ ├── mod.rs
│ │ │ └── rewind.rs
│ │ ├── mod.rs
│ │ ├── task.rs
│ │ ├── time.rs
│ │ └── watch.rs
│ ├── error.rs
│ ├── ext/
│ │ ├── h1_reason_phrase.rs
│ │ ├── informational.rs
│ │ └── mod.rs
│ ├── ffi/
│ │ ├── body.rs
│ │ ├── client.rs
│ │ ├── error.rs
│ │ ├── http_types.rs
│ │ ├── io.rs
│ │ ├── macros.rs
│ │ ├── mod.rs
│ │ └── task.rs
│ ├── headers.rs
│ ├── lib.rs
│ ├── mock.rs
│ ├── proto/
│ │ ├── h1/
│ │ │ ├── conn.rs
│ │ │ ├── decode.rs
│ │ │ ├── dispatch.rs
│ │ │ ├── encode.rs
│ │ │ ├── io.rs
│ │ │ ├── mod.rs
│ │ │ └── role.rs
│ │ ├── h2/
│ │ │ ├── client.rs
│ │ │ ├── mod.rs
│ │ │ ├── ping.rs
│ │ │ ├── server.rs
│ │ │ └── upgrade.rs
│ │ └── mod.rs
│ ├── rt/
│ │ ├── bounds.rs
│ │ ├── io.rs
│ │ ├── mod.rs
│ │ └── timer.rs
│ ├── server/
│ │ ├── conn/
│ │ │ ├── http1.rs
│ │ │ ├── http2.rs
│ │ │ └── mod.rs
│ │ └── mod.rs
│ ├── service/
│ │ ├── http.rs
│ │ ├── mod.rs
│ │ ├── service.rs
│ │ └── util.rs
│ ├── trace.rs
│ └── upgrade.rs
└── tests/
├── client.rs
├── integration.rs
├── server.rs
└── support/
├── mod.rs
└── trailers.rs
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/FUNDING.yml
================================================
github: seanmonstar
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yml
================================================
name: "Bug report 🐛"
description: Create a report to help us improve
labels: ["C-bug"]
body:
- type: input
id: version
attributes:
label: Version
description: List the version(s) of `hyper`, and any relevant hyper dependency (such as `h2` if this is related to HTTP/2).
placeholder: "hyper 1.0.0, h2 0.4.0"
validations:
required: true
- type: input
id: platform
attributes:
label: Platform
description: The output of `uname -a` (UNIX), or version and 32 or 64-bit (Windows)
placeholder: "Linux 5.15.0 x86_64 / Windows 11 64-bit"
validations:
required: true
- type: textarea
id: summary
attributes:
label: Summary
description: A short summary of the bug
placeholder: "Brief description of what went wrong"
validations:
required: true
- type: textarea
id: code
attributes:
label: Code Sample
description: Code sample that causes the bug (if applicable)
render: rust
placeholder: |
use hyper::...;
fn main() {
// code that reproduces the bug
}
- type: textarea
id: expected
attributes:
label: Expected Behavior
description: What you expected to happen
validations:
required: true
- type: textarea
id: actual
attributes:
label: Actual Behavior
description: What actually happened instead
validations:
required: true
- type: textarea
id: additional
attributes:
label: Additional Context
description: Any other context about the problem (stack traces, related issues, etc.)
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: "Feature request \U0001F4A1"
about: Suggest an idea for this project
title: ''
labels: C-feature
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
================================================
FILE: .github/PULL_REQUEST_TEMPLATE
================================================
================================================
FILE: .github/workflows/CI.yml
================================================
name: CI
on:
pull_request:
push:
branches:
- master
env:
RUST_BACKTRACE: 1
permissions:
contents: read # to fetch code (actions/checkout)
jobs:
ci-pass:
name: CI is green
runs-on: ubuntu-latest
needs:
- style
- test
- msrv
- miri
- features
- ffi
- ffi-header
- ffi-cargo-c
- doc
- check-external-types
- udeps
- minimal-versions
- semver
steps:
- run: exit 0
style:
name: Check Style
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- name: cargo fmt --check
run: |
if ! rustfmt --check --edition 2021 $(git ls-files '*.rs'); then
printf "Please run \`rustfmt --edition 2021 \$(git ls-files '*.rs')\` to fix rustfmt errors.\nSee docs/CODE_STYLE.md for more details.\n" >&2
exit 1
fi
test:
name: Test ${{ matrix.rust }} on ${{ matrix.os }}
needs: [style]
strategy:
matrix:
rust:
- stable
- beta
- nightly
os:
- ubuntu-latest
- windows-latest
- macOS-latest
include:
- rust: stable
features: "--features full"
- rust: beta
features: "--features full"
- rust: nightly
features: "--features full,nightly"
benches: true
runs-on: ${{ matrix.os }}
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Install Rust (${{ matrix.rust }})
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.rust }}
- uses: Swatinem/rust-cache@v2
- name: Test
run: cargo test ${{ matrix.features }}
- name: Test all benches
if: matrix.benches
run: cargo test --benches ${{ matrix.features }}
msrv:
name: Check MSRV
needs: [style]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
- uses: dtolnay/rust-toolchain@stable
- name: Resolve MSRV aware dependencies
run: cargo update
env:
CARGO_RESOLVER_INCOMPATIBLE_RUST_VERSIONS: fallback
- name: Get MSRV from package metadata
id: msrv
run: echo "version=$(yq '.package.rust-version' Cargo.toml)" >> $GITHUB_OUTPUT
- name: Install Rust (${{ steps.msrv.outputs.version }})
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ steps.msrv.outputs.version }}
- uses: Swatinem/rust-cache@v2
- name: Check
run: cargo check --features full
miri:
name: Test with Miri
needs: [style]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Install Rust
uses: dtolnay/rust-toolchain@nightly
with:
components: miri
- uses: Swatinem/rust-cache@v2
- name: Test
# Can't enable tcp feature since Miri does not support the tokio runtime
run: MIRIFLAGS="-Zmiri-disable-isolation" cargo miri test --features http1,http2,client,server,nightly
features:
name: features
needs: [style]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Install cargo-hack
uses: taiki-e/install-action@cargo-hack
- uses: Swatinem/rust-cache@v2
- name: check --feature-powerset
run: cargo hack --no-dev-deps check --feature-powerset --depth 2 --skip ffi,tracing
env:
RUSTFLAGS: "-D dead_code -D unused_imports"
- name: check --feature-powerset with tracing feature
run: cargo hack --no-dev-deps check --feature-powerset --depth 2 --features tracing --skip ffi
env:
RUSTFLAGS: "--cfg hyper_unstable_tracing -D dead_code -D unused_imports"
ffi:
name: Test C API (FFI)
needs: [style]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: Build FFI
env:
RUSTFLAGS: --cfg hyper_unstable_ffi
run: cargo rustc --features client,http1,http2,ffi --crate-type cdylib
- name: Make Examples
run: cd capi/examples && make client
- name: Run FFI unit tests
env:
RUSTFLAGS: --cfg hyper_unstable_ffi
run: cargo test --features client,http1,http2,ffi --lib
ffi-header:
name: Verify hyper.h is up to date
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Install cbindgen
uses: taiki-e/cache-cargo-install-action@v2
with:
tool: cbindgen
- name: Install cargo-expand
uses: taiki-e/cache-cargo-install-action@v2
with:
tool: cargo-expand
- uses: Swatinem/rust-cache@v2
- name: Build FFI
env:
RUSTFLAGS: --cfg hyper_unstable_ffi
run: cargo build --features client,http1,http2,ffi
- name: Ensure that hyper.h is up to date
run: ./capi/gen_header.sh --verify
ffi-cargo-c:
name: Test cargo-c support (FFI)
needs: [style]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: Install cargo-c
env:
LINK: https://github.com/lu-zero/cargo-c/releases/latest/download
CARGO_C_FILE: cargo-c-x86_64-unknown-linux-musl.tar.gz
run: |
curl -L $LINK/$CARGO_C_FILE | tar xz -C ~/.cargo/bin
- name: Build with cargo-c
env:
RUSTFLAGS: --cfg hyper_unstable_ffi
run: cargo cbuild --features client,http1,http2,ffi
doc:
name: Build docs
needs: [style, test]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Install Rust
uses: dtolnay/rust-toolchain@nightly
- uses: Swatinem/rust-cache@v2
- name: cargo doc
run: cargo rustdoc --features full,ffi -- --cfg docsrs --cfg hyper_unstable_ffi -D rustdoc::broken-intra-doc-links
check-external-types:
name: Check exposed types
needs: [style, test]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Install Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: nightly-2025-10-18 # Compatible version for cargo-check-external-types
- name: Install cargo-check-external-types
uses: taiki-e/cache-cargo-install-action@v2
with:
tool: cargo-check-external-types@0.4.0
- uses: Swatinem/rust-cache@v2
- name: check-external-types
run: cargo check-external-types --config .github/workflows/external-types.toml
udeps:
needs: [style]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Install Rust
uses: dtolnay/rust-toolchain@nightly
- name: Install cargo-udeps
uses: taiki-e/install-action@cargo-udeps
- uses: Swatinem/rust-cache@v2
- name: Check unused dependencies on default features
run: cargo udeps
- name: Check unused dependencies on full features
run: cargo udeps --features full
minimal-versions:
runs-on: ubuntu-latest
needs: [style]
steps:
- uses: actions/checkout@v6
- uses: dtolnay/rust-toolchain@nightly
- uses: dtolnay/rust-toolchain@stable
- uses: taiki-e/install-action@cargo-hack
- uses: taiki-e/install-action@cargo-minimal-versions
- uses: Swatinem/rust-cache@v2
- run: cargo minimal-versions check
- run: cargo minimal-versions check --features full
semver:
name: semver
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Check semver
uses: obi1kenobi/cargo-semver-checks-action@v2
with:
feature-group: only-explicit-features
features: full
release-type: minor
================================================
FILE: .github/workflows/bench.yml
================================================
name: Benchmark
on:
push:
branches:
- master
jobs:
benchmark:
name: Benchmark
runs-on: ubuntu-latest
strategy:
matrix:
bench:
- end_to_end
- pipeline
steps:
- uses: actions/checkout@v6
- name: Install Rust
uses: dtolnay/rust-toolchain@nightly
# Run benchmark and stores the output to a file
- name: Run benchmark
run: cargo bench --features full --bench ${{ matrix.bench }} | tee output.txt
# Download previous benchmark result from cache (if exists)
- name: Download previous benchmark data
uses: actions/cache@v3
with:
path: ./cache
key: ${{ runner.os }}-benchmark
# Run `github-action-benchmark` action
- name: Store benchmark result
uses: seanmonstar/github-action-benchmark@v1-patch-1
with:
name: ${{ matrix.bench }}
# What benchmark tool the output.txt came from
tool: 'cargo'
# Where the output from the benchmark tool is stored
output-file-path: output.txt
# # Where the previous data file is stored
# external-data-json-path: ./cache/benchmark-data.json
# Workflow will fail when an alert happens
fail-on-alert: true
# GitHub API token to make a commit comment
github-token: ${{ secrets.GITHUB_TOKEN }}
# Enable alert commit comment
comment-on-alert: true
#alert-comment-cc-users: '@seanmonstar'
auto-push: true
# Upload the updated cache file for the next job by actions/cache
================================================
FILE: .github/workflows/cargo-audit.yml
================================================
name: cargo-audit
on:
push:
paths:
- '**/Cargo.toml'
- '**/Cargo.lock'
schedule:
- cron: '0 16 * * Mon'
jobs:
security_audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Generate lockfile
run: cargo generate-lockfile --features full
- uses: rustsec/audit-check@v2
with:
token: ${{ secrets.GITHUB_TOKEN }}
================================================
FILE: .github/workflows/external-types.toml
================================================
allowed_external_types = [
"bytes::buf::buf_impl::Buf",
"bytes::bytes::Bytes",
"http::header",
"http::header::map::HeaderMap",
"http::method::Method",
"http::request::Request",
"http::response::Response",
"http::status::StatusCode",
"http::uri::Uri",
"http::version::Version",
"http_body::Body",
"http_body::frame::Frame",
"http_body::size_hint::SizeHint",
]
================================================
FILE: .gitignore
================================================
target
Cargo.lock
================================================
FILE: CHANGELOG.md
================================================
### v1.8.1 (2025-11-13)
#### Bug Fixes
* **http1:** fix consuming extra CPU from previous change (#3977) ([4492f31e](https://github.com/hyperium/hyper/commit/4492f31e9429c34166da5a069c00b65be20e4a02))
## v1.8.0 (2025-11-11)
#### Bug Fixes
* **http1:** fix rare missed write wakeup on connections (#3952) ([2377b893](https://github.com/hyperium/hyper/commit/2377b893f6e64ca9878e4f25d1472b96baa7e3ea))
* **http2:** fix internals of HTTP/2 CONNECT upgrades (#3967) ([58e0e7dc](https://github.com/hyperium/hyper/commit/58e0e7dc70612117ccdc40da395922f791cb273a), closes [#3966](https://github.com/hyperium/hyper/issues/3966))
#### Features
* **rt:** add `Timer::now()` method to allow overriding the instant returned (#3965) ([5509ebe6](https://github.com/hyperium/hyper/commit/5509ebe6156e32d4f8986fafa25c2918a30005be))
#### Breaking Changes
* The HTTP/2 client connection no longer allows an executor
that can not spawn itself.
This was an oversight originally. The client connection will now include spawning
a future that keeps a copy of the executor to spawn other futures. Thus, if it is
`!Send`, it needs to spawn `!Send` futures. The likelihood of executors that match
the previously allowed behavior should be very remote.
There is also technically a semver break in here, which is that the
`Http2ClientConnExec` trait no longer dyn-compatible, because it now expects to
be `Clone`. This should not break usage of the `conn` builder, because it already
separately had `E: Clone` bounds. If someone were using `dyn Http2ClientConnExec`,
that will break. However, there is no purpose for doing so, and it is not usable
otherwise, since the trait only exists to propagate bounds into hyper. Thus, the
breakage should not affect anyone.
([58e0e7dc](https://github.com/hyperium/hyper/commit/58e0e7dc70612117ccdc40da395922f791cb273a))
## v1.7.0 (2025-08-18)
#### Bug Fixes
* **server:** improve caching accuracy of Date header (#3887) ([436cadd1](https://github.com/hyperium/hyper/commit/436cadd1ac08a9508a46f550e03281db9f2fee97))
#### Features
* **client:**
* add a `TrySendError::error()` method (#3885) ([efa0b269](https://github.com/hyperium/hyper/commit/efa0b26958386ffaf646e6d9a3150ca5041162a3))
* add a `TrySendError::message()` method (#3884) ([03fd6aff](https://github.com/hyperium/hyper/commit/03fd6aff88c99a0842bb2e578a4993a432c03049))
* **error:** add `Error::is_shutdown()` (#3863) ([b8affd8a](https://github.com/hyperium/hyper/commit/b8affd8a2ee5d77dec0c32050a7234e4f2f3751b), closes [#2745](https://github.com/hyperium/hyper/issues/2745))
* **server:** add `allow_multiple_spaces_in_request_line_delimiters` http1 builder method (#3929) ([9749184f](https://github.com/hyperium/hyper/commit/9749184f8a21c387e404d628aceb992f0bf93e49))
## v1.6.0 (2025-01-28)
#### Bug Fixes
* **server:**
* start http1 header read timeout when conn is idle (#3828) ([10b09ffc](https://github.com/hyperium/hyper/commit/10b09ffc04a97bbc96444172b7c5e02665827c67), closes [#3780](https://github.com/hyperium/hyper/issues/3780), [#3781](https://github.com/hyperium/hyper/issues/3781))
* change `max_local_error_reset_streams` function to `&mut self` (#3820) ([e981a91e](https://github.com/hyperium/hyper/commit/e981a91e68aa92b0dee771362de771daa31c713e))
#### Features
* **ext:** add `ext::on_informational()` callback extension (#3818) ([8ce1fcfa](https://github.com/hyperium/hyper/commit/8ce1fcfae97611ace027b9e26717ae957b323f24), closes [#2565](https://github.com/hyperium/hyper/issues/2565))
* **server:** add `http1::Builder::ignore_invalid_headers(bool)` option (#3824) ([3817a79b](https://github.com/hyperium/hyper/commit/3817a79b213f840302d7e27fac8508de9caada0f))
#### Breaking Changes
* `http2::Builder::max_local_error_reset_streams()` now takes `&mut self` and returns `&mut Self`. In practice, this shouldn't break almost anyone. It was the wrong receiver and return types.
([e981a91e](https://github.com/hyperium/hyper/commit/e981a91e68aa92b0dee771362de771daa31c713e))
### v1.5.2 (2024-12-16)
#### Bug Fixes
* **http1:**
* fix intermitent panic parsing partial headers (#3812) ([a131111f](https://github.com/hyperium/hyper/commit/a131111f9c3189bab36fed9f46872c88dc0d601e), closes [#3811](https://github.com/hyperium/hyper/issues/3811))
* skip debug assertion of content length for HEAD responses (#3795) ([eaf2267c](https://github.com/hyperium/hyper/commit/eaf2267cdc148604469fb09da22646f31710107a), closes [#3794](https://github.com/hyperium/hyper/issues/3794))
#### Features
* **ffi:** add cargo-c support (#3787) ([7f4a6826](https://github.com/hyperium/hyper/commit/7f4a68265cb897d15b04fc772639234554ba79e8), closes [#3786](https://github.com/hyperium/hyper/issues/3786))
### v1.5.1 (2024-11-19)
#### Bug Fixes
* **http2:**
* pass proper value to h2 max_local_error_reset_streams ([4a20147a](https://github.com/hyperium/hyper/commit/4a20147a1b73003860a8391c4b89ccd8a78a832e))
* improve graceful shutdown during handshake (#3729) ([13b05943](https://github.com/hyperium/hyper/commit/13b0594348916b901ad7e1c838b9d90298db6af4))
## v1.5.0 (2024-10-15)
#### Bug Fixes
* **http1:**
* improve performance of parsing sequentially partial messages (#3764) ([3900a23](https://github.com/hyperium/hyper/commit/3900a2381b96a7e7f608a5e031b3e90ddcdfcd74))
* send 'connection: close' when connection is ending (#3725) ([c86a6bcb](https://github.com/hyperium/hyper/commit/c86a6bcb4acb0f92e731ea2e4c1e4a839248a600), closes [#3720](https://github.com/hyperium/hyper/issues/3720))
* make `date_header` effective (#3718) ([7de02373](https://github.com/hyperium/hyper/commit/7de02373f5e4ce392587a4d9d7710c6faf9c6165))
* **http2:** strip content-length header in response to CONNECT requests (#3748) ([67a4a498](https://github.com/hyperium/hyper/commit/67a4a498d8bbdce4e604bc578da4693fb048f83d))
#### Features
* **client:** Add HTTP/2 builder options `header_table_size()` and `max_concurrent_streams()` ([4c84e8c1](https://github.com/hyperium/hyper/commit/4c84e8c1c26a1464221de96b9f39816ce7251a5f))
* **rt:** add `ReadBufCursor` methods `remaining()` and `put_slice()` (#3700) ([5a13041e](https://github.com/hyperium/hyper/commit/5a13041ed7033c9dab6e2adafd08b6af20cd33fb))
### v1.4.1 (2024-07-09)
#### Bug Fixes
* **http1:** reject final chunked if missing 0 ([8e5de1bb](https://github.com/hyperium/hyper/commit/8e5de1bb57e10b5bd9e70ab22489da787517238a))
## v1.4.0 (2024-07-01)
#### Bug Fixes
* **http2:** stop removing "Trailer" header in HTTP/2 responses as per RFC 9110 (#3648) ([a3269f7a](https://github.com/hyperium/hyper/commit/a3269f7ab285dbeb44a3a7dbc163fcadd65087f9))
* **server:** start header read timeout immediately (#3185) ([0eb1b6cf](https://github.com/hyperium/hyper/commit/0eb1b6cf4d914ce9c3f8e92a8b43754eba27a327))
#### Features
* **client:**
* add `SendRequest::try_send_request()` method (#3691) ([4ffaad53](https://github.com/hyperium/hyper/commit/4ffaad53c78572c500584e0cb5d76ae6ffc6adb6))
* remove `Send +Sync` bounds requirement of `http2::Connection` executor (#3682) ([56c3cd56](https://github.com/hyperium/hyper/commit/56c3cd560bc10671d3d8b638f3f17a304f920c6b))
* remove `'static` lifetime bound on http1/2 client IO (#3667) ([9580b357](https://github.com/hyperium/hyper/commit/9580b357635031f3d631303f3afffc2afae77933))
* **http1:** add support for receiving trailer fields (#3637) ([ac84af6b](https://github.com/hyperium/hyper/commit/ac84af6b32a5d37d9343013ace088aaae47587b6), closes [#2703](https://github.com/hyperium/hyper/issues/2703))
* **server:** add `Builder::auto_date_header(bool)` to allow disabling Date headers ([721785ef](https://github.com/hyperium/hyper/commit/721785efad8537513e48d900a85c05ce79483018))
* **service:** implement Service for reference types (#3607) ([eade122d](https://github.com/hyperium/hyper/commit/eade122db25f51619aee5db845de2a61b7ff2f74))
### v1.3.1 (2024-04-16)
#### Bug Fixes
* **client:** revert auto content-length header for some requests (#3633)
## v1.3.0 (2024-04-15)
#### Bug Fixes
* **client:** send content-length even with no body ([172fdfaf](https://github.com/hyperium/hyper/commit/172fdfaf0e0d9222917f271a83339238082e2657))
* **http2:**
* `max_header_list_size(num)` defaults to 16kb ([203d1b09](https://github.com/hyperium/hyper/commit/203d1b090d0d0349c7e373e881ac4ddba72129be))
* `initial_max_send_streams` defaults to 100 ([2d1bd708](https://github.com/hyperium/hyper/commit/2d1bd7085e37a55ed6393f0e3f1b9a0b06db4d5d))
* **server:**
* avoid unwrapping for the `Future` impl of HTTP/1 `UpgradeableConnection` (#3627) ([b79be911](https://github.com/hyperium/hyper/commit/b79be911696f6a93e8d408080ebbf558b612ce3c), closes [#3621](https://github.com/hyperium/hyper/issues/3621))
* avoid `graceful_shutdown` panic on upgraded H1 connection (#3616) ([6ecf8521](https://github.com/hyperium/hyper/commit/6ecf85218fb24531184c53d5ed0eb7caf13cdcef))
#### Features
* **client:**
* add `max_header_list_size(num)` to `http2::Builder`. ([1c5b1b87](https://github.com/hyperium/hyper/commit/1c5b1b87ae1497a702e30ea82a486fb61a3f8133))
* add `max_pending_accept_reset_streams` HTTP2 option (#3617) ([330ddf1d](https://github.com/hyperium/hyper/commit/330ddf1de1ca2841469d30d24143902e5ff06365))
* **ext:** implement From ReasonPhrase for Bytes ([dc27043a](https://github.com/hyperium/hyper/commit/dc27043aa319c0e630b7385a36aca0f3bee70670))
* **service:** expose Service and HttpService trait unconditionally ([6aee2e6e](https://github.com/hyperium/hyper/commit/6aee2e6e260e7d407256d6b7da6a0d90c1bb9c67))
* **server:** relax `'static` from connection IO trait bounds (#3595) ([0013bdda](https://github.com/hyperium/hyper/commit/0013bdda5cd34ed6fca089eceb0133395b7be041))
## v1.2.0 (2024-02-21)
#### Bug Fixes
* **http2:** typo in trace logging (#3536) ([79862ec2](https://github.com/hyperium/hyper/commit/79862ec2e84c32122c820958ceec06d8b7701ff7))
* **rt:** `Sleep::downcast_mut_pin()` no longer extend lifetime ([7206fe30](https://github.com/hyperium/hyper/commit/7206fe30302937075c51c16a69d1eb3bbce6a671), closes [#3556](https://github.com/hyperium/hyper/issues/3556))
#### Features
* **http1:** support configurable `max_headers(num)` to client and server (#3523) ([b1142448](https://github.com/hyperium/hyper/commit/b114244898828e9fb254bea1f0bbdd24850b2f3f))
* **http2:**
* add config for `max_local_error_reset_streams` in server (#3530) ([d7680e30](https://github.com/hyperium/hyper/commit/d7680e30e48926a5a3f94a0986d39181d5ab2218))
* add `initial_max_send_streams` method to HTTP/2 client builder (#3524) ([fdfa60d9](https://github.com/hyperium/hyper/commit/fdfa60d9fafb8a6bfb40acc4042ee54a2b9aad32))
* add `max_pending_accept_reset_streams(num)` back to HTTP/2 server builder (#3507 ([a9fa893f](https://github.com/hyperium/hyper/commit/a9fa893f18c6409abae2e1dcbba0f4487df54d4f))
#### Breaking Changes
* The returned lifetime from `Sleep::downcast_mut_pin()`
is no longer `'static`. This shouldn't affect most usage. This sort of
breaking change is needed because it is _wrong_.
([7206fe30](https://github.com/hyperium/hyper/commit/7206fe30302937075c51c16a69d1eb3bbce6a671))
## v1.1.0 (2023-12-18)
#### Bug Fixes
* **http1:**
* add internal limit for chunked extensions (#3495) ([d71ff962](https://github.com/hyperium/hyper/commit/d71ff962b08aca2f1c9c1724dfdab5bc1ec6ecd2))
* reject chunked headers missing a digit (#3494) ([82915386](https://github.com/hyperium/hyper/commit/829153865a4d2bbb52227183c8857e57dc3e231b))
#### Features
* **client:** add `http1::Connection` `without_shutdown()` method (#3430) ([210bfaa7](https://github.com/hyperium/hyper/commit/210bfaa711b5da1f6756582a2e4bc3e229924800))
* **http1:** Add support for sending HTTP/1.1 Chunked Trailer Fields (#3375) ([31b41807](https://github.com/hyperium/hyper/commit/31b41807523370f3efbf47ba16c9e1c193b6335a), closes [#2719](https://github.com/hyperium/hyper/issues/2719))
* **server:** expose `server::conn::http1::UpgradeableConnection` (#3457) ([6e3042a8](https://github.com/hyperium/hyper/commit/6e3042a86f10359624857d31bc9e876f521aee42))
### v1.0.1 (2023-11-16)
This release "fixes" or adds a few things that should have been in 1.0.0, but were forgotten. Thus, it includes additions that would normally be a semver-minor release, but because it is so close to 1.0.0, it is released as a patch version.
#### Bug Fixes
* **rt:** implement Read/Write for Pin<P> (#3413) ([dd6d81ca](https://github.com/hyperium/hyper/commit/dd6d81ca4a180695dc70d6c9b2aececd29606224), closes [#3412](https://github.com/hyperium/hyper/issues/3412))
#### Features
* **rt:** Make ReadBuf::new public ([7161f562](https://github.com/hyperium/hyper/commit/7161f56274a30bfbe4a718bbe21d35beaf86b00b))
#### Breaking Changes
* Pin is #[fundamental], so providing a Read/Write impl for it theoretically conflicts
with existing user Read/Write for Pin<...> impls. However, those impls
probably don't exist yet.
([dd6d81ca](https://github.com/hyperium/hyper/commit/dd6d81ca4a180695dc70d6c9b2aececd29606224))
## v1.0.0 (2023-11-15)
Be sure to check out the [upgrading guide](https://hyper.rs/guides/1/upgrading).
#### Bug Fixes
* **client:**
* avoid double-polling a Select future (#3290) ([fece9f7f](https://github.com/hyperium/hyper/commit/fece9f7f50431cf9533cfe7106b53a77b48db699), closes [#3289](https://github.com/hyperium/hyper/issues/3289))
* early server response shouldn't propagate NO_ERROR (#3275) ([194e6f98](https://github.com/hyperium/hyper/commit/194e6f984763f5dc1c376082170a85cc4db40ce4), closes [#2872](https://github.com/hyperium/hyper/issues/2872))
* remove Send bounds for request `Body` (#3266) ([4ace340b](https://github.com/hyperium/hyper/commit/4ace340bb00a2ffe8ec93e4955989eb69f29d531), closes [#3184](https://github.com/hyperium/hyper/issues/3184))
* **ffi:** fix deadlock in `hyper_executor::poll_next` (#3370) ([0c7d03ef](https://github.com/hyperium/hyper/commit/0c7d03eff2f2433e4f4a0a768009d97e1a7858fd), closes [#3369](https://github.com/hyperium/hyper/issues/3369))
* **http2:**
* don't send keep-alive ping when idle (#3381) ([429ad8a3](https://github.com/hyperium/hyper/commit/429ad8a34b20a877b4d17df1f4991a193f4a56f0))
* change default server max concurrent streams to 200 (#3362) ([dd638b5b](https://github.com/hyperium/hyper/commit/dd638b5b34225d2c5ad0bd01de0ecf738f9a0e12), closes [#3358](https://github.com/hyperium/hyper/issues/3358))
* **server:** Respect Expect header only when http proto > 1.0 (#3294) ([43d2f5c6](https://github.com/hyperium/hyper/commit/43d2f5c6cfd575f7259a5b3684f7e99cedbd0edb))
#### Features
* **client:** allow `!Send` IO with HTTP/1 client (#3371) ([cf87eda8](https://github.com/hyperium/hyper/commit/cf87eda82ca0af1f5f45b0a0710eaae9ec1aed7b), closes [#3363](https://github.com/hyperium/hyper/issues/3363))
* **error:**
* `Error::source()` is purposefully unspecified (#3318) ([502a6450](https://github.com/hyperium/hyper/commit/502a645053b0d19252d9fdc170b0a2c0a6fe0ba6), closes [#2843](https://github.com/hyperium/hyper/issues/2843))
* change `Display for Error` to only print top error (#3312) ([50f123af](https://github.com/hyperium/hyper/commit/50f123afc0e6c289030bf8699dbec826dc47572c), closes [#2844](https://github.com/hyperium/hyper/issues/2844))
* **ext:**
* make `ReasonPhrase::from_static` a const fn ([d4a61e3d](https://github.com/hyperium/hyper/commit/d4a61e3da87a08a25772cd3aa2f503cb4346c81f))
* remove `ReasonPhrase::from_bytes_unchecked()` method ([4021c57b](https://github.com/hyperium/hyper/commit/4021c57bd9265b9ebc5b88c9bffbb0ac3704bdbe))
* **lib:**
* update to `http` 1.0 ([899e92a5](https://github.com/hyperium/hyper/commit/899e92a580961c5bd1cc9b49a8fb7c7cd8b53ef8))
* missing Timer will warn or panic ([f3308c04](https://github.com/hyperium/hyper/commit/f3308c044d402dfad448bbc0497b14c69a8f22f2), closes [#3393](https://github.com/hyperium/hyper/issues/3393))
* increase MSRV to 1.63 (#3293) ([e68dc961](https://github.com/hyperium/hyper/commit/e68dc961a7dad0a96e16898b0da234927564c079))
* **rt:** rename to `Http2ClientConnExec` and `Http2ServerConnExec` ([52b27faa](https://github.com/hyperium/hyper/commit/52b27faa09715b5835804de7abf6998e028736fc))
* **server:** default `http1` `header_read_timeout` to 30 seconds ([8bf26d1e](https://github.com/hyperium/hyper/commit/8bf26d1e394a8f207debe45445a5fb85cc349238))
* **upgrade:** introduce tracing as an optional unstable feature (#3326) ([da3fc76c](https://github.com/hyperium/hyper/commit/da3fc76c06b6caa60f6abc1da570d56d7c8fa468), closes [#3319](https://github.com/hyperium/hyper/issues/3319))
#### Breaking Changes
* Upgrade to `http` 1.0.
([899e92a5](https://github.com/hyperium/hyper/commit/899e92a580961c5bd1cc9b49a8fb7c7cd8b53ef8))
* (From previous RCs) `ExecutorClient` is renamed to
`Http2ClientConnExec`, and `Http2ConnExec` is renamed to
`Http2ServerConnExec`.
([52b27faa](https://github.com/hyperium/hyper/commit/52b27faa09715b5835804de7abf6998e028736fc))
* If you use client HTTP/1 upgrades, you must call
`Connection::with_upgrades()` to still work the same.
([cf87eda8](https://github.com/hyperium/hyper/commit/cf87eda82ca0af1f5f45b0a0710eaae9ec1aed7b))
* HTTP/2 server builder now has a default max concurrent streams. This is a
behavior change. Consider setting your own maximum.
([dd638b5b](https://github.com/hyperium/hyper/commit/dd638b5b34225d2c5ad0bd01de0ecf738f9a0e12))
* Do not build any logic depending on the exact types of
an `Error::source()`. They are only for debugging.
([502a6450](https://github.com/hyperium/hyper/commit/502a645053b0d19252d9fdc170b0a2c0a6fe0ba6))
* The format no longer prints the error chain. Be sure to
check if you are logging errors directly.
The `Error::message()` method is removed, it is no longer needed.
The `Error::into_cause()` method is removed.
([50f123af](https://github.com/hyperium/hyper/commit/50f123afc0e6c289030bf8699dbec826dc47572c))
* The `ReasonPhrase::from_bytes_unchecked()` method is
gone. Use `from_static()` or `TryFrom` to construct one.
([4021c57b](https://github.com/hyperium/hyper/commit/4021c57bd9265b9ebc5b88c9bffbb0ac3704bdbe))
### v1.0.0-rc.4 (2023-07-10)
#### Bug Fixes
* **http1:**
* http1 server graceful shutdown fix (#3261) ([f4b51300](https://github.com/hyperium/hyper/commit/f4b513009d81083081d1c60c1981847bbb17dd5d))
* send error on Incoming body when connection errors (#3256) ([52f19259](https://github.com/hyperium/hyper/commit/52f192593fb9ebcf6d3894e0c85cbf710da4decd), closes [#3253](https://github.com/hyperium/hyper/issues/3253))
* properly end chunked bodies when it was known to be empty (#3254) ([fec64cf0](https://github.com/hyperium/hyper/commit/fec64cf0abdc678e30ca5f1b310c5118b2e01999), closes [#3252](https://github.com/hyperium/hyper/issues/3252))
#### Features
* **client:** Make clients able to use non-Send executor (#3184) ([d977f209](https://github.com/hyperium/hyper/commit/d977f209bc6068d8f878b22803fc42d90c887fcc), closes [#3017](https://github.com/hyperium/hyper/issues/3017))
* **rt:**
* replace IO traits with hyper::rt ones (#3230) ([f9f65b7a](https://github.com/hyperium/hyper/commit/f9f65b7aa67fa3ec0267fe015945973726285bc2), closes [#3110](https://github.com/hyperium/hyper/issues/3110))
* add downcast on `Sleep` trait (#3125) ([d92d3917](https://github.com/hyperium/hyper/commit/d92d3917d950e4c61c37c2170f3ce273d2a0f7d1), closes [#3027](https://github.com/hyperium/hyper/issues/3027))
* **service:** change Service::call to take &self (#3223) ([d894439e](https://github.com/hyperium/hyper/commit/d894439e009aa75103f6382a7ba98fb17da72f02), closes [#3040](https://github.com/hyperium/hyper/issues/3040))
#### Breaking Changes
* Any IO transport type provided must now implement `hyper::rt::{Read, Write}` instead of
`tokio::io` traits. You can grab a helper type from `hyper-util` to wrap Tokio types, or implement the traits yourself,
if it's a custom type.
([f9f65b7a](https://github.com/hyperium/hyper/commit/f9f65b7aa67fa3ec0267fe015945973726285bc2))
* `client::conn::http2` types now use another generic for an `Executor`.
Code that names `Connection` needs to include the additional generic parameter.
([d977f209](https://github.com/hyperium/hyper/commit/d977f209bc6068d8f878b22803fc42d90c887fcc))
* The Service::call function no longer takes a mutable reference to self.
The FnMut trait bound on the service::util::service_fn function and the trait bound
on the impl for the ServiceFn struct were changed from FnMut to Fn.
([d894439e](https://github.com/hyperium/hyper/commit/d894439e009aa75103f6382a7ba98fb17da72f02))
### v1.0.0-rc.3 (2023-02-23)
#### Bug Fixes
* **server:** prevent sending 100-continue if user drops request body (#3137) ([499fe1f9](https://github.com/hyperium/hyper/commit/499fe1f949895218c4fd2305a0eddaf24f1dd0a9))
#### Features
* **client:**
* add `is_ready()` and `is_closed()` methods to `SendRequest` (#3148) ([3fb59919](https://github.com/hyperium/hyper/commit/3fb59919941d3145be6d84dab85d222ea0e7664b))
* `http2` builder now requires an `Executor` (#3135) ([8068aa01](https://github.com/hyperium/hyper/commit/8068aa011f6477a21ad54230c8fef9e26b330503), closes [#3128](https://github.com/hyperium/hyper/issues/3128))
* remove unneeded HTTP/1 executor (#3108) ([1de9accf](https://github.com/hyperium/hyper/commit/1de9accf1e133d1a23311879f466251b2f6481e5))
* **rt:** make private executor traits public (but sealed) in `rt::bounds` (#3127) ([fc9f3070](https://github.com/hyperium/hyper/commit/fc9f30701a159772d0c014de47d16798502bae2c), closes [#2051](https://github.com/hyperium/hyper/issues/2051), [#3097](https://github.com/hyperium/hyper/issues/3097))
#### Breaking Changes
* `hyper::client::conn::Http2::Builder::new` now requires an executor argument.
([8068aa01](https://github.com/hyperium/hyper/commit/8068aa011f6477a21ad54230c8fef9e26b330503))
* The method
`hyper::client::conn::http1::Builder::executor()` is removed, since it did nothing.
([1de9accf](https://github.com/hyperium/hyper/commit/1de9accf1e133d1a23311879f466251b2f6481e5))
### v1.0.0-rc.2 (2022-12-29)
#### Bug Fixes
* **client:** send an error back to client when dispatch misbehaves () ([75aac9f4](https://github.com/hyperium/hyper/commit/75aac9f47fe0246016e6133cd3cfa35b63c8904e), closes [#2649](https://github.com/hyperium/hyper/issues/2649))
* **http2:** Fix race condition in client dispatcher (#3041) ([f202230c](https://github.com/hyperium/hyper/commit/f202230c6fa274f6a4e6cbaad57ca59beb0a5125))
#### Features
* **body:** upgrade to http-body 1.0.0-rc.2 (#3106) ([51b45e3f](https://github.com/hyperium/hyper/commit/51b45e3f8580da5667a45395e6622455b10e2ad3))
* **client:**
* remove http2_ prefixes from `client::conn::http2::Builder` methods ([669df217](https://github.com/hyperium/hyper/commit/669df2173e059544fbaded0d666c5bfc113eaa0e))
* remove http1_ prefixes from `client::conn::http1::Builder` methods ([4cbaef79](https://github.com/hyperium/hyper/commit/4cbaef79f0ec03643c09e4e6fbbed23bf589e548))
* implement `Clone` for `http2::SendRequest` (#3042) ([00ea49e4](https://github.com/hyperium/hyper/commit/00ea49e47a565748a4e4657f7047dca5851f8b7a), closes [#3036](https://github.com/hyperium/hyper/issues/3036))
* allow ignoring HTTP/1 invalid header lines in requests ([81e25fa8](https://github.com/hyperium/hyper/commit/81e25fa868c86e4ea81d5a96fdca497a4b1ab3c1))
* **rt:** Clean up Timer trait (#3037) ([8790fee7](https://github.com/hyperium/hyper/commit/8790fee74937016e6b288493bc62c61f7866c310), closes [#3028](https://github.com/hyperium/hyper/issues/3028))
* **server:**
* remove http1_ method prefixes from `server::conn::http2::Builder` ([291ed0b4](https://github.com/hyperium/hyper/commit/291ed0b49bc7fd6f43890815cdf93aaefaf59011))
* remove http1_ method prefixes from `server::conn::http2::Builder` ([48e70c69](https://github.com/hyperium/hyper/commit/48e70c691e44d5e37d4b51fe8980f76d27c989b3))
* remove `server::conn::http2::Builder::with_executor()` (#3089) ([ab59a6f7](https://github.com/hyperium/hyper/commit/ab59a6f7a1e654b1607744320de5f8477de5d6c8), closes [#3087](https://github.com/hyperium/hyper/issues/3087))
#### Breaking Changes
* removes `server::conn::http2::Builder::with_executor()`
([ab59a6f7](https://github.com/hyperium/hyper/commit/ab59a6f7a1e654b1607744320de5f8477de5d6c8))
* The return types of `Timer` have been changed.
([8790fee7](https://github.com/hyperium/hyper/commit/8790fee74937016e6b288493bc62c61f7866c310))
* The return types for `Frame::into_data()` and `Frame::into_trailers()` have been changed from `Option<T>` to `Result<T, Self>`.
### v1.0.0-rc.1 (2022-10-25)
#### Bug Fixes
* **http1:**
* trim obs-folded headers when unfolding (#2926) ([d4b5bd4e](https://github.com/hyperium/hyper/commit/d4b5bd4ee6af0ae8924cf05ab799cc3e19a3c62d))
#### Features
* **body:**
* rename `Body` struct to `Incoming` (#3022) ([95a153bb](https://github.com/hyperium/hyper/commit/95a153bbc2717bd4233486e09848622ceb900574), closes [#2971](https://github.com/hyperium/hyper/issues/2971))
* update `HttpBody` trait to use `Frame`s (#3020) ([0888623d](https://github.com/hyperium/hyper/commit/0888623d3764e887706d4e38f82f0fb57c50bd1a), closes [#3010](https://github.com/hyperium/hyper/issues/3010))
* make body::Sender and Body::channel private (#2970) ([d963e6a9](https://github.com/hyperium/hyper/commit/d963e6a9504575116f63df2485d8480fdb9b6f0b), closes [#2962](https://github.com/hyperium/hyper/issues/2962))
* remove "full" constructors from `Body` (#2958) ([9e8fc8fc](https://github.com/hyperium/hyper/commit/9e8fc8fca195f470a82be5bfb2fd8019c044b97a))
* **client:**
* remove `client::conn::{SendRequest, Connection}` (#2987) ([8ae73cac](https://github.com/hyperium/hyper/commit/8ae73cac6a8f6a61944505c121158dc312e7b68f))
* remove `client::connect` module (#2949) ([5e206883](https://github.com/hyperium/hyper/commit/5e206883984fe6de2812861ec363964d92b89b06))
* remove higher-level `hyper::Client` (#2941) ([bb3af17c](https://github.com/hyperium/hyper/commit/bb3af17ce1a3841e9170adabcce595c7c8743ea7))
* remove `hyper::client::server` (#2940) ([889fa2d8](https://github.com/hyperium/hyper/commit/889fa2d87252108eb7668b8bf034ffcc30985117))
* introduce version-specific client modules (#2906) ([509672aa](https://github.com/hyperium/hyper/commit/509672aada0af68a91d963e69828c6e31c44cb7b))
* **ffi:** add http1_allow_multiline_headers (#2918) ([09e35668](https://github.com/hyperium/hyper/commit/09e35668e5b094d679efb4b98ecde9cb6f9f2f93))
* **lib:** remove `stream` cargo feature (#2896) ([ce72f734](https://github.com/hyperium/hyper/commit/ce72f73464d96fd67b59ceff08fd424733b43ffa), closes [#2855](https://github.com/hyperium/hyper/issues/2855))
* **rt:** add Timer trait (#2974) ([fae97ced](https://github.com/hyperium/hyper/commit/fae97ced3a1f71fc46b6eadd3313e19705cc0006))
* **server:**
* remove `server::conn::{Http, Connection}` types (#3013) ([0766d3f7](https://github.com/hyperium/hyper/commit/0766d3f78d116ea243222cea134cfe7f418e6a3c), closes [#3012](https://github.com/hyperium/hyper/issues/3012))
* `server::conn::http1` and `server::conn::http2` modules (#3011) ([fc4d3356](https://github.com/hyperium/hyper/commit/fc4d3356cb7f2fffff5af9c474fa34c5adc5d6f1), closes [#2851](https://github.com/hyperium/hyper/issues/2851))
* remove the high-level Server API (#2932) ([3c7bef3b](https://github.com/hyperium/hyper/commit/3c7bef3b6f6b6c3ec780e5e2db12c9d5795c1b80))
* remove `AddrStream` struct (#2869) ([e9cab49e](https://github.com/hyperium/hyper/commit/e9cab49e6e18f712b94137966580f6756e32fabb), closes [#2850](https://github.com/hyperium/hyper/issues/2850))
* **service:** create own `Service` trait (#2920) ([fee7d361](https://github.com/hyperium/hyper/commit/fee7d361c28c7eb42ef6bbfae0db14028d24bfee), closes [#2853](https://github.com/hyperium/hyper/issues/2853))
#### Breaking Changes
* The polling functions of the `Body` trait have been
redesigned.
The free functions `hyper::body::to_bytes` and `aggregate` have been
removed. Similar functionality is on
`http_body_util::BodyExt::collect`.
([0888623d](https://github.com/hyperium/hyper/commit/0888623d3764e887706d4e38f82f0fb57c50bd1a))
* Either choose a version-specific `Connection` type, or
look for the auto-version type in `hyper-util`.
([0766d3f7](https://github.com/hyperium/hyper/commit/0766d3f78d116ea243222cea134cfe7f418e6a3c))
* Pick a version-specific connection, or use the combined
one in `hyper-util`.
([8ae73cac](https://github.com/hyperium/hyper/commit/8ae73cac6a8f6a61944505c121158dc312e7b68f))
* Change any manual `impl tower::Service` to implement `hyper::service::Service` instead. The `poll_ready` method has been removed.
([fee7d361](https://github.com/hyperium/hyper/commit/fee7d361c28c7eb42ef6bbfae0db14028d24bfee))
* The trait has been renamed.
([031454e5](https://github.com/hyperium/hyper/commit/031454e5e647dda0648424a944dbef795505e2e4))
* A channel body will be available in `hyper-util`.
([d963e6a9](https://github.com/hyperium/hyper/commit/d963e6a9504575116f63df2485d8480fdb9b6f0b))
* Use the types from `http-body-util`.
([9e8fc8fc](https://github.com/hyperium/hyper/commit/9e8fc8fca195f470a82be5bfb2fd8019c044b97a))
* Use `connect` from `hyper-util`.
([5e206883](https://github.com/hyperium/hyper/commit/5e206883984fe6de2812861ec363964d92b89b06))
* A pooling client is in the hyper-util crate.
([bb3af17c](https://github.com/hyperium/hyper/commit/bb3af17ce1a3841e9170adabcce595c7c8743ea7))
* Tower `Service` utilities will exist in `hyper-util`.
([889fa2d8](https://github.com/hyperium/hyper/commit/889fa2d87252108eb7668b8bf034ffcc30985117))
### v0.14.19 (2022-05-27)
#### Bug Fixes
* **http1:** fix preserving header case without enabling ffi (#2820) ([6a35c175](https://github.com/hyperium/hyper/commit/6a35c175f2b416851518b5831c2c7827d6dbd822))
* **server:** don't add implicit content-length to HEAD responses (#2836) ([67b73138](https://github.com/hyperium/hyper/commit/67b73138f110979f3c77ef7b56588f018837e592))
#### Features
* **server:**
* add `Connection::http2_max_header_list_size` option (#2828) ([a32658c1](https://github.com/hyperium/hyper/commit/a32658c1ae7f1261fa234a767df963be4fc63521), closes [#2826](https://github.com/hyperium/hyper/issues/2826))
* add `AddrStream::local_addr()` (#2816) ([ffbf610b](https://github.com/hyperium/hyper/commit/ffbf610b1631cabfacb20886270e3c137fa93800), closes [#2773](https://github.com/hyperium/hyper/issues/2773))
#### Breaking Changes
* **ffi (unstable):**
* `hyper_clientconn_options_new` no longer sets the `http1_preserve_header_case` connection option by default.
Users should now call `hyper_clientconn_options_set_preserve_header_case` if they desire that functionality. ([78de8914](https://github.com/hyperium/hyper/commit/78de8914eadeab4b9a2c71a82c77b2ce33fe6c74))
### v0.14.18 (2022-03-22)
#### Bug Fixes
* **ffi:** don't build C libraries by default ([1c663706](https://github.com/hyperium/hyper/commit/1c6637060e36654ddb2fdfccb0d146c7ad527476))
#### Features
* **client:** add `HttpInfo::local_addr()` method ([055b4e7e](https://github.com/hyperium/hyper/commit/055b4e7ea6bd22859c20d60776b0c8f20d27498e), closes [#2767](https://github.com/hyperium/hyper/issues/2767))
### v0.14.17 (2022-02-10)
#### Bug Fixes
* **client:** avoid panics in uses of `Instant` (#2746) ([dcdd6d10](https://github.com/hyperium/hyper/commit/dcdd6d109069949ee68ba70ece4a2b4f21079479))
#### Features
* **client:** implement the HTTP/2 extended CONNECT protocol from RFC 8441 (#2682) ([5ec094ca](https://github.com/hyperium/hyper/commit/5ec094caa5c999e6f919a2bc82f5f3b7d40c2d8a))
* **error:** add `Error::message` (#2737) ([6932896a](https://github.com/hyperium/hyper/commit/6932896a7fca58fe461269461f925da8fd4e8d8a), closes [#2732](https://github.com/hyperium/hyper/issues/2732))
* **http1:** implement obsolete line folding (#2734) ([1f0c177b](https://github.com/hyperium/hyper/commit/1f0c177b35b14054eb1e5108e75f8bd3ff52813e))
### v0.14.16 (2021-12-09)
#### Bug Fixes
* **http1:** return 414 when URI contains more than 65534 characters (#2706) ([5f938fff](https://github.com/hyperium/hyper/commit/5f938fffa64df23a2e4af81ed4e6d8bd760e2d05), closes [#2701](https://github.com/hyperium/hyper/issues/2701))
* **http2:** received `Body::size_hint()` now return 0 if implicitly empty (#2715) ([84b78b6c](https://github.com/hyperium/hyper/commit/84b78b6c877ff9aaa28d1e348a5deb63a9282503))
* **server:** use case-insensitive comparison for Expect: 100-continue (#2709) ([7435cc33](https://github.com/hyperium/hyper/commit/7435cc3399895643062f4e399fae6d5b20b049a1), closes [#2708](https://github.com/hyperium/hyper/issues/2708))
#### Features
* **http2:** add `http2_max_send_buf_size` option to client and server ([bff977b7](https://github.com/hyperium/hyper/commit/bff977b73ca8d737f5492c86c09fd64735c45461))
* **server:** add HTTP/1 header read timeout option (#2675) ([842c6553](https://github.com/hyperium/hyper/commit/842c6553a5414a3a4a0fbf973079200612a9c3d2), closes [#2457](https://github.com/hyperium/hyper/issues/2457))
### v0.14.15 (2021-11-16)
#### Bug Fixes
* **client:** cancel blocking DNS lookup if `GaiFuture` is dropped ([174b553d](https://github.com/hyperium/hyper/commit/174b553d)
#### Features
* **http1:** add `http1_writev(bool)` options to Client and Server builders, to allow forcing vectored writes ([80627141](https://github.com/hyperium/hyper/commit/80627141))
* **upgrade:** allow http upgrades with any body type ([ab469eb3](https://github.com/hyperium/hyper/commit/ab469eb3c6cd5e7a035d734f3d21ff4d2d6a21ab))
### v0.14.14 (2021-10-22)
#### Bug Fixes
* **client:**
* make ResponseFuture implement Sync ([bd6c35b9](https://github.com/hyperium/hyper/commit/bd6c35b98f9513f14ed9cecad933bc7fdb8635ea))
* remove ipv6 square brackets before resolving ([910e0268](https://github.com/hyperium/hyper/commit/910e02687df3245aae4bc519fb0bd7eb6a34db7d))
#### Features
* **h2:** always include original h2 error on broken pipe ([6169db25](https://github.com/hyperium/hyper/commit/6169db250c932dd012d391389826cd34833077b4))
* **server:** Remove Send + Sync requirement for Body in with_graceful_shutdown ([1d553e52](https://github.com/hyperium/hyper/commit/1d553e52c6953ea3b039f5c3f89d35cb56e2436a))
### v0.14.13 (2021-09-16)
#### Bug Fixes
* **client:** don't reuse a connection while still flushing ([c88011da](https://github.com/hyperium/hyper/commit/c88011da4ed5b5ca9107c4a2339a7ab054c5f27f))
* **server:** convert panic to error if Connection::without_shutdown called on HTTP/2 conn ([ea3e2282](https://github.com/hyperium/hyper/commit/ea3e228287e714b97aa44c840a487abd3a915e15))
#### Features
* **ffi:** add hyper_request_set_uri_parts ([a54689b9](https://github.com/hyperium/hyper/commit/a54689b921ca16dd0f29b3f4a74feae60218db34))
* **lib:**
* Export more things with Cargo features (server, !http1, !http2) ([0a4b56ac](https://github.com/hyperium/hyper/commit/0a4b56acb82ef41a3336f482b240c67c784c434f))
* Export rt module independently of Cargo features ([cf6f62c7](https://github.com/hyperium/hyper/commit/cf6f62c71eda3b3a8732d86387e4ed8711cf9a86))
### v0.14.12 (2021-08-24)
#### Bug Fixes
* **ffi:** on_informational callback had no headers ([39b6d01a](https://github.com/hyperium/hyper/commit/39b6d01aa0e520077bb25e16811f5ece00a224d6))
* **http1:** apply header title case for consecutive dashes (#2613) ([684f2fa7](https://github.com/hyperium/hyper/commit/684f2fa76d44fa2b1b063ad0443a1b0d16dfad0e))
* **http2:** improve errors emitted by HTTP2 `Upgraded` stream shutdown (#2622) ([be08648e](https://github.com/hyperium/hyper/commit/be08648e8298cdb13e9879ee761a73f827268962))
#### Features
* **client:** expose http09 and http1 options on `client::conn::Builder` (#2611) ([73bff4e9](https://github.com/hyperium/hyper/commit/73bff4e98c372ce04b006370c0b0d2af29ea8718), closes [#2461](https://github.com/hyperium/hyper/issues/2461))
### v0.14.11 (2021-07-21)
#### Bug Fixes
* **client:** retry when pool checkout returns closed HTTP2 connection (#2585) ([52214f39](https://github.com/hyperium/hyper/commit/52214f391c0a18dc66d1ccff9c0c004c5da85002))
* **http2:**
* improve I/O errors emitted by H2Upgraded (#2598) ([f51c677d](https://github.com/hyperium/hyper/commit/f51c677dec9debf60cb336dc938bae103adf17a0))
* preserve `proxy-authenticate` and `proxy-authorization` headers (#2597) ([52435701](https://github.com/hyperium/hyper/commit/5243570137ae49628cb387fff5611eea0add33bf))
#### Features
* **ffi:** add hyper_request_on_informational ([25d18c0b](https://github.com/hyperium/hyper/commit/25d18c0b74ccf9e51f986daa3b2b98c0109f827a))
### v0.14.10 (2021-07-07)
#### Bug Fixes
* **http1:**
* reject content-lengths that have a plus sign prefix ([06335158](https://github.com/hyperium/hyper/commit/06335158ca48724db9bf074398067d2db08613e7))
* protect against overflow in chunked decoder ([efd9a982](https://github.com/hyperium/hyper/commit/efd9a9821fd2f1ae04b545094de76a435b62e70f))
#### Features
* **ffi:** add option to get raw headers from response ([8c89a8c1](https://github.com/hyperium/hyper/commit/8c89a8c1665b6fbec3f13b8c0e84c79464179c89))
### v0.14.9 (2021-06-07)
#### Bug Fixes
* **http1:** reduce memory used with flatten write strategy ([eb0c6463](https://github.com/hyperium/hyper/commit/eb0c64639503bbd4f6e3b1ce3a02bff8eeea7ee8))
### v0.14.8 (2021-05-25)
#### Features
* **client:** allow to config http2 max concurrent reset streams (#2535) ([b9916c41](https://github.com/hyperium/hyper/commit/b9916c410182c6225e857f0cded355ea1b74c865))
* **error:** add `Error::is_parse_too_large` and `Error::is_parse_status` methods (#2538) ([960a69a5](https://github.com/hyperium/hyper/commit/960a69a5878ede82c56f50ac1444a9e75e885a8f))
* **http2:**
* Implement Client and Server CONNECT support over HTTP/2 (#2523) ([5442b6fa](https://github.com/hyperium/hyper/commit/5442b6faddaff9aeb7c073031a3b7aa4497fda4d), closes [#2508](https://github.com/hyperium/hyper/issues/2508))
* allow HTTP/2 requests by ALPN when http2_only is unset (#2527) ([be9677a1](https://github.com/hyperium/hyper/commit/be9677a1e782d33c4402772e0fc4ef0a4c49d507))
#### Performance
* **http2:** reduce amount of adaptive window pings as BDP stabilizes (#2550) ([4cd06bf2](https://github.com/hyperium/hyper/commit/4cd06bf2))
### v0.14.7 (2021-04-22)
#### Bug Fixes
* **http1:** http1_title_case_headers should move Builder ([a303b3c3](https://github.com/hyperium/hyper/commit/a303b3c329e6b8ecfa1da0b9b9e94736628167e0))
#### Features
* **server:** implement forgotten settings for case preserving ([4fd6c4cb](https://github.com/hyperium/hyper/commit/4fd6c4cb0b58bb0831ae0f876d858aba1588d0e3))
### v0.14.6 (2021-04-21)
#### Features
* **client:** add option to allow misplaced spaces in HTTP/1 responses (#2506) ([11345394](https://github.com/hyperium/hyper/commit/11345394d968d4817e1a0ee2550228ac0ae7ce74))
* **http1:** add options to preserve header casing (#2480) ([dbea7716](https://github.com/hyperium/hyper/commit/dbea7716f157896bf7d2d417be7b4e382e7dc34f), closes [#2313](https://github.com/hyperium/hyper/issues/2313))
### v0.14.5 (2021-03-26)
#### Bug Fixes
* **client:** omit default port from automatic Host headers (#2441) ([0b11eee9](https://github.com/hyperium/hyper/commit/0b11eee9bde421cdc1680cadabfd38c5aff8e62f))
* **headers:** Support multiple Content-Length values on same line (#2471) ([48fdaf16](https://github.com/hyperium/hyper/commit/48fdaf160689f333e9bb63388d0b1d0fa29a1391), closes [#2470](https://github.com/hyperium/hyper/issues/2470))
* **server:** skip automatic Content-Length headers when not allowed (#2216) ([8cbf9527](https://github.com/hyperium/hyper/commit/8cbf9527dfb313b3f84fcd83260c5c72ce4a1beb), closes [#2215](https://github.com/hyperium/hyper/issues/2215))
#### Features
* **client:** allow HTTP/0.9 responses behind a flag (#2473) ([68d4e4a3](https://github.com/hyperium/hyper/commit/68d4e4a3db91fb43f41a8c4fce1175ddb56816af), closes [#2468](https://github.com/hyperium/hyper/issues/2468))
* **server:** add `AddrIncoming::from_listener` constructor (#2439) ([4c946af4](https://github.com/hyperium/hyper/commit/4c946af49cc7fbbc6bd4894283a654625c2ea383))
### v0.14.4 (2021-02-05)
#### Bug Fixes
* **build**: Fix compile error when only `http1` feature was enabled.
### v0.14.3 (2021-02-05)
#### Bug Fixes
* **client:** HTTP/1 client "Transfer-Encoding" repair code would panic (#2410) ([2c8121f1](https://github.com/hyperium/hyper/commit/2c8121f1735aa8efeb0d5e4ef595363c373ba470), closes [#2409](https://github.com/hyperium/hyper/issues/2409))
* **http1:** fix server misinterpreting multiple Transfer-Encoding headers ([8f93123e](https://github.com/hyperium/hyper/commit/8f93123efef5c1361086688fe4f34c83c89cec02))
#### Features
* **body:**
* reexport `hyper::body::SizeHint` (#2404) ([9956587f](https://github.com/hyperium/hyper/commit/9956587f83428a5dbe338ba0b55c1dc0bce8c282))
* add `send_trailers` to Body channel's `Sender` (#2387) ([bf8d74ad](https://github.com/hyperium/hyper/commit/bf8d74ad1cf7d0b33b470b1e61625ebac56f9c4c), closes [#2260](https://github.com/hyperium/hyper/issues/2260))
* **ffi:**
* add HYPERE_INVALID_PEER_MESSAGE error code for parse errors ([1928682b](https://github.com/hyperium/hyper/commit/1928682b33f98244435ba6d574677546205a15ec))
* Initial C API for hyper ([3ae1581a](https://github.com/hyperium/hyper/commit/3ae1581a539b67363bd87d9d8fc8635a204eec5d))
### v0.14.2 (2020-12-29)
#### Features
* **client:** expose `connect` types without proto feature (#2377) ([73a59e5f](https://github.com/hyperium/hyper/commit/73a59e5fc7ddedcb7cbd91e97b33385fde57aa10))
* **server:** expose `Accept` without httpX features (#2382) ([a6d4fcbe](https://github.com/hyperium/hyper/commit/a6d4fcbee65bebf461291def75f4c512ec62a664))
### v0.14.1 (2020-12-23)
* Fixes building documentation.
## v0.14.0 (2020-12-23)
#### Bug Fixes
* **client:** log socket option errors instead of returning error (#2361) ([dad5c879](https://github.com/hyperium/hyper/commit/dad5c8792fec7b586b41b5237bc161d8f0c09f72), closes [#2359](https://github.com/hyperium/hyper/issues/2359))
* **http1:**
* ignore chunked trailers (#2357) ([1dd761c8](https://github.com/hyperium/hyper/commit/1dd761c87de226261599ff2518fe9d231ba1c82d), closes [#2171](https://github.com/hyperium/hyper/issues/2171))
* ending close-delimited body should close (#2322) ([71f34024](https://github.com/hyperium/hyper/commit/71f340242120f1ea52c7446b4bae37b894b83912))
#### Features
* **client:**
* change DNS Resolver to resolve to SocketAddrs (#2346) ([b4e24332](https://github.com/hyperium/hyper/commit/b4e24332a0cd44068a806081d51686f50c086056), closes [#1937](https://github.com/hyperium/hyper/issues/1937))
* Make `client` an optional feature ([4e55583d](https://github.com/hyperium/hyper/commit/4e55583d30a597884883f1a51b678f5c57c76765))
* **http1:** Make HTTP/1 support an optional feature ([2a19ab74](https://github.com/hyperium/hyper/commit/2a19ab74ed69bc776da25544e98979c9fb6e1834))
* **http2:** Make HTTP/2 support an optional feature ([b819b428](https://github.com/hyperium/hyper/commit/b819b428d314f2203642a015545967601b8e518a))
* **lib:**
* Upgrade to Tokio 1.0, Bytes 1.0, http-body 0.4 (#2369) ([fad42acc](https://github.com/hyperium/hyper/commit/fad42acc79b54ce38adf99c58c894f29fa2665ad), closes [#2370](https://github.com/hyperium/hyper/issues/2370))
* remove dependency on `tracing`'s `log` feature (#2342) ([db32e105](https://github.com/hyperium/hyper/commit/db32e1050cf1eae63af0365c97e920f1295b6bea), closes [#2326](https://github.com/hyperium/hyper/issues/2326))
* disable all optional features by default (#2336) ([ed2b22a7](https://github.com/hyperium/hyper/commit/ed2b22a7f66899d338691552fbcb6c0f2f4e06b9))
* **server:** Make the `server` code an optional feature (#2334) ([bdb5e5d6](https://github.com/hyperium/hyper/commit/bdb5e5d6946f4e3f8115a6b1683aff6a04df73de))
* **upgrade:** Moved HTTP upgrades off `Body` to a new API (#2337) ([121c3313](https://github.com/hyperium/hyper/commit/121c33132c0950aaa422848cdc43f6691ddf5785), closes [#2086](https://github.com/hyperium/hyper/issues/2086))
#### Breaking Changes
* hyper depends on `tokio` v1 and `bytes` v1.
* Custom resolvers used with `HttpConnector` must change
to resolving to an iterator of `SocketAddr`s instead of `IpAddr`s.
([b4e24332](https://github.com/hyperium/hyper/commit/b4e24332a0cd44068a806081d51686f50c086056))
* hyper no longer emits `log` records automatically.
If you need hyper to integrate with a `log` logger (as opposed to `tracing`),
you can add `tracing = { version = "0.1", features = ["log"] }` to activate them.
([db32e105](https://github.com/hyperium/hyper/commit/db32e1050cf1eae63af0365c97e920f1295b6bea))
* Removed `http1_writev` methods from `client::Builder`,
`client::conn::Builder`, `server::Builder`, and `server::conn::Builder`.
Vectored writes are now enabled based on whether the `AsyncWrite`
implementation in use supports them, rather than though adaptive
detection. To explicitly disable vectored writes, users may wrap the IO
in a newtype that implements `AsyncRead` and `AsyncWrite` and returns
`false` from its `AsyncWrite::is_write_vectored` method.
([d6aadb83](https://github.com/hyperium/hyper/commit/d6aadb830072959497f414c01bcdba4c8e681088))
* The method `Body::on_upgrade()` is gone. It is
essentially replaced with `hyper::upgrade::on(msg)`.
([121c3313](https://github.com/hyperium/hyper/commit/121c33132c0950aaa422848cdc43f6691ddf5785))
* All optional features have been disabled by default.
([ed2b22a7](https://github.com/hyperium/hyper/commit/ed2b22a7f66899d338691552fbcb6c0f2f4e06b9))
* The HTTP server code is now an optional feature. To
enable the server, add `features = ["server"]` to the dependency in
your `Cargo.toml`.
([bdb5e5d6](https://github.com/hyperium/hyper/commit/bdb5e5d6946f4e3f8115a6b1683aff6a04df73de))
* The HTTP client of hyper is now an optional feature. To
enable the client, add `features = ["client"]` to the dependency in
your `Cargo.toml`.
([4e55583d](https://github.com/hyperium/hyper/commit/4e55583d30a597884883f1a51b678f5c57c76765))
* This puts all HTTP/1 methods and support behind an
`http1` cargo feature, which will not be enabled by default. To use
HTTP/1, add `features = ["http1"]` to the hyper dependency in your
`Cargo.toml`.
([2a19ab74](https://github.com/hyperium/hyper/commit/2a19ab74ed69bc776da25544e98979c9fb6e1834))
* This puts all HTTP/2 methods and support behind an
`http2` cargo feature, which will not be enabled by default. To use
HTTP/2, add `features = ["http2"]` to the hyper dependency in your
`Cargo.toml`.
([b819b428](https://github.com/hyperium/hyper/commit/b819b428d314f2203642a015545967601b8e518a))
### v0.13.9 (2020-11-02)
#### Bug Fixes
* **client:** fix panic when addrs in ConnectingTcpRemote is empty (#2292) ([01103da5](https://github.com/hyperium/hyper/commit/01103da5d9b15e2a7fdc2f1dfec2c23a890d5c16), closes [#2291](https://github.com/hyperium/hyper/issues/2291))
* **http2:** reschedule keep alive interval timer once a pong is received ([2a938d96](https://github.com/hyperium/hyper/commit/2a938d96aec62603dcb548834676ae2c71ae8be2), closes [#2310](https://github.com/hyperium/hyper/issues/2310))
#### Features
* **client:**
* add `HttpConnector::set_local_addresses` to set both IPv6 and IPv4 local addrs ( ([fb19f3a8](https://github.com/hyperium/hyper/commit/fb19f3a86997af1c8a31a7d5ce6f2b018c9b5a0d))
* Add accessors to `Connected` fields (#2290) ([2dc9768d](https://github.com/hyperium/hyper/commit/2dc9768d2d3884afa20c08b7cd8782c870d925d2))
### v0.13.8 (2020-09-18)
#### Bug Fixes
* **http1:** return error if user body ends prematurely ([1ecbcbb1](https://github.com/hyperium/hyper/commit/1ecbcbb119e221f60d37b934b81d18493ebded1b), closes [#2263](https://github.com/hyperium/hyper/issues/2263))
#### Features
* **lib:** Setting `http1_writev(true)` will now force writev queue usage ([187c22af](https://github.com/hyperium/hyper/commit/187c22afb5a13d4fa9a3b938a1d71b11b337ac97), closes [#2282](https://github.com/hyperium/hyper/issues/2282))
* **server:** implement `AsRawFd` for `AddrStream` (#2246) ([b5d5e214](https://github.com/hyperium/hyper/commit/b5d5e21449eb613a3c92dcced6f38d227e405594), closes [#2245](https://github.com/hyperium/hyper/issues/2245))
### v0.13.7 (2020-07-13)
#### Bug Fixes
* **client:** don't panic in DNS resolution when task cancelled (#2229) ([0d0d3635](https://github.com/hyperium/hyper/commit/0d0d3635476ba22e5a2b39b0e4b243f57f1f36d2))
#### Features
* **client:** impl tower_service::Service for &Client (#2089) ([77c3b5bc](https://github.com/hyperium/hyper/commit/77c3b5bc0c0d58ecd9f3c004287f65b8a94cc429))
* **http2:** configure HTTP/2 frame size in the high-level builders too (#2214) ([2354a7ee](https://github.com/hyperium/hyper/commit/2354a7eec352b1f72cd8989d29d73dff211403a1))
* **lib:** Move from `log` to `tracing` in a backwards-compatible way (#2204) ([9832aef9](https://github.com/hyperium/hyper/commit/9832aef9eeaeff8979354d5de04b8706ff79a233))
### v0.13.6 (2020-05-29)
#### Features
* **body:** remove Sync bound for Body::wrap_stream ([042c7706](https://github.com/hyperium/hyper/commit/042c770603a212f22387807efe4fc672959df40c))
* **http2:** allow configuring the HTTP/2 frame size ([b6446456](https://github.com/hyperium/hyper/commit/b64464562a02a642a3cf16ea072f39621da21980))
### v0.13.5 (2020-04-17)
#### Bug Fixes
* **server:** fix panic in Connection::graceful_shutdown ([fce3ddce](https://github.com/hyperium/hyper/commit/fce3ddce4671e7df439a9d8fdc469b079fc07318))
### v0.13.4 (2020-03-20)
#### Bug Fixes
* **http1:** try to drain connection buffer if user drops Body ([d838d54f](https://github.com/hyperium/hyper/commit/d838d54fdf0fc4a613612f68274f3520f333dd8e))
#### Features
* **http2:** add HTTP2 keep-alive support for client and server ([9a8413d9](https://github.com/hyperium/hyper/commit/9a8413d91081ad5a949276f05337e984c455e251))
### v0.13.3 (2020-03-03)
#### Features
* **client:** rename `client::Builder` pool options (#2142) ([a82fd6c9](https://github.com/hyperium/hyper/commit/a82fd6c94aa4ce11fe685f9ccfb85c596d596c6e))
* **http2:** add adaptive window size support using BDP (#2138) ([48102d61](https://github.com/hyperium/hyper/commit/48102d61228b592b466af273a81207e729315681))
* **server:** add `poll_peek` to `AddrStream` (#2127) ([24d53d3f](https://github.com/hyperium/hyper/commit/24d53d3f66f843a6c19204cc7c52cd80e327d41a))
### v0.13.2 (2020-01-29)
#### Bug Fixes
* **body:** return exactly 0 SizeHint for empty body (#2122) ([dc882047](https://github.com/hyperium/hyper/commit/dc88204716664d12e20598c78cb87cd44c6f23af))
* **client:** strip path from Uri before calling Connector (#2109) ([ba2a144f](https://github.com/hyperium/hyper/commit/ba2a144f8b81042247088215425f91760d8694a1))
* **http1:**
* only send `100 Continue` if request body is polled ([c4bb4db5](https://github.com/hyperium/hyper/commit/c4bb4db5c219459b37d796f9aa2b3cdc93325621))
* remove panic for HTTP upgrades that have been ignored (#2115) ([1881db63](https://github.com/hyperium/hyper/commit/1881db6391acc949384f8ddfcac8c82a2b133c8d), closes [#2114](https://github.com/hyperium/hyper/issues/2114))
* **http2:** don't add client content-length if method doesn't require it ([fb90d30c](https://github.com/hyperium/hyper/commit/fb90d30c02d8f7cdc9a643597d5c4ca7a123f3dd))
#### Features
* **service:** Implement Clone/Copy on ServiceFn and MakeServiceFn (#2104) ([a5720fab](https://github.com/hyperium/hyper/commit/a5720fab4ced447b8ade43cc1ce8b35442ebf234))
### v0.13.1 (2019-12-13)
#### Bug Fixes
* **http1:** fix response with non-chunked transfer-encoding to be close-delimited ([cb71d2cd](https://github.com/hyperium/hyper/commit/cb71d2cdbd22e538663e724916dc343430efcf29), closes [#2058](https://github.com/hyperium/hyper/issues/2058))
#### Features
* **body:** implement `HttpBody` for `Request` and `Response` ([4b6099c7](https://github.com/hyperium/hyper/commit/4b6099c7aa558e6b1fda146ce6179cb0c67858d7), closes [#2067](https://github.com/hyperium/hyper/issues/2067))
* **client:** expose `hyper::client::connect::Connect` trait alias ([2553ea1a](https://github.com/hyperium/hyper/commit/2553ea1a7ae3d11f0232a5818949146fa3f68a29))
## v0.13.0 (2019-12-10)
#### Bug Fixes
* **client:**
* fix polling dispatch channel after it has closed ([039281b8](https://github.com/hyperium/hyper/commit/039281b89cf1ab54a0ecc10c5e7fee56d4da0cf4))
* fix panic from unreachable code ([e6027bc0](https://github.com/hyperium/hyper/commit/e6027bc02db92d1137c54a26eef2e1cb4d810e25))
* **dependencies:** require correct bytes minimum version (#1975) ([536b1e18](https://github.com/hyperium/hyper/commit/536b1e184e9704f50716cf10bf9d4e11a79337da))
* **server:**
* change `Builder` window size methods to be by-value ([a22dabd0](https://github.com/hyperium/hyper/commit/a22dabd0935e5471fb6b7e511fc9c585ced0a53a), closes [#1814](https://github.com/hyperium/hyper/issues/1814))
* ignore expect-continue with no body in debug mode ([ca5836f1](https://github.com/hyperium/hyper/commit/ca5836f1ece7c4a67172bcbe72745cb49e8951b0), closes [#1843](https://github.com/hyperium/hyper/issues/1843))
* Remove unneeded `'static` bound of `Service` on `Connection` (#1971) ([4d147126](https://github.com/hyperium/hyper/commit/4d14712643e4c2ba235a569bb5d9e3099101c1a1))
#### Features
* **body:**
* change `Sender::send_data` to an `async fn`. ([62a96c07](https://github.com/hyperium/hyper/commit/62a96c077b85792fbf6eb080ec8fec646c47e385))
* require `Sync` when wrapping a dynamic `Stream` ([44413721](https://github.com/hyperium/hyper/commit/4441372121e8b278ac773ddd4e408a642dadf2d8))
* add `body::aggregate` and `body::to_bytes` functions ([8ba9a8d2](https://github.com/hyperium/hyper/commit/8ba9a8d2c4bab0f44b3f94a326b3b91c82d7877e))
* replace `Chunk` type with `Bytes` ([5a598757](https://github.com/hyperium/hyper/commit/5a59875742500672f253719c1e1a16b4eddfacc7), closes [#1931](https://github.com/hyperium/hyper/issues/1931))
* replace the `Payload` trait with `HttpBody` ([c63728eb](https://github.com/hyperium/hyper/commit/c63728eb38182ad2f93edd729dbf50f3d5c40479))
* **client:**
* impl tower_service::Service for Client ([edbd10ac](https://github.com/hyperium/hyper/commit/edbd10ac96c5cc6dbeca80ada80f143dbd13d118))
* provide tower::Service support for clients (#1915) ([eee2a728](https://github.com/hyperium/hyper/commit/eee2a728797346f8c96c15c5958a05432a4e4453))
* change connectors to return an `impl Connection` ([4d7a2266](https://github.com/hyperium/hyper/commit/4d7a2266b88b2c5c92231bcd2bd75d5842198add))
* remove `Destination` for `http::Uri` in connectors ([319e8aee](https://github.com/hyperium/hyper/commit/319e8aee1571d8d3639b3259e7a1edb964e6a26c))
* filter remote IP addresses by family of given local IP address ([131962c8](https://github.com/hyperium/hyper/commit/131962c86ab0a31c2413261cf4532eca88d67dcb))
* change `Resolve` to be `Service<Name>` ([9d9233ce](https://github.com/hyperium/hyper/commit/9d9233ce7ceddb0fa6f5e725b0a781929add3c58), closes [#1903](https://github.com/hyperium/hyper/issues/1903))
* change `Connect` trait into an alias for `Service` ([d67e49f1](https://github.com/hyperium/hyper/commit/d67e49f1491327a78f804bab32804dc6c73d2974), closes [#1902](https://github.com/hyperium/hyper/issues/1902))
* change `GaiResolver` to use a global blocking threadpool ([049b5132](https://github.com/hyperium/hyper/commit/049b5132dbb6199a32e1795d005003f99d0e0b74))
* Add connect timeout to HttpConnector (#1972) ([4179297a](https://github.com/hyperium/hyper/commit/4179297ac9805af8f84d54525e089ff3f19008ab))
* **lib:**
* update to `std::future::Future` ([8f4b05ae](https://github.com/hyperium/hyper/commit/8f4b05ae78567dfc52236bc83d7be7b7fc3eebb0))
* add optional `tcp` feature, split from `runtime` ([5b348b82](https://github.com/hyperium/hyper/commit/5b348b821c3f43d8dd71179862190932fcca6a1c))
* make `Stream` trait usage optional behind the `stream` feature, enabled by default ([0b03b730](https://github.com/hyperium/hyper/commit/0b03b730531654b1b5f632099386ab27c94eb9f4), closes [#2034](https://github.com/hyperium/hyper/issues/2034))
* update Tokio, bytes, http, h2, and http-body ([cb3f39c2](https://github.com/hyperium/hyper/commit/cb3f39c2dc6340060f6b17f354f04c872a947574))
* **rt:** introduce `rt::Executor` trait ([6ae5889f](https://github.com/hyperium/hyper/commit/6ae5889f8378b6454d4dc620f33bd1678d0e00e4), closes [#1944](https://github.com/hyperium/hyper/issues/1944))
* **server:**
* introduce `Accept` trait ([b3e55062](https://github.com/hyperium/hyper/commit/b3e5506261c33dcaca39a126e891a0b9d5df5eea))
* give `Server::local_addr` a more general type ([3cc93e79](https://github.com/hyperium/hyper/commit/3cc93e796aad59b3996fc26b8839a783e0307925))
* change `http1_half_close` option default to disabled ([7e31fd88](https://github.com/hyperium/hyper/commit/7e31fd88a86ac032d05670ba4e293e3e5fcccbaf))
* **service:**
* use tower_service::Service for hyper::service ([ec520d56](https://github.com/hyperium/hyper/commit/ec520d5602d819fd92f497cc230df436c1a39eb0))
* rename `Service` to `HttpService`, re-export `tower::Service` ([4f274399](https://github.com/hyperium/hyper/commit/4f2743991c227836c3886778512afe1297df3e5b), closes [#1959](https://github.com/hyperium/hyper/issues/1959))
#### Breaking Changes
* All usage of async traits (`Future`, `Stream`,
`AsyncRead`, `AsyncWrite`, etc) are updated to newer versions.
([8f4b05ae](https://github.com/hyperium/hyper/commit/8f4b05ae78567dfc52236bc83d7be7b7fc3eebb0))
* All usage of `hyper::Chunk` should be replaced with
`bytes::Bytes` (or `hyper::body::Bytes`).
([5a598757](https://github.com/hyperium/hyper/commit/5a59875742500672f253719c1e1a16b4eddfacc7))
* Using a `Body` as a `Stream`, and constructing one via
`Body::wrap_stream`, require enabling the `stream` feature.
([511ea388](https://github.com/hyperium/hyper/commit/511ea3889b5cceccb3a42aa72465fe38adef71a4))
* Calls to `GaiResolver::new` and `HttpConnector::new` no
longer should pass an integer argument for the number of threads.
([049b5132](https://github.com/hyperium/hyper/commit/049b5132dbb6199a32e1795d005003f99d0e0b74))
* Connectors no longer return a tuple of
`(T, Connected)`, but a single `T: Connection`.
([4d7a2266](https://github.com/hyperium/hyper/commit/4d7a2266b88b2c5c92231bcd2bd75d5842198add))
* All usage of `hyper::client::connect::Destination`
should be replaced with `http::Uri`.
([319e8aee](https://github.com/hyperium/hyper/commit/319e8aee1571d8d3639b3259e7a1edb964e6a26c))
* All usage of `hyper::body::Payload` should be replaced
with `hyper::body::HttpBody`.
([c63728eb](https://github.com/hyperium/hyper/commit/c63728eb38182ad2f93edd729dbf50f3d5c40479))
* Any type passed to the `executor` builder methods must
now implement `hyper::rt::Executor`.
`hyper::rt::spawn` usage should be replaced with `tokio::task::spawn`.
`hyper::rt::run` usage should be replaced with `#[tokio::main]` or
managing a `tokio::runtime::Runtime` manually.
([6ae5889f](https://github.com/hyperium/hyper/commit/6ae5889f8378b6454d4dc620f33bd1678d0e00e4))
* The `Resolve` trait is gone. All custom resolvers should
implement `tower::Service` instead.
The error type of `HttpConnector` has been changed away from
`std::io::Error`.
([9d9233ce](https://github.com/hyperium/hyper/commit/9d9233ce7ceddb0fa6f5e725b0a781929add3c58))
* Any manual implementations of `Connect` must instead
implement `tower::Service<Uri>`.
([d67e49f1](https://github.com/hyperium/hyper/commit/d67e49f1491327a78f804bab32804dc6c73d2974))
* The server's behavior will now by default close
connections when receiving a read EOF. To allow for clients to close
the read half, call `http1_half_close(true)` when configuring a
server.
([7e31fd88](https://github.com/hyperium/hyper/commit/7e31fd88a86ac032d05670ba4e293e3e5fcccbaf))
* Passing a `Stream` to `Server::builder` or
`Http::serve_incoming` must be changed to pass an `Accept` instead. The
`stream` optional feature can be enabled, and then a stream can be
converted using `hyper::server::accept::from_stream`.
([b3e55062](https://github.com/hyperium/hyper/commit/b3e5506261c33dcaca39a126e891a0b9d5df5eea))
* Usage of `send_data` should either be changed to
async/await or use `try_send_data`.
([62a96c07](https://github.com/hyperium/hyper/commit/62a96c077b85792fbf6eb080ec8fec646c47e385))
### v0.12.35 (2019-09-13)
#### Features
* **body:** identify aborted body write errors ([32869224](https://github.com/hyperium/hyper/commit/3286922460ab63d0a804d8170d862ff4ba5951dd))
### v0.12.34 (2019-09-04)
#### Bug Fixes
* **client:** allow client GET requests with explicit body headers ([23fc8b08](https://github.com/hyperium/hyper/commit/23fc8b0806e7fde435ca00479cd5e3c8c5bdeee7), closes [#1925](https://github.com/hyperium/hyper/issues/1925))
### v0.12.33 (2019-09-04)
### v0.12.32 (2019-07-08)
#### Features
* **client:** `HttpConnector`: allow to set socket buffer sizes ([386109c4](https://github.com/hyperium/hyper/commit/386109c421c21e6e2d70e76d7dd072ef3bb62c58))
### v0.12.31 (2019-06-25)
### v0.12.30 (2019-06-14)
#### Bug Fixes
* **http1:** force always-ready connections to yield after a few spins ([8316f96d](https://github.com/hyperium/hyper/commit/8316f96d807454b76cde3cc6a7be552c02000529))
* **http2:** correctly propagate HTTP2 request cancellation ([50198851](https://github.com/hyperium/hyper/commit/50198851a2b1e47c5ad60565eacb712fb3df1ad6))
### v0.12.29 (2019-05-16)
#### Bug Fixes
* **server:** skip automatic Content-Length header for HTTP 304 responses ([b342c38f](https://github.com/hyperium/hyper/commit/b342c38f08972fe8be4ef9844e30f1e7a121bbc4), closes [#1797](https://github.com/hyperium/hyper/issues/1797))
#### Features
* **body:** implement `http_body::Body` for `hyper::Body` ([2d9f3490](https://github.com/hyperium/hyper/commit/2d9f3490aa04393a12854680aa3e6d6117ba2407))
* **client:** Implement `TryFrom` for `Destination` (#1810) ([d1183a80](https://github.com/hyperium/hyper/commit/d1183a80278decf3955874629e9cff427edecb05), closes [#1808](https://github.com/hyperium/hyper/issues/1808))
* **server:** add initial window builder methods that take self by-val (#1817) ([8b45af7f](https://github.com/hyperium/hyper/commit/8b45af7f314cea7d1db5cb6990088dd8442aa87b))
### v0.12.28 (2019-04-29)
#### Bug Fixes
* **client:**
* detect HTTP2 connection closures sooner ([e0ec5cad](https://github.com/hyperium/hyper/commit/e0ec5cad9ae3eaa5d9fffeeb636b1363029fcb9c))
* fix a rare connection pool race condition ([4133181b](https://github.com/hyperium/hyper/commit/4133181bb20f8d7e990994b2119c590f832a95f1))
#### Features
* **server:** impl Sink for Body::Sender ([8d70baca](https://github.com/hyperium/hyper/commit/8d70baca611869c1997571e8513717396b13328b), closes [#1781](https://github.com/hyperium/hyper/issues/1781))
### v0.12.27 (2019-04-10)
#### Bug Fixes
* **http2:** fix import of h2::Reason to work on 1.26 ([5680d944](https://github.com/hyperium/hyper/commit/5680d9441903d6c8d17c19b3ea1e054af76bb08d))
### v0.12.26 (2019-04-09)
#### Bug Fixes
* **http2:** send a GOAWAY when the user's Service::poll_ready errors ([42c5efc0](https://github.com/hyperium/hyper/commit/42c5efc085ac71223e4b57d0e1b866e64d41f4e5))
* **server:** prohibit the length headers on successful CONNECT ([d1501a0f](https://github.com/hyperium/hyper/commit/d1501a0fd3b616d3e42459fc83bdd7ebd01d217e), closes [#1783](https://github.com/hyperium/hyper/issues/1783))
#### Features
* **http2:** check `Error::source()` for an HTTP2 error code to send in reset ([fc18b680](https://github.com/hyperium/hyper/commit/fc18b680a5656a0c31bc09c1c70571956a1fd013))
### v0.12.25 (2019-03-01)
#### Bug Fixes
* **client:** coerce HTTP_2 requests to HTTP_11 ([3a6080b1](https://github.com/hyperium/hyper/commit/3a6080b14abecc29c9aed77be6d60d34a12b368c), closes [#1770](https://github.com/hyperium/hyper/issues/1770))
* **http2:** send INTERNAL_ERROR when user's Service errors ([8f926a0d](https://github.com/hyperium/hyper/commit/8f926a0daeaf4716cfb2e6db143c524da34421de))
#### Features
* **error:** implement `Error::source` when available ([4cf22dfa](https://github.com/hyperium/hyper/commit/4cf22dfa2139f072e0ee937de343a0b0b0a77a22), closes [#1768](https://github.com/hyperium/hyper/issues/1768))
* **http2:** Add window size config options for Client and Server ([7dcd4618](https://github.com/hyperium/hyper/commit/7dcd4618c059cc76987a32d3acb75e2aaed4419e), closes [#1771](https://github.com/hyperium/hyper/issues/1771))
* **server:** add `http2_max_concurrent_streams` builder option ([cbae4294](https://github.com/hyperium/hyper/commit/cbae4294c416a64b56f30be7b6494f9934016d1e), closes [#1772](https://github.com/hyperium/hyper/issues/1772))
* **service:**
* add `poll_ready` to `Service` and `MakeService` (#1767) ([0bf30ccc](https://github.com/hyperium/hyper/commit/0bf30ccc68feefb0196d2db9536232e5913598da))
* allow `FnMut` with `service_fn` ([877606d5](https://github.com/hyperium/hyper/commit/877606d5c81195374259561aa98b973a00fa6056))
### v0.12.24 (2019-02-11)
#### Bug Fixes
* **client:** fix panic when CONNECT request doesn't have a port ([d16b2c30](https://github.com/hyperium/hyper/commit/d16b2c30810a2d96ab226997930d953b2fc2626b))
#### Features
* **server:**
* add `http1_max_buf_size` in the `server::Builder` (#1761) ([3e9782c2](https://github.com/hyperium/hyper/commit/3e9782c2a9501a3122df8a54775a1fa7f2386fea))
* add `into_inner` to `AddrStream` (#1762) ([e52f80df](https://github.com/hyperium/hyper/commit/e52f80df5a114844d239561218112a650067f006))
### v0.12.23 (2019-01-24)
#### Bug Fixes
* **http2:** revert http2 refactor causing a client hang ([9aa7e990](https://github.com/hyperium/hyper/commit/9aa7e99010a1a0f086ade27f99cf4b8da00ae750))
#### Features
* **client:** add `conn::Builder::max_buf_size()` ([078ed82d](https://github.com/hyperium/hyper/commit/078ed82dd5fed2f6c4399ff041ef116c712eaaf8), closes [#1748](https://github.com/hyperium/hyper/issues/1748))
### v0.12.22 (2019-01-23)
#### Bug Fixes
* **client:** parse IPv6 hosts correctly in HttpConnector ([c328c62e](https://github.com/hyperium/hyper/commit/c328c62ec29cd328c1c7331bb316fe4a548f11d7))
### v0.12.21 (2019-01-15)
#### Features
* **client:**
* add `Destination::try_from_uri` constructor ([c809542c](https://github.com/hyperium/hyper/commit/c809542c830c8d542877a22dd54b1c5c679ae433))
* Add useful trait impls to Name ([be5ec455](https://github.com/hyperium/hyper/commit/be5ec45571e0b1c6c2b20fe4ab49ef1b0226a004))
* add FromStr impl for Name ([607c4da0](https://github.com/hyperium/hyper/commit/607c4da0b96ca430593599c928c882a17a7914d5))
### v0.12.20 (2019-01-07)
#### Bug Fixes
* **dependencies:** disable unneeded optional tokio features ([e5135dd6](https://github.com/hyperium/hyper/commit/e5135dd6f619b5817e31572c98b45d7c4b34f43a), closes [#1739](https://github.com/hyperium/hyper/issues/1739))
* **http2:** don't consider an h2 send request error as canceled ([cf034e99](https://github.com/hyperium/hyper/commit/cf034e99fa895fdf4b66edf392f8c7ca366448fd))
### v0.12.19 (2018-12-18)
#### Bug Fixes
* **rt:** prevent fallback reactor thread from being created accidentally ([1d253b4d](https://github.com/hyperium/hyper/commit/1d253b4d4759e045409fcf140adda7d327a05c8a))
### v0.12.18 (2018-12-11)
#### Features
* **server:** add `server::conn::AddrIncoming::bind` constructor ([2d5eabde](https://github.com/hyperium/hyper/commit/2d5eabdeed06ea1c88d88dff464929616710ee9a))
### v0.12.17 (2018-12-05)
#### Features
* **error:** add `Error::is_connect` method ([01f64983](https://github.com/hyperium/hyper/commit/01f64983559602b9ebaaeecf6d33e97a88185676))
* **server:**
* add `tcp_sleep_on_accept_errors` builder method ([a6fff13a](https://github.com/hyperium/hyper/commit/a6fff13a392d3394cacb1215f83bd8ec87671566), closes [#1713](https://github.com/hyperium/hyper/issues/1713))
* add `http1_half_close(bool)` option ([73345be6](https://github.com/hyperium/hyper/commit/73345be65f895660492e28e718786b66034a4d03), closes [#1716](https://github.com/hyperium/hyper/issues/1716))
* **service:** export `hyper::service::MakeServiceRef` ([a522c315](https://github.com/hyperium/hyper/commit/a522c3151abd11795d3263f6607a7caf7c19a585))
#### Performance
* **http1:** implement an adaptive read buffer strategy which helps with throughput and memory management ([fd25129d](https://github.com/hyperium/hyper/commit/fd25129dc0e543538ccbd1794d22014bc187e050), closes [#1708](https://github.com/hyperium/hyper/issues/1708))
### v0.12.16 (2018-11-21)
#### Bug Fixes
* **client:** fix connection leak when Response finishes before Request body ([e455fa24](https://github.com/hyperium/hyper/commit/e455fa2452cf45d66de6b4c3dc567e2b5d2368a4), closes [#1717](https://github.com/hyperium/hyper/issues/1717))
#### Features
* **client:** add `http1_read_buf_exact_size` Builder option ([2e7250b6](https://github.com/hyperium/hyper/commit/2e7250b6698407b97961b8fcae78696e94d6ea57))
### v0.12.15 (2018-11-20)
#### Features
* **client:** add client::conn::Builder::executor method ([95446cc3](https://github.com/hyperium/hyper/commit/95446cc338f8055539dd3503c482d649f42a531c))
* **server:** change `NewService` to `MakeService` with connection context ([30870029](https://github.com/hyperium/hyper/commit/30870029b9eb162f566d8dddd007fb6df9cd69af), closes [#1650](https://github.com/hyperium/hyper/issues/1650))
### v0.12.14 (2018-11-07)
#### Bug Fixes
* **header:** fix panic when parsing header names larger than 64kb ([9245e940](https://github.com/hyperium/hyper/commit/9245e9409aeb5bb3e31b7f7c0e125583d1318465))
#### Features
* **client:** add ALPN h2 support for client connectors ([976a77a6](https://github.com/hyperium/hyper/commit/976a77a67360a2590699c0b2bb3a4c3ccc0ff1ba))
### v0.12.13 (2018-10-26)
#### Features
* **client:**
* add `Resolve`, used by `HttpConnector` ([2d5af177](https://github.com/hyperium/hyper/commit/2d5af177c1f0cfa3f592eec56f3a971fd9770f72), closes [#1517](https://github.com/hyperium/hyper/issues/1517))
* adds `HttpInfo` to responses when `HttpConnector` is used ([13d53e1d](https://github.com/hyperium/hyper/commit/13d53e1d0c095a61f64ff1712042aa615122d33d), closes [#1402](https://github.com/hyperium/hyper/issues/1402))
* **dns:**
* export `client::connect::dns` module, and `TokioThreadpoolGaiResolver` type. ([34d780ac](https://github.com/hyperium/hyper/commit/34d780acd0fd7fe6a41b3eca1641791c7a33b366))
* tokio_threadpool::blocking resolver ([1e8d6439](https://github.com/hyperium/hyper/commit/1e8d6439cf4f9c7224fe80f0aeee32e2af1adbb0), closes [#1676](https://github.com/hyperium/hyper/issues/1676))
* **http:** reexport `http` crate ([d55b5efb](https://github.com/hyperium/hyper/commit/d55b5efb890ef04e37825221deae9c57e9e602fa))
* **server:** allow `!Send` Servers ([ced949cb](https://github.com/hyperium/hyper/commit/ced949cb6b798f25c2ffbdb3ebda6858c18393a7))
### v0.12.12 (2018-10-16)
#### Bug Fixes
* **armv7:** split record_header_indices loop to work around rustc/LLVM bug ([30a4f237](https://github.com/hyperium/hyper/commit/30a4f2376a392e50ade48685f92e930385ebb68f))
* **http2:** add Date header if not present for HTTP2 server responses ([37ec724f](https://github.com/hyperium/hyper/commit/37ec724fd6405dd97c5873dddc956df1711b29ab))
* **server:** log and ignore connection errors on newly accepted sockets ([66a857d8](https://github.com/hyperium/hyper/commit/66a857d801c1fc82d35b6da2d27441aa046aae47))
### v0.12.11 (2018-09-28)
#### Bug Fixes
* **client:** allow calling `Destination::set_host` with IPv6 addresses ([af5e4f3e](https://github.com/hyperium/hyper/commit/af5e4f3ec24a490e209e3e73f86207b63ce7191a), closes [#1661](https://github.com/hyperium/hyper/issues/1661))
* **server:** use provided executor if fallback to HTTP2 ([1370a6f8](https://github.com/hyperium/hyper/commit/1370a6f8f06f9906ff75dec904ab9c6d763e37f0))
### v0.12.10 (2018-09-14)
#### Bug Fixes
* **http1:** fix title-case option when header names have symbols ([ca5e520e](https://github.com/hyperium/hyper/commit/ca5e520e7aa6d0a211e3c152c09095d35326ca12))
### v0.12.9 (2018-08-28)
#### Bug Fixes
* **http2:** allow TE "trailers" request headers ([24f11a42](https://github.com/hyperium/hyper/commit/24f11a421d8422714bf023a602d7718b885a39a0), closes [#1642](https://github.com/hyperium/hyper/issues/1642))
* **server:** properly handle keep-alive for HTTP/1.0 ([1448e406](https://github.com/hyperium/hyper/commit/1448e4067b10da6fe4584921314afc1f5f4e3c8d), closes [#1614](https://github.com/hyperium/hyper/issues/1614))
#### Features
* **client:** add `max_idle_per_host` configuration option ([a3c44ded](https://github.com/hyperium/hyper/commit/a3c44ded556b7ef9487ec48cf42fa948d64f5a83))
* **server:** add `Server::with_graceful_shutdown` method ([168c7d21](https://github.com/hyperium/hyper/commit/168c7d2155952ba09f781c331fd67593b820af20), closes [#1575](https://github.com/hyperium/hyper/issues/1575))
### v0.12.8 (2018-08-10)
#### Bug Fixes
* **server:** coerce responses with HTTP2 version to HTTP/1.1 when protocol is 1.x ([195fbb2a](https://github.com/hyperium/hyper/commit/195fbb2a3728460e7f7eca2035461ce055db6cd0))
#### Features
* **server:**
* add Builder::http1_keepalive method ([b459adb4](https://github.com/hyperium/hyper/commit/b459adb43a753ba082f1fc03c90ff4e76625666f))
* add `Server::from_tcp` constructor ([bb4c5e24](https://github.com/hyperium/hyper/commit/bb4c5e24c846995b66e361d1c2446cb81984bbbd), closes [#1602](https://github.com/hyperium/hyper/issues/1602))
* add remote_addr method to AddrStream ([26f3a5ed](https://github.com/hyperium/hyper/commit/26f3a5ed317330db39dd33f49bafd859bc867d8a))
### v0.12.7 (2018-07-23)
#### Bug Fixes
* **http1:** reduce closed connections when body is dropped ([6530a00a](https://github.com/hyperium/hyper/commit/6530a00a8e3449a8fd7e4ed6ad1231b6b1579c38))
### v0.12.6 (2018-07-11)
#### Features
* **client:**
* add ability to include `SO_REUSEADDR` option on sockets ([13862d11](https://github.com/hyperium/hyper/commit/13862d11ad329e5198622ad3e924e1aa05ab2c8a), closes [#1599](https://github.com/hyperium/hyper/issues/1599))
* implement rfc 6555 (happy eyeballs) ([02a9c29e](https://github.com/hyperium/hyper/commit/02a9c29e2e816c8a583f65b372fcf7b8503e6bad))
* **server:** add `Builder::http1_pipeline_flush` configuration ([5b5e3090](https://github.com/hyperium/hyper/commit/5b5e3090955c1b6c1e7a8cb97b43de8d099f5303))
### v0.12.5 (2018-06-28)
### v0.12.4 (2018-06-28)
#### Bug Fixes
* **client:**
* fix keep-alive header detection when parsing responses ([c03c39e0](https://github.com/hyperium/hyper/commit/c03c39e0ffca94bce265db92281a50b2abae6f2b))
* try to reuse connections when pool checkout wins ([f2d464ac](https://github.com/hyperium/hyper/commit/f2d464ac79b47f988bffc826b80cf7d107f80694))
### v0.12.3 (2018-06-25)
#### Features
* **client:** enable CONNECT requests through the `Client` ([2a3844ac](https://github.com/hyperium/hyper/commit/2a3844acc393d42ff1b75f798dcc321a20956bea))
* **http2:** quickly cancel when receiving RST_STREAM ([ffdb4788](https://github.com/hyperium/hyper/commit/ffdb47883190a8889cf30b716294383392a763c5))
### v0.12.2 (2018-06-19)
#### Bug Fixes
* **http2:**
* implement `graceful_shutdown` for HTTP2 server connections ([b7a0c2d5](https://github.com/hyperium/hyper/commit/b7a0c2d5967d9ca22bd5e031166876c81ae80606), closes [#1550](https://github.com/hyperium/hyper/issues/1550))
* send trailers if Payload includes them ([3affe2a0](https://github.com/hyperium/hyper/commit/3affe2a0af445a01acb75181b16e71eb9fef4ae2))
* **lib:** return an error instead of panic if execute fails ([482a5f58](https://github.com/hyperium/hyper/commit/482a5f589ea2bdb798f01645653975089f40ef44), closes [#1566](https://github.com/hyperium/hyper/issues/1566))
* **server:**
* fix debug assert failure when kept-alive connections see a parse error ([396fe80e](https://github.com/hyperium/hyper/commit/396fe80e76840dea9373ca448b20cf7a9babd2f8))
* correctly handle CONNECT requests ([d7ab0166](https://github.com/hyperium/hyper/commit/d7ab01667659290784bfe685951c83a6f69e415e))
#### Features
* **body:**
* make `Body` know about incoming `Content-Length` ([a0a0fcdd](https://github.com/hyperium/hyper/commit/a0a0fcdd9b126ee2c0810b2839c7ab847f5788ad), closes [#1545](https://github.com/hyperium/hyper/issues/1545))
* add `Sender::abort` ([a096799c](https://github.com/hyperium/hyper/commit/a096799c1b4581ce1a47ed0817069997a9031828))
* **client:** add `set_scheme`, `set_host`, and `set_port` for `Destination` ([27db8b00](https://github.com/hyperium/hyper/commit/27db8b0061f85d89ec94e07295463e8d1030d94f), closes [#1564](https://github.com/hyperium/hyper/issues/1564))
* **error:** add `Error::cause2` and `Error::into_cause` ([bc5e22f5](https://github.com/hyperium/hyper/commit/bc5e22f58095f294333f49f12eeb7e504cda666c), closes [#1542](https://github.com/hyperium/hyper/issues/1542))
* **http1:** Add higher-level HTTP upgrade support to Client and Server (#1563) ([fea29b29](https://github.com/hyperium/hyper/commit/fea29b29e2bbbba10760917a234a8cf4a6133be4), closes [#1395](https://github.com/hyperium/hyper/issues/1395))
* **http2:**
* implement flow control for h2 bodies ([1c3fbfd6](https://github.com/hyperium/hyper/commit/1c3fbfd6bf6b627f75ef694e69c8074745276e9b), closes [#1548](https://github.com/hyperium/hyper/issues/1548))
* Add `content_length()` value to incoming h2 `Body` ([9a28268b](https://github.com/hyperium/hyper/commit/9a28268b98f30fd25e862b4a182a853a9a6e1841), closes [#1546](https://github.com/hyperium/hyper/issues/1546))
* set Content-Length header on outgoing messages ([386fc0d7](https://github.com/hyperium/hyper/commit/386fc0d70b70d36ac44ec5562cd26babdfd46fc9), closes [#1547](https://github.com/hyperium/hyper/issues/1547))
* Strip connection headers before sending ([f20afba5](https://github.com/hyperium/hyper/commit/f20afba57d6fabb04085968342e5fd62b45bc8df))
### v0.12.1 (2018-06-04)
#### Bug Fixes
* **server:** add upgrading process to `poll_without_shutdown()` (#1530) ([c6e90b7b](https://github.com/hyperium/hyper/commit/c6e90b7b6509276c744b531f8b1f7b043059c4ec))
#### Features
* **client:** implement `Clone` for `Destination` ([15188b7c](https://github.com/hyperium/hyper/commit/15188b7c7fc6774301a16923127df596486cc913))
* **server:**
* add `http1_writev` config option for servers ([810435f1](https://github.com/hyperium/hyper/commit/810435f1469eb028c6a819368d63edb54d6c341c), closes [#1527](https://github.com/hyperium/hyper/issues/1527))
* add `http1_only` configuration ([14d9246d](https://github.com/hyperium/hyper/commit/14d9246de2e97908c915caf254a37fd62edb25d3), closes [#1512](https://github.com/hyperium/hyper/issues/1512))
* add `try_into_parts()` to `conn::Connection` (#1531) ([c615a324](https://github.com/hyperium/hyper/commit/c615a3242f2518bc8acf05116ebe87ea98773c28))
## v0.12.0 (2018-06-01)
#### Features
* **lib:**
* add HTTP/2 support for Client and Server ([c119097f](https://github.com/hyperium/hyper/commit/c119097fd072db51751b100fa186b6f64785954d))
* convert to use tokio 0.1 ([27b8db3a](https://github.com/hyperium/hyper/commit/27b8db3af8852ba8280a2868f703d3230a1db85e))
* replace types with those from `http` crate ([3cd48b45](https://github.com/hyperium/hyper/commit/3cd48b45fb622fb9e69ba773e7f92b9d3e9ac018))
* **body:**
* remove `Body::is_empty()` ([19f90242](https://github.com/hyperium/hyper/commit/19f90242f8a3768b2d8d4bff4044a2d6c77d40aa))
* change `Payload::Data` to be a `Buf` ([a3be110a](https://github.com/hyperium/hyper/commit/a3be110a55571a1ee9a31b2335d7aec27c04e96a), closes [#1508](https://github.com/hyperium/hyper/issues/1508))
* add `From<Box<Stream>>` impl for `Body` ([45efba27](https://github.com/hyperium/hyper/commit/45efba27df90650bf4669738102ad6e432ddc75d))
* introduce a `Payload` trait to represent bodies ([fbc449e4](https://github.com/hyperium/hyper/commit/fbc449e49cc4a4f8319647dccfb288d3d83df2bd), closes [#1438](https://github.com/hyperium/hyper/issues/1438))
* **client:**
* rename `FutureResponse` to `ResponseFuture` ([04c74ef5](https://github.com/hyperium/hyper/commit/04c74ef596eb313b785ecad6c42c0375ddbb1e96))
* support local bind for `HttpConnector` ([b6a3c85d](https://github.com/hyperium/hyper/commit/b6a3c85d0f9ede10759dc2309502e88ea3e513f7), closes [#1498](https://github.com/hyperium/hyper/issues/1498))
* add support for title case header names (#1497) ([a02fec8c](https://github.com/hyperium/hyper/commit/a02fec8c7898792cbeadde7e0f5bf111d55dd335), closes [#1492](https://github.com/hyperium/hyper/issues/1492))
* add support to set `SO_NODELAY` on client HTTP sockets ([016d79ed](https://github.com/hyperium/hyper/commit/016d79ed2633e3f939a2cd10454cbfc5882effb4), closes [#1473](https://github.com/hyperium/hyper/issues/1473))
* improve construction of `Client`s ([fe1578ac](https://github.com/hyperium/hyper/commit/fe1578acf628844d7cccb3e896c5e0bb2a0be729))
* redesign the `Connect` trait ([8c52c2df](https://github.com/hyperium/hyper/commit/8c52c2dfd342e798420a0b83cde7d54f3af5e351), closes [#1428](https://github.com/hyperium/hyper/issues/1428))
* **error:** revamp `hyper::Error` type ([5d3c4722](https://github.com/hyperium/hyper/commit/5d3c472228d40b57e47ea26004b3710cfdd451f3), closes [#1128](https://github.com/hyperium/hyper/issues/1128), [#1130](https://github.com/hyperium/hyper/issues/1130), [#1431](https://github.com/hyperium/hyper/issues/1431), [#1338](https://github.com/hyperium/hyper/issues/1338))
* **rt:** make tokio runtime optional ([d127201e](https://github.com/hyperium/hyper/commit/d127201ef22b10ab1d84b3f2215863eb2d03bfcb))
* **server:**
* support HTTP1 and HTTP2 automatically ([bc6af88a](https://github.com/hyperium/hyper/commit/bc6af88a32e29e5a4f3719d8abc664f9ab10dddd), closes [#1486](https://github.com/hyperium/hyper/issues/1486))
* re-design `Server` as higher-level API ([c4974500](https://github.com/hyperium/hyper/commit/c4974500abee45b95b0b54109cad15978ef8ced9), closes [#1322](https://github.com/hyperium/hyper/issues/1322), [#1263](https://github.com/hyperium/hyper/issues/1263))
* **service:** introduce hyper-specific `Service` ([2dc6202f](https://github.com/hyperium/hyper/commit/2dc6202fe7294fa74cf1ba58a45e48b8a927934f), closes [#1461](https://github.com/hyperium/hyper/issues/1461))
#### Bug Fixes
* **lib:** remove deprecated tokio-proto APIs ([a37e6b59](https://github.com/hyperium/hyper/commit/a37e6b59e6d6936ee31c6d52939869933c709c78))
* **server:** panic on max_buf_size too small ([aac250f2](https://github.com/hyperium/hyper/commit/aac250f29d3b05d8c07681a407825811ec6a0b56))
#### Breaking Changes
* `Body::is_empty()` is gone. Replace with
`Body::is_end_stream()`, from the `Payload` trait.
([19f90242](https://github.com/hyperium/hyper/commit/19f90242f8a3768b2d8d4bff4044a2d6c77d40aa))
* Each payload chunk must implement `Buf`, instead of
just `AsRef<[u8]>`.
([a3be110a](https://github.com/hyperium/hyper/commit/a3be110a55571a1ee9a31b2335d7aec27c04e96a))
* Replace any references of
`hyper::client::FutureResponse` to `hyper::client::ResponseFuture`.
([04c74ef5](https://github.com/hyperium/hyper/commit/04c74ef596eb313b785ecad6c42c0375ddbb1e96))
* The `Service` trait has changed: it has some changed
associated types, and `call` is now bound to `&mut self`.
The `NewService` trait has changed: it has some changed associated
types, and `new_service` now returns a `Future`.
`Client` no longer implements `Service` for now.
`hyper::server::conn::Serve` now returns `Connecting` instead of
`Connection`s, since `new_service` can now return a `Future`. The
`Connecting` is a future wrapping the new service future, returning
a `Connection` afterwards. In many cases, `Future::flatten` can be
used.
([2dc6202f](https://github.com/hyperium/hyper/commit/2dc6202fe7294fa74cf1ba58a45e48b8a927934f))
* The `Server` is no longer created from `Http::bind`,
nor is it `run`. It is a `Future` that must be polled by an
`Executor`.
The `hyper::server::Http` type has move to
`hyper::server::conn::Http`.
([c4974500](https://github.com/hyperium/hyper/commit/c4974500abee45b95b0b54109cad15978ef8ced9))
* `Client:new(&handle)` and `Client::configure()` are now
`Client::new()` and `Client::builder()`.
([fe1578ac](https://github.com/hyperium/hyper/commit/fe1578acf628844d7cccb3e896c5e0bb2a0be729))
* `Error` is no longer an enum to pattern match over, or
to construct. Code will need to be updated accordingly.
For body streams or `Service`s, inference might be unable to determine
what error type you mean to return.
([5d3c4722](https://github.com/hyperium/hyper/commit/5d3c472228d40b57e47ea26004b3710cfdd451f3))
* All uses of `Handle` now need to be new-tokio `Handle`.
([27b8db3a](https://github.com/hyperium/hyper/commit/27b8db3af8852ba8280a2868f703d3230a1db85e))
* Custom connectors should now implement `Connect`
directly, instead of `Service`.
Calls to `connect` no longer take `Uri`s, but `Destination`. There
are `scheme`, `host`, and `port` methods to query relevant
information.
The returned future must be a tuple of the transport and `Connected`.
If no relevant extra information is needed, simply return
`Connected::new()`.
([8c52c2df](https://github.com/hyperium/hyper/commit/8c52c2dfd342e798420a0b83cde7d54f3af5e351))
* All code that was generic over the body as `Stream` must
be adjusted to use a `Payload` instead.
`hyper::Body` can still be used as a `Stream`.
Passing a custom `impl Stream` will need to either implement
`Payload`, or as an easier option, switch to `Body::wrap_stream`.
`Body::pair` has been replaced with `Body::channel`, which returns a
`hyper::body::Sender` instead of a `futures::sync::mpsc::Sender`.
([fbc449e4](https://github.com/hyperium/hyper/commit/fbc449e49cc4a4f8319647dccfb288d3d83df2bd))
* `Method`, `Request`, `Response`, `StatusCode`,
`Version`, and `Uri` have been replaced with types from the `http`
crate.
([3cd48b45](https://github.com/hyperium/hyper/commit/3cd48b45fb622fb9e69ba773e7f92b9d3e9ac018))
* The variants of `Method` are now uppercase, for instance, `Method::Get` is now `Method::GET`.
* The variants of `StatusCode` are now uppercase, for instance, `StatusCode::Ok` is now `StatusCode::OK`.
* The variants of `Version` are now uppercase, for instance, `HttpVersion::Http11` is now `Version::HTTP_11`.
* The typed headers from `hyper::header` are gone for now.
The `http::header` module is re-exported as `hyper::header`.
For example, a before setting the content-length:
```rust
use hyper::header::ContentLength;
res.headers_mut().set(ContentLength(15));
```
And now **after**, with the `http` types:
```rust
use hyper::header::{CONTENT_LENGTH, HeaderValue};
res.headers_mut().insert(CONTENT_LENGTH, HeaderValue::from_static("15"));
```
([3cd48b45](https://github.com/hyperium/hyper/commit/3cd48b45fb622fb9e69ba773e7f92b9d3e9ac018))
* The `mime` crate is no longer re-exported as `hyper::mime`.
The typed headers don't exist, and so they do not need the `mime` crate.
To continue using `mime` for other purposes, add it directly to your `Cargo.toml`
as a dependency.
([3cd48b45](https://github.com/hyperium/hyper/commit/3cd48b45fb622fb9e69ba773e7f92b9d3e9ac018))
* Removed `compat` cargo feature, and `compat` related API. This was the conversion methods for hyper's
types to and from `http` crate's types.
([3cd48b45](https://github.com/hyperium/hyper/commit/3cd48b45fb622fb9e69ba773e7f92b9d3e9ac018))
* Removed deprecated APIs:
([a37e6b59](https://github.com/hyperium/hyper/commit/a37e6b59e6d6936ee31c6d52939869933c709c78))
* The `server-proto` cargo feature, which included `impl ServerProto for Http`, and related associated types.
* `client::Config::no_proto()`
* `tokio_proto::streaming::Body::from(hyper::Body)`
* `hyper::Body::from(tokio_proto::streaming::Body)`
* `hyper::Body::from(futures::sync::mpsc::Receiver)`
* `Http::no_proto()`
### v0.11.27 (2018-05-16)
#### Bug Fixes
* **client:** prevent pool checkout looping on not-ready connections ([ccec79da](https://github.com/hyperium/hyper/commit/ccec79dadc84f1e9fced9159189d9f8caa6e17a4), closes [#1519](https://github.com/hyperium/hyper/issues/1519))
* **server:** skip SO_REUSEPORT errors ([2c48101a](https://github.com/hyperium/hyper/commit/2c48101a6ee1269d7c94a0c3e606b2d635b20615), closes [#1509](https://github.com/hyperium/hyper/issues/1509))
### v0.11.26 (2018-05-05)
#### Features
* **server:** add Server::run_threads to run on multiple threads ([8b644c1a](https://github.com/hyperium/hyper/commit/8b644c1a2a1a629be9b263d8fae5963a61af91cd))
### v0.11.25 (2018-04-04)
#### Bug Fixes
* **client:** ensure idle connection is pooled before response body finishes ([7fe9710a](https://github.com/hyperium/hyper/commit/7fe9710a98650efc37f35bb21b19926c015f0631))
### v0.11.24 (2018-03-22)
#### Bug Fixes
* **header:** remove charset=utf8 from `ContentType::text()` ([ba789e65](https://github.com/hyperium/hyper/commit/ba789e6552eb74afb98f4d462d5c06c6643535d3))
### v0.11.23 (2018-03-22)
#### Bug Fixes
* **server:** prevent to output Transfer-encoding when server upgrade (#1465) ([eb105679](https://github.com/hyperium/hyper/commit/eb105679271a6e0ccc09f37978314a1a8d686217))
#### Features
* **client:** introduce lower-level Connection API ([1207c2b6](https://github.com/hyperium/hyper/commit/1207c2b62456fc729c3a29c56c3966b319b474a9), closes [#1449](https://github.com/hyperium/hyper/issues/1449))
* **header:** add `text()` and `text_utf8()` constructors to `ContentType` ([45cf8c57](https://github.com/hyperium/hyper/commit/45cf8c57c932a2756365748dc1e598ad3ee4b8ef))
* **server:**
* add `service` property to `server::conn::Parts` ([bf7c0bbf](https://github.com/hyperium/hyper/commit/bf7c0bbf4f55fdf465407874b0b2d4bd748e6783), closes [#1471](https://github.com/hyperium/hyper/issues/1471))
* add upgrade support to lower-level Connection API (#1459) ([d58aa732](https://github.com/hyperium/hyper/commit/d58aa73246112f69410cc3fe912622f284427067), closes [#1323](https://github.com/hyperium/hyper/issues/1323))
### v0.11.22 (2018-03-07)
#### Bug Fixes
* **client:** return error if Request has `CONNECT` method ([bfcdbd9f](https://github.com/hyperium/hyper/commit/bfcdbd9f86480cf6531544ecca247562a18172af))
* **dependencies:** require tokio-core 0.1.11 ([49fcb066](https://github.com/hyperium/hyper/commit/49fcb0663cc30bbfc82cfc3c8e42d539211a3f3f))
#### Features
* **client:** add `Config::set_host` option ([33a385c6](https://github.com/hyperium/hyper/commit/33a385c6b677cce4ece2843c11ac78711fd5b898))
### v0.11.21 (2018-02-28)
#### Bug Fixes
* **client:**
* check conn is closed in expire interval ([2fa0c845](https://github.com/hyperium/hyper/commit/2fa0c845b5f3f07e039522a9112a14593e02fe1b))
* schedule interval to clear expired idle connections ([727b7479](https://github.com/hyperium/hyper/commit/727b74797e5754af8abba8812a876c3c8fda6d94))
* never call connect if idle connection is available ([13741f51](https://github.com/hyperium/hyper/commit/13741f5145eb3dc894d2bc8d8486fc51c29e2e41))
### v0.11.20 (2018-02-26)
#### Bug Fixes
* **server:**
* Make sleep_on_errors configurable and use it in example ([3a36eb55](https://github.com/hyperium/hyper/commit/3a36eb559676349d8a321c3159684503014f7fbe))
* Sleep on socket IO errors ([68458cde](https://github.com/hyperium/hyper/commit/68458cde57a20f4b3c9c306eaf9801189262e0a6))
#### Features
* **body:** add `Body::is_empty()` method ([2f45d539](https://github.com/hyperium/hyper/commit/2f45d5394a2f8a49442ff4798a4b1651c079f0ff))
* **request:** add `Request::body_mut()` method ([3fa191a2](https://github.com/hyperium/hyper/commit/3fa191a2676feb86c91abf8dfcc8e63477980297))
### v0.11.19 (2018-02-21)
#### Bug Fixes
* **client:**
* prevent empty bodies sending transfer-encoding for GET, HEAD ([77adab4e](https://github.com/hyperium/hyper/commit/77adab4ebf0fadd9ccd014d24ff0bcec1bce1e8b))
* detect connection closes as pool tries to use ([dc619a8f](https://github.com/hyperium/hyper/commit/dc619a8fa01616b260ef32a35b35963460987206), closes [#1439](https://github.com/hyperium/hyper/issues/1439))
* **uri:** make absolute-form uris always have a path ([a9413d73](https://github.com/hyperium/hyper/commit/a9413d7367e8b9f0245fc8a90a22ece7d55e7e04))
#### Features
* **client:** Client will retry requests on fresh connections ([ee61ea9a](https://github.com/hyperium/hyper/commit/ee61ea9adf86b309490a68d044e40bd1090338e8))
### v0.11.18 (2018-02-07)
#### Bug Fixes
* **client:** send an `Error::Cancel` if a queued request is dropped ([88f01793](https://github.com/hyperium/hyper/commit/88f01793bec5830370cb88f74a64a2e20a440c17))
#### Features
* **client:** add `http1_writev` configuration option ([b0aa6497](https://github.com/hyperium/hyper/commit/b0aa6497258c20354ae0fe36d668e0c2361b3151))
### v0.11.17 (2018-02-05)
#### Bug Fixes
* **client:** more reliably detect closed pooled connections (#1434) ([265ad67c](https://github.com/hyperium/hyper/commit/265ad67c86379841a5aa821543a01648ccc8c26c))
* **h1:** fix hung streaming bodies over HTTPS ([73109694](https://github.com/hyperium/hyper/commit/731096947d0704de58b75d17e05af956bcb21bd9))
### v0.11.16 (2018-01-30)
#### Bug Fixes
* **client:**
* check for dead connections in Pool ([44af2738](https://github.com/hyperium/hyper/commit/44af273853f82b81591b813d13627e143a14a6b7), closes [#1429](https://github.com/hyperium/hyper/issues/1429))
* error on unsupported 101 responses, ignore other 1xx codes ([22774222](https://github.com/hyperium/hyper/commit/227742221fa7830a14c18becbbc6137d97b57729))
* **server:**
* send 400 responses on parse errors before closing connection ([7cb72d20](https://github.com/hyperium/hyper/commit/7cb72d2019bffbc667b9ad2d8cbc19c1a513fcf7))
* error if Response code is 1xx ([44c34ce9](https://github.com/hyperium/hyper/commit/44c34ce9adc888916bd67656cc54c35f7908f536))
#### Features
* **server:** add `Http::max_buf_size()` option ([d22deb65](https://github.com/hyperium/hyper/commit/d22deb6572c279e11773b6bcb862415c08f19c2e), closes [#1368](https://github.com/hyperium/hyper/issues/1368))
* **uri:** Add a `PartialEq<str>` impl for `Uri` ([11b49c2c](https://github.com/hyperium/hyper/commit/11b49c2cc84695e966e9d9a0b05781853b28d7a8))
#### Performance
- **h1:** utilize `writev` when possible, reducing copies ([68377ede](https://github.com/hyperium/hyper/commit/68377ede))
### v0.11.15 (2018-01-22)
#### Bug Fixes
* **lib:** properly handle HTTP/1.0 remotes ([36e66a50](https://github.com/hyperium/hyper/commit/36e66a50546347c6f9b74c6d3c26e8b910483a4b), closes [#1304](https://github.com/hyperium/hyper/issues/1304))
#### Features
* **client:** add `executor` method when configuring a `Client` ([c89019eb](https://github.com/hyperium/hyper/commit/c89019eb100d00b5235d3b9a0d0b672ab0ef8ddc))
### v0.11.14 (2018-01-16)
#### Bug Fixes
* **tokio-proto:** return end-of-body frame correctly for tokio-proto ([14e4c741](https://github.com/hyperium/hyper/commit/14e4c741dc48a386d7bdc6f8e9e279e60f172722), closes [#1414](https://github.com/hyperium/hyper/issues/1414))
### v0.11.13 (2018-01-12)
#### Bug Fixes
* **client:**
* change connection errors to debug log level ([2fe90f25](https://github.com/hyperium/hyper/commit/2fe90f256420ff668966290ac96686ce061453e4), closes [#1412](https://github.com/hyperium/hyper/issues/1412))
* don't error on read before writing request ([7976023b](https://github.com/hyperium/hyper/commit/7976023b594ec6784e40a147d3baec99a947b118))
* **lib:** properly handle body streaming errors ([7a48d0e8](https://github.com/hyperium/hyper/commit/7a48d0e8b4ad465c0205ddfb116b6bd60dbdec71))
### v0.11.12 (2018-01-08)
#### Bug Fixes
* **server:** add remote_addr back to Request when using Http::bind ([fa7f4377](https://github.com/hyperium/hyper/commit/fa7f4377c1d783ca860820aefc41d0eab73be14c), closes [#1410](https://github.com/hyperium/hyper/issues/1410))
### v0.11.11 (2018-01-05)
#### Features
* **client:** replace default dispatcher ([0892cb27](https://github.com/hyperium/hyper/commit/0892cb27777858737449a012bc6ea08ee080e5b7))
* **server:** change default dispatcher ([6ade21aa](https://github.com/hyperium/hyper/commit/6ade21aa7f16dfeb6c0c53fe39c3f168f5f8aec1))
### v0.11.10 (2017-12-26)
#### Bug Fixes
* **client:**
* fix panic when request body is empty string ([bfb0f84d](https://github.com/hyperium/hyper/commit/bfb0f84d372ec4251a20d16a1ac514a4177e2a3b))
* close connections when Response Future or Body is dropped ([ef400812](https://github.com/hyperium/hyper/commit/ef4008121e4faa9383fe4661ebd05de5efe7ee9c), closes [#1397](https://github.com/hyperium/hyper/issues/1397))
* properly close idle connections after timeout ([139dc7ab](https://github.com/hyperium/hyper/commit/139dc7ab2be271cd58b909db16c6ddbe5109f133), closes [#1397](https://github.com/hyperium/hyper/issues/1397))
* **conn:** don't double shutdown in some cases ([7d3abfbc](https://github.com/hyperium/hyper/commit/7d3abfbcf33946cb8831103c3b55f9966fa9469d))
### v0.11.9 (2017-12-09)
#### Bug Fixes
* **client:** detect valid eof after reading a body ([15fdd53d](https://github.com/hyperium/hyper/commit/15fdd53d4cb1cd0fef41c4bed509020f44512a00), closes [#1396](https://github.com/hyperium/hyper/issues/1396))
#### Features
* **log:** improve quality of debug level logs ([7b593112](https://github.com/hyperium/hyper/commit/7b5931122a07f2a766d3e103001bcb5ee1f983f3))
### v0.11.8 (2017-12-06)
#### Bug Fixes
* **client:**
* return error instead of unmatched response when idle ([95e0164e](https://github.com/hyperium/hyper/commit/95e0164e8f0f03742f71868cb2828bcd4bfa5cfc))
* remove idle connections when read eof is found ([cecef9d4](https://github.com/hyperium/hyper/commit/cecef9d402b76af12e6415519deb2b604f77b195))
* always wait on reads for pooled connections ([9f212410](https://github.com/hyperium/hyper/commit/9f212410026c780ea2a76ba81705ed137022260d))
* don't leak connections with no keep-alive ([d2aa5d86](https://github.com/hyperium/hyper/commit/d2aa5d862c95168f4e71cc65155c2dc41f306f36), closes [#1383](https://github.com/hyperium/hyper/issues/1383))
* **conn:** handle when pre-emptive flushing closes the write state ([8f938d97](https://github.com/hyperium/hyper/commit/8f938d97e7f25ca9e8c9ae65f756f952753d9bf7), closes [#1391](https://github.com/hyperium/hyper/issues/1391))
* **lib:** fix `no_proto` dispatcher to flush queue before polling more body ([121b5eef](https://github.com/hyperium/hyper/commit/121b5eef19e65acfecb8261d865554e173f2fc78))
* **server:** allow TLS shutdown before dropping connections with `no_proto` ([60d0eaf8](https://github.com/hyperium/hyper/commit/60d0eaf8916f7cb5073105778f25dff21bd504bb), closes [#1380](https://github.com/hyperium/hyper/issues/1380))
#### Features
* **headers:** Implement `ProxyAuthorization` (#1394) ([c93cdb29](https://github.com/hyperium/hyper/commit/c93cdb290875cb86900e84c333725aefa4d7fad5))
* **server:**
* Allow keep alive to be turned off for a connection (#1390) ([eb9590e3](https://github.com/hyperium/hyper/commit/eb9590e3da65299928938ae8bb830dfb008fdadd), closes [#1365](https://github.com/hyperium/hyper/issues/1365))
* add `Http.serve_incoming` to wrap generic accept steams ([e4864a2b](https://github.com/hyperium/hyper/commit/e4864a2bea59b40fb07e6d18329f75817803a3f3))
### v0.11.7 (2017-11-14)
#### Bug Fixes
* **client:**
* drop in-use connections when they finish if Client is dropped ([b1765dd1](https://github.com/hyperium/hyper/commit/b1765dd168b24912fbd36682f1f6df70eeb1acd5))
* don't read extra bytes on idle connections ([7c4b814e](https://github.com/hyperium/hyper/commit/7c4b814e6b95bdb22b11e027b2da16c5abb8399f))
* **server:** GET requests with no body have None instead of Empty ([8bf79648](https://github.com/hyperium/hyper/commit/8bf7964875205155e3018902a6e8facee6c145b6), closes [#1373](https://github.com/hyperium/hyper/issues/1373))
#### Features
* **client:**
* skip dns resolution when host is a valid ip addr ([b1785c66](https://github.com/hyperium/hyper/commit/b1785c662bc75f7bbd36a242c379d120ff7c6cd2))
* allow custom executors for HttpConnector ([ed497bf5](https://github.com/hyperium/hyper/commit/ed497bf5e6f1d651e3b30fd42c10245c560aff5b))
* add names to DNS threads ([e0de55da](https://github.com/hyperium/hyper/commit/e0de55daa2ec241f97fc5ed14f5ec933bde110d7))
* **header:** implement `ByteRangeSpec::to_satisfiable_range` ([bb54e36c](https://github.com/hyperium/hyper/commit/bb54e36c90dc9c2ca876cd7f2c7dc7250d217552))
* **lib:** add support to disable tokio-proto internals ([f7532b71](https://github.com/hyperium/hyper/commit/f7532b71d141ebe41172dbb863d58d519e387a4e))
* **server:**
* add `const_service` and `service_fn` helpers ([fe38aa4b](https://github.com/hyperium/hyper/commit/fe38aa4bc1c8fdcaefb0d839239c14620a7b8f0a))
* add `server::Serve` that can use a shared Handle ([39cf6ef7](https://github.com/hyperium/hyper/commit/39cf6ef7d26b3d829ec19fb1db176e8221170cb3))
* allow creating Server with shared Handle ([0844dede](https://github.com/hyperium/hyper/commit/0844dede191d720e0336ee4aca63af2255abe458))
### v0.11.6 (2017-10-02)
#### Bug Fixes
* **server:** fix experimental pipeline flushing ([6b4635fd](https://github.com/hyperium/hyper/commit/6b4635fd13f5fe91ad6d388c5e66394627ad7ba2))
### v0.11.5 (2017-10-02)
#### Bug Fixes
* **http:** avoid infinite recursion when Body::from is called with Cow::Owned. (#1343) ([e8d61737](https://github.com/hyperium/hyper/commit/e8d6173734b0fb43bf7401fdbe43258d913a6284))
### v0.11.4 (2017-09-28)
#### Bug Fixes
* **client:** fix panic in Pool ([0fbc215f](https://github.com/hyperium/hyper/commit/0fbc215f), closes [#1339](https://github.com/hyperium/hyper/issues/1339))
### v0.11.3 (2017-09-28)
#### Features
* **header:** add ContentType::xml() constructor ([92595e84](https://github.com/hyperium/hyper/commit/92595e84))
* **http:** add Body::from(cow) for bytes and strings ([425ff71d](https://github.com/hyperium/hyper/commit/425ff71d))
* **lib:** implement compatibility with http crate ([0c7d375b](https://github.com/hyperium/hyper/commit/0c7d375b))
* **server:**
* add experimental pipeline flush aggregation option to Http ([dd54f20b](https://github.com/hyperium/hyper/commit/dd54f20b))
* remove unneeded Send + Sync from Server ([16e834d3](https://github.com/hyperium/hyper/commit/16e834d3))
#### Bug Fixes
* **client:**
* cleanup dropped pending Checkouts from Pool ([3b91fc65](https://github.com/hyperium/hyper/commit/3b91fc65), closes [#1315](https://github.com/hyperium/hyper/issues/1315))
* return Version errors if unsupported ([41c47241](https://github.com/hyperium/hyper/commit/41c47241), closes [#1283](https://github.com/hyperium/hyper/issues/1283))
* **http:** log errors passed to tokio at debug level ([971864c4](https://github.com/hyperium/hyper/commit/971864c4), closes [#1278](https://github.com/hyperium/hyper/issues/1278))
* **lib:**
* Export hyper::RawStatus if the raw_status feature is enabled ([627c4e3d](https://github.com/hyperium/hyper/commit/627c4e3d))
* remove logs that contain request and response data ([207fca63](https://github.com/hyperium/hyper/commit/207fca63), closes [#1281](https://github.com/hyperium/hyper/issues/1281))
#### Performance
* **server:** try to read from socket at keep-alive ([1a9f2648](https://github.com/hyperium/hyper/commit/1a9f2648))
### v0.11.2 (2017-07-27)
#### Bug Fixes
* **client:** don't assume bodies on 204 and 304 Responses ([81c0d185](https://github.com/hyperium/hyper/commit/81c0d185bdb2cb11e0fba231e3259097f492dd7d), closes [#1242](https://github.com/hyperium/hyper/issues/1242))
* **header:** fix panic from headers.remove when typed doesn't match ([4bd9746a](https://github.com/hyperium/hyper/commit/4bd9746a0fa56ddc578ec5a8044e6c37390f3770))
* **http:**
* allow zero-length chunks when no body is allowed ([9b47e186](https://github.com/hyperium/hyper/commit/9b47e1861a6bd766f21c88b95ecfc9b45fad874d))
* fix encoding when buffer is full ([fc5b9cce](https://github.com/hyperium/hyper/commit/fc5b9cce3176776e4c916cd1b907b1649a538f00))
* skip zero length chunks when encoding ([d6da3f7b](https://github.com/hyperium/hyper/commit/d6da3f7b40550b425f760d0d331807feff9114fd))
* **server:**
* improve detection of when a Response can have a body ([673e5cb1](https://github.com/hyperium/hyper/commit/673e5cb1a3dadea178e51677fa660a1258610ae8), closes [#1257](https://github.com/hyperium/hyper/issues/1257))
* reject Requests with invalid body lengths ([14cbd400](https://github.com/hyperium/hyper/commit/14cbd40071816ec04dd1921e599c1d5cca883898))
* do not automatically set ContentLength for 204 and 304 Responses ([c4c89a22](https://github.com/hyperium/hyper/commit/c4c89a22f8f1ebc74a13a6ee75a8209081dcb535))
* **uri:** fix Uri parsing of IPv6 and userinfo ([7081c449](https://github.com/hyperium/hyper/commit/7081c4498e707c1240c7e672d39ba4948fffb558), closes [#1269](https://github.com/hyperium/hyper/issues/1269))
#### Features
* **headers:** export missing header types ([c9f4ff33](https://github.com/hyperium/hyper/commit/c9f4ff33821df1bff557dfddac1ba3fc6255ee62))
* **server:** Provide reference to Response body ([a79fc98e](https://github.com/hyperium/hyper/commit/a79fc98e36eac485803b1ab97f35c60198fd72cb), closes [#1216](https://github.com/hyperium/hyper/issues/1216))
* **status:** add `as_u16()` method to `StatusCode` ([5f6f252c](https://github.com/hyperium/hyper/commit/5f6f252c603c642be8037682c1bf7e7ed2392a53))
### v0.11.1 (2017-07-03)
#### Features
* **server:** Handle 100-continue ([6164e764](https://github.com/hyperium/hyper/commit/6164e76405935065aeb912f94ba94230e0bac60f))
## v0.11.0 (2017-06-13)
#### Bug Fixes
* **header:**
* add length checks to `ETag` parsing ([643fac1e](https://github.com/hyperium/hyper/commit/643fac1e01102524e44ead188e865830ebdfb1f4))
* prevent 2 panics in `QualityItem` parsing ([d80aae55](https://github.com/hyperium/hyper/commit/d80aae55b1af0420bfcdecb2c8515b48e3e0e641))
* Allow IPv6 Addresses in `Host` header ([8541ac72](https://github.com/hyperium/hyper/commit/8541ac72d7ec80a36171115501e49dd47bcb1d0d))
* Remove raw part when getting mutable reference to typed header ([f38717e4](https://github.com/hyperium/hyper/commit/f38717e422a80e04ca95fcd5e5c5d54b7197bed2), closes [#821](https://github.com/hyperium/hyper/issues/821))
* only add chunked to `TransferEncoding` if not present ([1b4f8579](https://github.com/hyperium/hyper/commit/1b4f85799737a537d8ebfb6afd0423b97238ab8b))
* ignore invalid cookies ([310d98d5](https://github.com/hyperium/hyper/commit/310d98d50b929b8bde898cbb1137df95da5e0840))
* **http:**
* Chunked decoder reads last `\r\n` ([bffde8c8](https://github.com/hyperium/hyper/commit/bffde8c841353e05e9aea267ca94848ccdeeb394))
* make Chunked decoder resilient in an async world ([8672ec5a](https://github.com/hyperium/hyper/commit/8672ec5a366e698bd32679d64dce925b3fa11fc6))
* **server:**
* support HTTP/1.1 pipelining ([523b890a](https://github.com/hyperium/hyper/commit/523b890a19e9325938adf42456eea6191fcb8029))
#### Features
* **body:**
* implement Extend and IntoIterator for Chunk ([78512bdb](https://github.com/hyperium/hyper/commit/78512bdb184903061ea02f1101c99a097483cb69))
* add Default trait to Body ([f61708ba](https://github.com/hyperium/hyper/commit/f61708ba81fc03a4797688afd5bcec87e8f98eef))
* implement `Default` for `Body` ([6faa653f](https://github.com/hyperium/hyper/commit/6faa653f0dfaa5220e76a60fcd264511686dfd08))
* implement `Default` for `Chunk` ([f5567db4](https://github.com/hyperium/hyper/commit/f5567db4dcc04a769725d0b9ccb6a81bc3026acc))
* **client:**
* add `HttpConnector.enforce_http` ([1c34a05a](https://github.com/hyperium/hyper/commit/1c34a05a85078421078f2cb266dccc5dfce8a9f0))
* add an accessor for the request body ([4e26646a](https://github.com/hyperium/hyper/commit/4e26646aa7b46d5739d3978126bb70e8c47cde1d))
* Response.status() now returns a `StatusCode` by value ([d63b7de4](https://github.com/hyperium/hyper/commit/d63b7de44f813696f8ec595d2f8f901526c1720e))
* add Client::handle ([9101817b](https://github.com/hyperium/hyper/commit/9101817b0fd61d7bcccfaa8933e64d6e3787395d))
* add Request.set_proxy for HTTP proxy requests ([e8714116](https://github.com/hyperium/hyper/commit/e871411627cab5caf00d8ee65328da9ff05fc53d), closes [#1056](https://github.com/hyperium/hyper/issues/1056))
* DNS worker count is configurable ([138e1643](https://github.com/hyperium/hyper/commit/138e1643e81669cae9dbe215197abd0e07f0c1e7))
* add keep_alive_timeout to Client ([976218ba](https://github.com/hyperium/hyper/commit/976218badc4a067e45a9d15af7e4eb5f2a4adc09))
* **error:** Display for Error shows better info ([49e196db](https://github.com/hyperium/hyper/commit/49e196db1c91b2fb5f7ab05d99b9c7bc997195f2), closes [#694](https://github.com/hyperium/hyper/issues/694))
* **header:**
* add ContentType::octet_stream() constructor ([1a353102](https://github.com/hyperium/hyper/commit/1a35310273732acbf8e8498ebb5dbad3d61386cb))
* change `Cookie` to be map-like ([dd03e723](https://github.com/hyperium/hyper/commit/dd03e7239238e6c0753cf2502a0534e2c9770d9e), closes [#1145](https://github.com/hyperium/hyper/issues/1145))
* add `Cookie::iter()` ([edc1c0dd](https://github.com/hyperium/hyper/commit/edc1c0dd01b24ee32250dff51268ad60fff9293d))
* implement fmt::Display for several headers ([e9e7381e](https://github.com/hyperium/hyper/commit/e9e7381ece21588076bb712d5c508f50cd740591))
* add `Headers::append_raw` ([b4b2fb78](https://github.com/hyperium/hyper/commit/b4b2fb782e51b2b932e52fab6add7c23a369f1fb))
* Add support for Retry-After header ([1037bc77](https://github.com/hyperium/hyper/commit/1037bc773256ca05c4311a781e96fbdcaac877fe))
* add `Encoding::Brotli` variant ([f0ab2b6a](https://github.com/hyperium/hyper/commit/f0ab2b6aedb909d37698365d1fcc34ce749304b5))
* introduce `header::Raw` (#869) ([50ccdaa7](https://github.com/hyperium/hyper/commit/50ccdaa7e7db574ec9890c220765ffd2da5e493b))
* add `TE` header struct (#1150) ([f1859dfd](https://github.com/hyperium/hyper/commit/f1859dfd7abfc124dd986edc413f754f76c76e8b), closes [#1109](https://github.com/hyperium/hyper/issues/1109))
* support Opaque origin headers (#1147) ([41485997](https://github.com/hyperium/hyper/commit/414859978b47dc8ebd0df264afc4e113b8a1909e), closes [#1065](https://github.com/hyperium/hyper/issues/1065))
* add `HeaderView.raw()` ([8143c33b](https://github.com/hyperium/hyper/commit/8143c33bad9146414f14197c39f6d5326d0f0212))
* `impl Eq for ContentType` ([bba761ac](https://github.com/hyperium/hyper/commit/bba761ac547b59c885aceea5b9e52bf52e8747b5))
* add `Link` header implementation ([592c1e21](https://github.com/hyperium/hyper/commit/592c1e21256d3ba2aeba6cdc2b62d8c1ebfa1dbf), closes [#650](https://github.com/hyperium/hyper/issues/650))
* add `star`, `json`, `text`, `image` constructors to `Accept` ([bdc19d52](https://github.com/hyperium/hyper/commit/bdc19d52bf5ec2e63b785de31bfe0ad3ba4d2550))
* Add strict-origin and strict-origin-when-cross-origin referer policy ([3593d798](https://github.com/hyperium/hyper/commit/3593d7987a92518736e130586499d97afa3e5b04))
* support multiple values for Referrer-Policy header ([7b558ae8](https://github.com/hyperium/hyper/commit/7b558ae87a826ca7383c0034d4ca95fc61aeac4c), closes [#882](https://github.com/hyperium/hyper/issues/882))
* add `Warning` header ([69894d19](https://github.com/hyperium/hyper/commit/69894d19947f01ad4ff54ce0283429758acba9ff), closes [#883](https://github.com/hyperium/hyper/issues/883))
* `Headers::remove` returns the Header ([9375addb](https://github.com/hyperium/hyper/commit/9375addba03505f2515d493364f9b1beb8b9b99a), closes [#891](https://github.com/hyperium/hyper/issues/891))
* add `ContentLocation` header ([13c5bf66](https://github.com/hyperium/hyper/commit/13c5bf66c305c08a2a1af26e48115b667d141b18), closes [#870](https://github.com/hyperium/hyper/issues/870))
* add `LastEventId` header ([e1542a60](https://github.com/hyperium/hyper/commit/e1542a609f99da770a65500333d922c58e39d179))
* add `Origin header ([01843f88](https://github.com/hyperium/hyper/commit/01843f882265a894c7051dc2ecf5cf09f2c2e8e7), closes [#651](https://github.com/hyperium/hyper/issues/651))
* Add `ReferrerPolicy` header ([3a86b3a2](https://github.com/hyperium/hyper/commit/3a86b3a2b25be1c088cf7d39bb431b2e624d4191))
* **http:**
* add Into<Bytes> for Chunk ([fac3d70c](https://github.com/hyperium/hyper/commit/fac3d70c0b716157ba689ae2b8a0089b6afc9bdc))
* use the bytes crate for Chunk and internally ([65b3e08f](https://github.com/hyperium/hyper/commit/65b3e08f6904634294ff2d105f2551cafe7e754d))
* allow specifying custom body streams ([1b1311a7](https://github.com/hyperium/hyper/commit/1b1311a7d36b000c9c2c509971ee759da8765711))
* **lib:**
* add `raw_status` feature in Cargo.toml ([acd62cda](https://github.com/hyperium/hyper/commit/acd62cda446e4c647716a2d595342360dc24a080))
* remove extern Url type usage ([4fb7e6eb](https://github.com/hyperium/hyper/commit/4fb7e6ebc6b1d429dcce4bc18139bd443fffa6ee))
* export Method::Put at top level ([5c890321](https://github.com/hyperium/hyper/commit/5c890321ee2da727a814c18d4ee2df5eddd6720e))
* redesign API to use Futures and Tokio ([2d2d5574](https://github.com/hyperium/hyper/commit/2d2d5574a698e74e5102d39b9a9ab750860d92d1))
* switch to non-blocking (asynchronous) IO ([d35992d0](https://github.com/hyperium/hyper/commit/d35992d0198d733c251e133ecc35f2bca8540d96))
* **mime:** upgrade to mime v0.3 ([f273224f](https://github.com/hyperium/hyper/commit/f273224f21eedd2f466f12fe30fd24e83c35922c), closes [#738](https://github.com/hyperium/hyper/issues/738))
* **server:**
* make Http default its body type to hyper::Chunk ([dc97dd77](https://github.com/hyperium/hyper/commit/dc97dd77f45486d9cb9a22a1859809c5af5579e2))
* make Http compatible with TcpServer ([e04bcc12](https://github.com/hyperium/hyper/commit/e04bcc12a7e081f75482cdca1e4f4c4f597ad2ce), closes [#1036](https://github.com/hyperium/hyper/issues/1036))
* add path() and query() to Request ([8b3c1206](https://github.com/hyperium/hyper/commit/8b3c1206846cb96be780923952eafe0dde7850bf), closes [#896](https://github.com/hyperium/hyper/issues/896), [#897](https://github.com/hyperium/hyper/issues/897))
* **status:**
* add `StatusCode::try_from(u16)`. ([f953cafe](https://github.com/hyperium/hyper/commit/f953cafe27d1c5de0c8b859e485225cfc2c18629))
* remove deprecated `StatusClass` ([94ee6204](https://github.com/hyperium/hyper/commit/94ee6204ae32b8c431c00fdc03dc75eee573c69c))
* impl Into<u16> for StatusCode ([c42f18db](https://github.com/hyperium/hyper/commit/c42f18db05e47fc24e8a8ece76cbc782b7558e8b))
* **uri:**
* redesign `RequestUri` type into `Uri` ([9036443e](https://github.com/hyperium/hyper/commit/9036443e6bd61b948ebe622588d2765e22e2b179), closes [#1000](https://github.com/hyperium/hyper/issues/1000))
* add `is_absolute` method to `Uri` ([154ab29c](https://github.com/hyperium/hyper/commit/154ab29c0d2b50d7bcac0f7918abf2f7a1628112))
* **version:** impl `FromStr` for `HttpVersion` ([47f3aa62](https://github.com/hyperium/hyper/commit/47f3aa6247a3211ae499b30584dca6acb43d2204))
#### Breaking Changes
* The `Cookie` header is no longer a wrapper over a
`Vec<String>`. It must be accessed via its `get` and `set` methods.
([dd03e723](https://github.com/hyperium/hyper/commit/dd03e7239238e6c0753cf2502a0534e2c9770d9e))
* Any use of `Quality(num)` should change to `q(num)`.
([a4644959](https://github.com/hyperium/hyper/commit/a4644959b0f980d94898d6c2e3cb1763aac73a5e))
* `HttpDate` no longer has public fields. Convert between
`HttpDate` and `SystemTime` as needed.
([316c6fad](https://github.com/hyperium/hyper/commit/316c6fad3026ba5ff5f6b9f31aca4d4f74b144e0))
* The `link_extensions` methods of the `Link` header are
removed until fixed.
([011f28cb](https://github.com/hyperium/hyper/commit/011f28cb18d285401bc8bea2b0f0dbdf80089d97))
* The `fmt_header` method has changed to take a different
formatter. In most cases, if your header also implements
`fmt::Display`, you can just call `f.fmt_line(self)`.
([6f02d43a](https://github.com/hyperium/hyper/commit/6f02d43ae0d80971a32617e316498b81acf38ca2))
* The `Encoding` enum has an additional variant, `Trailers`.
([f1859dfd](https://github.com/hyperium/hyper/commit/f1859dfd7abfc124dd986edc413f754f76c76e8b))
* `Origin.scheme` and `Origin.host` now return `Option`s, since the `Origin` could be `null`.
([41485997](https://github.com/hyperium/hyper/commit/414859978b47dc8ebd0df264afc4e113b8a1909e))
* If you were explicitly checking the `StatusCode`, such as
with an equality comparison, you will need to use the value instead of a
reference.
([d63b7de4](https://github.com/hyperium/hyper/commit/d63b7de44f813696f8ec595d2f8f901526c1720e))
* This removes several deprecated methods for converting
Headers into strings. Use more specialized methods instead.
([ec91bf41](https://github.com/hyperium/hyper/commit/ec91bf418b1f285bac9231d4bee0dd96742e565a))
* The `Url` type is no longer used. Any instance in the
`Client` API has had it replaced with `hyper::Uri`.
This also means `Error::Uri` has changed types to
`hyper::error::UriError`.
The type `hyper::header::parsing::HTTP_VALUE` has been made private,
as an implementation detail. The function `http_percent_encoding`
should be used instead.
([4fb7e6eb](https://github.com/hyperium/hyper/commit/4fb7e6ebc6b1d429dcce4bc18139bd443fffa6ee))
* This makes `Request.remote_addr` an
`Option<SocketAddr>`, instead of `SocketAddr`.
([e04bcc12](https://github.com/hyperium/hyper/commit/e04bcc12a7e081f75482cdca1e4f4c4f597ad2ce))
* The `Preference` header had a typo in a variant and it's string representation,
change `Preference::HandlingLeniant` to `Preference::HandlingLenient`.
([2fa414fb](https://github.com/hyperium/hyper/commit/2fa414fb5fe6dbc922da25cca9960652edf32591))
* `Server` is no longer the primary entry point. Instead,
an `Http` type is created and then either `bind` to receive a `Server`,
or it can be passed to other Tokio things.
([f45e9c8e](https://github.com/hyperium/hyper/commit/f45e9c8e4fcacc2bd7fed84ef0df6d2fcf8c1134))
* The name of `RequestUri` has changed to `Uri`. It is no
longer an `enum`, but an opaque struct with getter methods.
([9036443e](https://github.com/hyperium/hyper/commit/9036443e6bd61b948ebe622588d2765e22e2b179))
* This adds a new variant to the `Encoding` enum, which
can break exhaustive matches.
([f0ab2b6a](https://github.com/hyperium/hyper/commit/f0ab2b6aedb909d37698365d1fcc34ce749304b5))
* The fields of the `Host` header are no longer
available. Use the getter methods instead.
([cd9fd522](https://github.com/hyperium/hyper/commit/cd9fd522074bfe530c30c878e49e6ac1bd881f1f))
* A big sweeping set of breaking changes.
([2d2d5574](https://github.com/hyperium/hyper/commit/2d2d5574a698e74e5102d39b9a9ab750860d92d1))
* `Headers.remove()` used to return a `bool`,
it now returns `Option<H>`. To determine if a a header exists,
switch to `Headers.has()`.
([9375addb](https://github.com/hyperium/hyper/commit/9375addba03505f2515d493364f9b1beb8b9b99a))
* `Header::parse_header` now receives `&Raw`, instead of
a `&[Vec<u8>]`. `Raw` provides several methods to ease using it, but
may require some changes to existing code.
([50ccdaa7](https://github.com/hyperium/hyper/commit/50ccdaa7e7db574ec9890c220765ffd2da5e493b))
* LanguageTag used to be at the crate root, but it is now
in the `hyper::header` module.
([40745c56](https://github.com/hyperium/hyper/commit/40745c5671daf8ac7eb342ff0e1e7c801a7171c4))
* Removes the undocumented `from_u16` function. Use
`StatusCode::try_from` instead.
Also makes the `status` module private. All imports of
`hyper::status::StatusCode` should be `hyper::StatusCode`.
([f953cafe](https://github.com/hyperium/hyper/commit/f953cafe27d1c5de0c8b859e485225cfc2c18629))
* All usage of `status.class()` should change to
equivalent `status.is_*()` methods.
([94ee6204](https://github.com/hyperium/hyper/commit/94ee6204ae32b8c431c00fdc03dc75eee573c69c))
* Most uses of `mime` will likely break. There is no more
`mime!` macro, nor a `Mime` constructor, nor `TopLevel` and `SubLevel`
enums.
Instead, in most cases, a constant exists that can now be used.
For less common mime types, they can be created by parsing a string.
([f273224f](https://github.com/hyperium/hyper/commit/f273224f21eedd2f466f12fe30fd24e83c35922c))
* To use `RawStatus`, you must enable the `raw_status`
crate feature.
([acd62cda](https://github.com/hyperium/hyper/commit/acd62cda446e4c647716a2d595342360dc24a080))
* Some headers used `UniCase`, but now use
`unicase::Ascii`. Upgrade code to `Ascii::new(s)`.
([c81edd41](https://github.com/hyperium/hyper/commit/c81edd41d783f67eca7a50d83b40c8a7cedf333c))
* This breaks a lot of the Client and Server APIs.
Check the documentation for how Handlers can be used for asynchronous
events.
([d35992d0](https://github.com/hyperium/hyper/commit/d35992d0198d733c251e133ecc35f2bca8540d96))
### v0.10.9 (2017-04-19)
#### Features
* **server:** add local_addr to retrieve resolved address ([71f250ad](https://github.com/hyperium/hyper/commit/71f250ad46e9ae0cac108e1de6dc15289da26a56))
### v0.10.8 (2017-04-11)
#### Features
* **client:**
* introduce `PooledStream::<S>::get_ref` ([a54ce30f](https://github.com/hyperium/hyper/commit/a54ce30f902772168bbd8dc90f26bb08cecde6ec))
* introduce Response::get_ref ([5ef0ec2c](https://github.com/hyperium/hyper/commit/5ef0ec2cd2841e78508a61949a207187be914265))
### v0.10.7 (2017-04-08)
#### Bug Fixes
* **server:** don't dup the listener TCP socket. ([d2362331](https://github.com/hyperium/hyper/commit/d23623317820696c910ce43262d5276e8e24c066))
### v0.10.6 (2017-04-05)
#### Features
* **buffer:** add from_parts and into_parts functions ([78551dd0](https://github.com/hyperium/hyper/commit/78551dd040e2ab46e833af355c92fe87aa026244))
### v0.10.5 (2017-03-01)
#### Bug Fixes
* **http:**
* Consume entire chunked encoding message ([4147fcd0](https://github.com/hyperium/hyper/commit/4147fcd0d688b6d5b8d6b32f26c147819321a390))
* fix returning EarlyEof if supplied buffer is zero-len ([1e740fbc](https://github.com/hyperium/hyper/commit/1e740fbcc3fb60af2fe8d2227457fa29582151c3))
### v0.10.4 (2017-01-31)
#### Features
* **header:** implement fmt::Display for several headers ([d5075770](https://github.com/hyperium/hyper/commit/d50757707b1c628f398fb0583aa3dd02111ae658))
### v0.10.3 (2017-01-30)
#### Bug Fixes
* **header:**
* deprecate HeaderFormatter ([282466e1](https://github.com/hyperium/hyper/commit/282466e1c00879cf9dde1ed62c3d436e99bfba85))
* enable SetCookie.fmt_header when only 1 cookie ([7611c307](https://github.com/hyperium/hyper/commit/7611c3071475afa2b0b80bbba2a0a7223a3d5920))
#### Features
* **header:** add Headers::append_raw ([6babbc40](https://github.com/hyperium/hyper/commit/6babbc40fb86a29ad76083a2a386182c40c0f335))
### v0.10.2 (2017-01-23)
#### Bug Fixes
* **header:** security fix for header values that include newlines ([2603d78f](https://github.com/hyperium/hyper/commit/2603d78f59d284953553b7ef48c3ea4baa085cd1))
* **net:** set timeouts directly in `accept` ([f5d4d653](https://github.com/hyperium/hyper/commit/f5d4d653e35ed20bbbb0b13847b3b9f1cfe9575f))
#### Breaking Changes
* This technically will cause code that a calls
`SetCookie.fmt_header` to panic, as it is no longer to properly write
that method. Most people should not be doing this at all, and all
other ways of printing headers should work just fine.
The breaking change must occur in a patch version because of the
security nature of the fix.
([2603d78f](https://github.com/hyperium/hyper/commit/2603d78f59d284953553b7ef48c3ea4baa085cd1))
### v0.10.1 (2017-01-19)
## v0.10.0 (2017-01-10)
#### Features
* **client:**
* change ProxyConfig to allow HTTPS proxies ([14a4f1c2](https://github.com/hyperium/hyper/commit/14a4f1c2f735efe7b638e9078710ca32dc1e360a))
* remove experimental HTTP2 support ([d301c6a1](https://github.com/hyperium/hyper/commit/d301c6a1708c7d408b7f03ac46674a5f0edd3253))
* **header:** remove `cookie` dependency ([f22701f7](https://github.com/hyperium/hyper/commit/f22701f7e7258ad4a26645eba47a3d374e452e86))
* **lib:**
* remove SSL dependencies ([2f48612c](https://github.com/hyperium/hyper/commit/2f48612c7e141a9d612d7cb9d524b2f460561f56))
* remove `serde-serialization` feature ([7b9817ed](https://github.com/hyperium/hyper/commit/7b9817edcf4451bd033e55467c75577031bfe740))
#### Breaking Changes
* There is no more `hyper::http::h2`.
([d301c6a1](https://github.com/hyperium/hyper/commit/d301c6a1708c7d408b7f03ac46674a5f0edd3253))
* The `Cookie` and `SetCookie` headers no longer use the
cookie crate. New headers can be written for any header, or the ones
provided in hyper can be accessed as strings.
([f22701f7](https://github.com/hyperium/hyper/commit/f22701f7e7258ad4a26645eba47a3d374e452e86))
* There is no longer a `serde-serialization` feature.
Look at external crates, like `hyper-serde`, to fulfill this feature.
([7b9817ed](https://github.com/hyperium/hyper/commit/7b9817edcf4451bd033e55467c75577031bfe740))
* hyper will no longer provide OpenSSL support out of the
box. The `hyper::net::Openssl` and related types are gone. The `Client`
now uses an `HttpConnector` by default, which will error trying to
access HTTPS URLs.
TLS support should be added in from other crates, such as
hyper-openssl, or similar using different TLS implementations.
([2f48612c](https://github.com/hyperium/hyper/commit/2f48612c7e141a9d612d7cb9d524b2f460561f56))
* Usage of `with_proxy_config` will need to change to
provide a network connector. For the same functionality, a
`hyper::net::HttpConnector` can be easily created and passed.
([14a4f1c2](https://github.com/hyperium/hyper/commit/14a4f1c2f735efe7b638e9078710ca32dc1e360a))
### v0.9.14 (2016-12-12)
#### Features
* **headers:** add star, json, text, image constructors to Accept ([a9fbbd7f](https://github.com/hyperium/hyper/commit/a9fbbd7fdbcbec51ef560e9882a8fefa64a93b54))
* **server:** add 'take_buf' method to BufReader ([bbbce5fc](https://github.com/hyperium/hyper/commit/bbbce5fc8bca0bcc34df4a4a9223432085fba2ff))
### v0.9.13 (2016-11-27)
#### Bug Fixes
* **client:** close Pooled streams on sockopt error ([d5ffee2e](https://github.com/hyperium/hyper/commit/d5ffee2ec801274ac271273289084b7251b4ce89))
### v0.9.12 (2016-11-09)
#### Features
* **error:** re-export url::ParseError ([30e78ac2](https://github.com/hyperium/hyper/commit/30e78ac212ed3085a5217e8d7f641c2f161ddc87))
### v0.9.11 (2016-10-31)
#### Bug Fixes
* **headers:** Allow IPv6 Addresses in Host header ([20f177ab](https://github.com/hyperium/hyper/commit/20f177abec12397f23adf43f6b726daee1a731cf))
#### Features
* **headers:**
* Add strict-origin and strict-origin-when-cross-origin referer policy ([1be4e769](https://github.com/hyperium/hyper/commit/1be4e7693f7d27c049f35fefb9fffead2581b1f4))
* support multiple values for Referrer-Policy header ([dc476657](https://github.com/hyperium/hyper/commit/dc4766573af9bd31d57fede5b9ef0ffa56fe44ab), closes [#882](https://github.com/hyperium/hyper/issues/882))
* add last-event-id header ([2277987f](https://github.com/hyperium/hyper/commit/2277987f3c25380353db606ca7baaf0c854095cd))
* **server:** accept combined certificate files ([eeb1f48e](https://github.com/hyperium/hyper/commit/eeb1f48e17f4c71162ce90f88bda3dc37b489cc7))
### v0.9.10 (2016-07-11)
#### Features
* **headers:**
* add origin header ([64881ae0](https://github.com/hyperium/hyper/commit/64881ae05458f06261b2e7d0f790184678cc42b9))
* Add Referrer-Policy header ([b76a02cc](https://github.com/hyperium/hyper/commit/b76a02cc446f2a3935006035fd73f5f7a47ec428))
### v0.9.9 (2016-06-21)
#### Bug Fixes
* **headers:** Remove raw part when getting mutable reference to typed header ([63b61524](https://github.com/hyperium/hyper/commit/63b615249443b8f897018f21473c2f1f8e43663c), closes [#821](https://github.com/hyperium/hyper/issues/821))
#### Features
* **error:** Display for Error shows better info ([5620fbf9](https://github.com/hyperium/hyper/commit/5620fbf98f1fd43482a9ffa3c98f2f38b42fd4b0), closes [#694](https://github.com/hyperium/hyper/issues/694))
### v0.9.8 (2016-06-14)
#### Features
* **client:** enable use of custom TLS wrapper for proxied connections ([0476196c](https://github.com/hyperium/hyper/commit/0476196c320765a66f730c56048998980b173caf), closes [#824](https://github.com/hyperium/hyper/issues/824))
### v0.9.7 (2016-06-09)
#### Bug Fixes
* **proxy:** fix the 0.9.x build with `--no-default-features --features=security-framework` ([6caffe9f](https://github.com/hyperium/hyper/commit/6caffe9fb302da99ce8cf0c8027c06b8c6de782d), closes [#819](https://github.com/hyperium/hyper/issues/819))
* **server:** Request.ssl() works ([ce0b62ea](https://github.com/hyperium/hyper/commit/ce0b62eae7688987b722599be8e8b2ff6764b224))
### v0.9.6 (2016-05-23)
#### Bug Fixes
* **client:** Manually impl Debug for PooledStream ([aa692236](https://github.com/hyperium/hyper/commit/aa692236a851d29abec63b6a0d61d957cea5fd26))
* **server:** Switch Ssl to SslServer in bounds ([470bc8ec](https://github.com/hyperium/hyper/commit/470bc8ec396bfc9ead6782f72e6de58268767a5a))
### v0.9.5 (2016-05-18)
#### Bug Fixes
* **windows:** disable openssl cert validation for Windows ([c89aca81](https://github.com/hyperium/hyper/commit/c89aca812bf863aadb52326f534a65c1d3cf31d6), closes [#794](https://github.com/hyperium/hyper/issues/794))
#### Features
* **net:** Add OpensslClient constructor ([3c0e1050](https://github.com/hyperium/hyper/commit/3c0e105011fc8a4fc639370836aa6a2e576b6f0e))
### v0.9.4 (2016-05-09)
#### Bug Fixes
* **warnings:** remove unused_code warnings from newest nightlies ([e7229480](https://github.com/hyperium/hyper/commit/e7229480ea669bbe62fe644e312ba06cdca45b1c))
#### Features
* **ssl:**
* enable hostname verification by default for OpenSSL ([01160abd](https://github.com/hyperium/hyper/commit/01160abd92956e5f995cc45790df7a2b86c8989f), closes [#472](https://github.com/hyperium/hyper/issues/472))
* use secure ciphers by default in openssl ([54bf6ade](https://github.com/hyperium/hyper/commit/54bf6adeee1c3a231925f3efa7e38f875bc2d4d5))
### v0.9.3 (2016-05-09)
#### Bug Fixes
* **client:** fix panic in Pool::connect ([e51bafe2](https://github.com/hyperium/hyper/commit/e51bafe2e4f2a1efc36790232bef488c91131d0b), closes [#780](https://github.com/hyperium/hyper/issues/780))
### v0.9.2 (2016-05-04)
#### Features
* **client:**
* proper proxy and tunneling in Client ([f36c6b25](https://github.com/hyperium/hyper/commit/f36c6b25), closes [#774](https://github.com/hyperium/hyper/issues/774))
* add Proxy support ([25010fc1](https://github.com/hyperium/hyper/commit/25010fc1), closes [#531](https://github.com/hyperium/hyper/issues/531))
#### Performance
* **client:** don't keep Pool mutex locked during getaddrinfo ([5fcc04a6](https://github.com/hyperium/hyper/commit/5fcc04a6))
### v0.9.1 (2016-04-21)
#### Bug Fixes
* **Cargo.toml:** update documentation link ([b783ddf4](https://github.com/hyperium/hyper/commit/b783ddf455ee93cc38510f3179ffe18733c797c1))
## v0.9.0 (2016-04-21)
#### Features
* **net:** Add Ssl impls for security-framework ([f37315b2](https://github.com/hyperium/hyper/commit/f37315b2708e092eaf5177a6960df9f7bf11eb5c))
#### Breaking Changes
* The re-exported Url type has breaking changes.
([8fa7a989](https://github.com/hyperium/hyper/commit/8fa7a9896809ef2a24994993b91981105a520f26))
### v0.8.1 (2016-04-13)
#### Bug Fixes
* **headers:** correctly handle repeated headers ([70c69142](https://github.com/hyperium/hyper/commit/70c6914217a9b48880e61b7fb59acd15c6e1421e), closes [#683](https://github.com/hyperium/hyper/issues/683))
#### Features
* **header:** add prefer and preference applied headers ([6f649301](https://github.com/hyperium/hyper/commit/6f6493010a9c190b29aceb3c10c65785923a85f5), closes [#747](https://github.com/hyperium/hyper/issues/747))
* **net:** Split Ssl into SslClient and SslServer ([2c86e807](https://github.com/hyperium/hyper/commit/2c86e8078ec01db2283e1fee1461db4c7bf76d3f), closes [#756](https://github.com/hyperium/hyper/issues/756))
## v0.8.0 (2016-03-14)
#### Bug Fixes
* **headers:** remove charset from `ContentType::json()` convenience method ([ec568e9a](https://github.com/hyperium/hyper/commit/ec568e9a551018b3353b6754eb2fcd729c7ea3c6))
* **net:** fix the typo in `set_write_timeout` ([7c76fff3](https://github.com/hyperium/hyper/commit/7c76fff3aaf0f0a300e76622acb56eaf1e2cb474))
#### Features
* **client:** Implement Debug for Client ([8c7ef7fd](https://github.com/hyperium/hyper/commit/8c7ef7fd937616798780d43f80a6b46507bc3433))
* **status:** add HTTP statuses 421 and 451 ([93fd5a87](https://github.com/hyperium/hyper/commit/93fd5a87bddc5bfe29f35f86d44d3f46c81ff5fa))
#### Breaking Changes
* mime 0.2 depends on serde 0.7, so any instances of
using older versions of serde will need to upgrade.
([146df53c](https://github.com/hyperium/hyper/commit/146df53caf2a70cd15f97710738ba8d350040c12))
### v0.7.2 (2016-01-04)
#### Bug Fixes
* **buffer:** fix incorrect resizing of BufReader ([3a18e72b](https://github.com/hyperium/hyper/commit/3a18e72be67152834f6967c6d208f214288178ee), closes [#715](https://github.com/hyperium/hyper/issues/715))
#### Features
* **headers:** allow ExtendedValue structs to be formatted and used as struct members ([da0abe89](https://github.com/hyperium/hyper/commit/da0abe8988a61281b447a554b65ea8fd5d54f81b))
### v0.7.1 (2015-12-19)
#### Bug Fixes
* **cargo:** remove * dependencies for serde and env_logger ([4a05bee9](https://github.com/hyperium/hyper/commit/4a05bee9abdc426bbd904fe356b771e492dc8f43))
* **server:**
* Flush 100-continue messages ([92ff50f2](https://github.com/hyperium/hyper/commit/92ff50f2e57fa2cb8a55b3d6d9fa43ef9a1b5526), closes [#704](https://github.com/hyperium/hyper/issues/704))
* Removed check for GET/HEAD request when parsing body ([0b05c590](https://github.com/hyperium/hyper/commit/0b05c5903e86327cc9cb4cac39217e496851fce3), closes [#698](https://github.com/hyperium/hyper/issues/698))
#### Features
* **headers:** add extended parameter parser to the public API ([402fb76b](https://github.com/hyperium/hyper/commit/402fb76bb2f3dab101509e4703743ab075ae41be))
## v0.7.0 (2015-11-24)
#### Features
* **all:** add socket timeouts ([fec6e3e8](https://github.com/hyperium/hyper/commit/fec6e3e873eb79bd17d1c072d2ca3c7b91624f9c))
* **headers:**
* Add Content-Disposition header ([7623ecc2](https://github.com/hyperium/hyper/commit/7623ecc26466e2e072eb2b03afc5e6c16d8e9bc9), closes [#561](https://github.com/hyperium/hyper/issues/561))
* Add Access-Control-Allow-Credentials header ([19348b89](https://github.com/hyperium/hyper/commit/19348b892be4687e2c0e48b3d01562562340aa1f), closes [#655](https://github.com/hyperium/hyper/issues/655))
* re-export CookiePair and CookieJar ([799698ca](https://github.com/hyperium/hyper/commit/799698ca87bc8f2f5446e9cb1301e5976657db6b))
#### Breaking Changes
* This adds 2 required methods to the `NetworkStream`
trait, `set_read_timeout` and `set_write_timeout`. Any local
implementations will need to add them.
([fec6e3e8](https://github.com/hyperium/hyper/commit/fec6e3e873eb79bd17d1c072d2ca3c7b91624f9c))
* LanguageTags api is changed.
([c747f99d](https://github.com/hyperium/hyper/commit/c747f99d2137e03b5f4393ee3731f6ebeab9ee6e))
### v0.6.16 (2015-11-16)
#### Bug Fixes
* **response:** respond with a 500 if a handler panics ([63c6762c](https://github.com/hyperium/hyper/commit/63c6762c15ec790f54391a71794315599ae0ced8))
#### Features
* **headers:** Add Access-Control-Expose-Headers ([f783e991](https://github.com/hyperium/hyper/commit/f783e9913b988f3d5c28707e2291145999756dbe))
* **server:** Add hooks for HttpListener and HttpsListener to be started from existing listener ([fa0848d4](https://github.com/hyperium/hyper/commit/fa0848d4216aa81e7b7619b7ce0a650356ee7ab7))
#### Breaking Changes
* `RequestBuilder<U>` should be replaced by `RequestBuilder`.
([ff4a6070](https://github.com/hyperium/hyper/commit/ff4a6070573955d1623d51a3d5302a17eed8f8d6))
### v0.6.15 (2015-10-09)
#### Bug Fixes
* **server:** use a timeout for Server keep-alive ([cdaa2547](https://github.com/hyperium/hyper/commit/cdaa2547ed18dfb0e3b8ed2ca15cfda1f98fa9fc), closes [#368](https://github.com/hyperium/hyper/issues/368))
#### Features
* **client:** add patch method to Client builder interface ([03827c31](https://github.com/hyperium/hyper/commit/03827c3156b5c0a7c865c5846aca2c1ce7a9f4ce))
### v0.6.14 (2015-09-21)
#### Bug Fixes
* **http:**
* Add a stream enum that makes it impossible to lose a stream ([be4e7181](https://github.com/hyperium/hyper/commit/be4e7181456844180963d0e5234656c319ce92a6))
* Make sure not to lose the stream when CL is invalid ([a36e44af](https://github.com/hyperium/hyper/commit/a36e44af7d4e665a122c1498011ff10035f7376f))
* **server:** use EmptyWriter for status codes that have no body ([9b2998bd](https://github.com/hyperium/hyper/commit/9b2998bddc3c033e4fc4e6a9b7d18504339ded3f))
* **timeouts:** remove rust #![feature] for socket timeouts ([b8729698](https://github.com/hyperium/hyper/commit/b872969880be502b681def26d6b9780cc90ac74b))
#### Features
* **headers:** add PartialEq impl for Headers struct ([76cbf384](https://github.com/hyperium/hyper/commit/76cbf384231e602d888e49932bf9c4fafdd88051))
### v0.6.13 (2015-09-02)
#### Bug Fixes
* **client:** EofReader by nature means the connection is closed ([32e09a04](https://github.com/hyperium/hyper/commit/32e09a04292b0247456a8fb9003a75a6abaa998e))
### v0.6.12 (2015-09-01)
#### Bug Fixes
* **client:** be resilient to invalid response bodies ([75c71170](https://github.com/hyperium/hyper/commit/75c71170206db3119d9b298ea5cf3ee860803124), closes [#640](https://github.com/hyperium/hyper/issues/640))
* **examples:** "cargo test --features serde-serialization" ([63608c49](https://github.com/hyperium/hyper/commit/63608c49c0168634238a119eb64ea1074df1b7e6))
* **http:** fix several cases in HttpReader ([5c7195ab](https://github.com/hyperium/hyper/commit/5c7195ab4a213bf0016f2185a63a6341e4cef4de))
#### Features
* **server:** Add Handler per-connection hooks ([6b6182e8](https://github.com/hyperium/hyper/commit/6b6182e8c4c81f634becebe7b45dc21bff59a286))
### v0.6.11 (2015-08-27)
#### Bug Fixes
* **client:** fix panics when some errors occurred inside HttpMessage ([ef15257b](https://github.com/hyperium/hyper/commit/ef15257b733d40bc3a7c598f61918f91385585f9))
* **headers:** case insensitive values for Connection header ([341f8eae](https://github.com/hyperium/hyper/commit/341f8eae6eb33e2242be09541807cdad9afc732e), closes [#635](https://github.com/hyperium/hyper/issues/635))
#### Breaking Changes
* This changes the signature of HttpWriter.end(),
returning a `EndError` that is similar to std::io::IntoInnerError,
allowing HttpMessage to retrieve the broken connections and not panic.
The breaking change isn't exposed in any usage of the `Client` API,
but for anyone using `HttpWriter` directly, since this was technically
a public method, that change is breaking.
([ef15257b](https://github.com/hyperium/hyper/commit/ef15257b733d40bc3a7c598f61918f91385585f9))
### v0.6.10 (2015-08-19)
#### Bug Fixes
* **client:** close connection when there is an Error ([d32d35bb](https://github.com/hyperium/hyper/commit/d32d35bbea947172224082e1f9b711022ce75e30))
#### Features
* **uri:** implement fmt::Display for RequestUri () ([80931cf4](https://github.com/hyperium/hyper/commit/80931cf4c31d291125700ed3f9be5b3cb015d797), closes [#629](https://github.com/hyperium/hyper/issues/629))
### v0.6.9 (2015-08-13)
#### Bug Fixes
* **client:**
* improve keep-alive of bodyless Responses ([67c284a9](https://github.com/hyperium/hyper/commit/67c284a96a006f888f43d8af929516465de76dea))
* improve HttpReader selection for client Responses ([31f117ea](https://github.com/hyperium/hyper/commit/31f117ea08c01889016fd45e7084e9a049c53f7a), closes [#436](https://github.com/hyperium/hyper/issues/436))
* **nightly:** remove feature flag for duration ([0455663a](https://github.com/hyperium/hyper/commit/0455663a98d7969c23d64d0b775799342507ef8e))
#### Features
* **headers:** Content-Range header ([af062ac9](https://github.com/hyperium/hyper/commit/af062ac954d5b90275138880ce2f5013d6664b5a))
* **net:** impl downcast methods for NetworkStream (without + Send) ([1a91835a](https://github.com/hyperium/hyper/commit/1a91835abaa804aabf2e9bb45e9ab087274b8a18), closes [#521](https://github.com/hyperium/hyper/issues/521))
* **server:** add Request.ssl() to get underlying ssl stream ([7909829f](https://github.com/hyperium/hyper/commit/7909829f98bd9a2f454430f89b6143b977aedb35), closes [#627](https://github.com/hyperium/hyper/issues/627))
### v0.6.8 (2015-08-03)
#### Features
* **raw-fd:** implement FromRawFd/FromRawSocket ([664bde58](https://github.com/hyperium/hyper/commit/664bde58d8a6b2d6ce5624ed96b8d6d68214a782))
### v0.6.7 (2015-08-03)
#### Bug Fixes
* **headers:** fix broken deserialization of headers ([f5f5e1cb](https://github.com/hyperium/hyper/commit/f5f5e1cb2d01a22f170432e73b9c5757380cc18b))
#### Features
* **net:**
* Implement NetworkConnector for closure to be more flexible ([abdd4c5d](https://github.com/hyperium/hyper/commit/abdd4c5d632059ebef9bbee95032c9500620212e))
* add socket timeouts to Server and Client ([7d1f154c](https://github.com/hyperium/hyper/commit/7d1f154cb7b4db4a029b52857c377000a3f23419), closes [#315](https://github.com/hyperium/hyper/issues/315))
#### Breaking Changes
* Any custom implementation of NetworkStream must now
implement `set_read_timeout` and `set_write_timeout`, so those will
break. Most users who only use the provided streams should work with
no changes needed.
Closes #315
([7d1f154c](https://github.com/hyperium/hyper/commit/7d1f154cb7b4db4a029b52857c377000a3f23419))
### v0.6.5 (2015-07-23)
#### Bug Fixes
* **tests:** iter.connect() is now iter.join() ([d2e8b5dc](https://github.com/hyperium/hyper/commit/d2e8b5dc3d2e6f0386656f4a5926acb848d4a61d))
#### Features
* **status:**
* implement `Hash` for `StatusCode` ([d84f291a](https://github.com/hyperium/hyper/commit/d84f291abc0a64e270143eee943a76a7aebec029))
* implement `Hash` for `StatusCode` ([aa85f609](https://github.com/hyperium/hyper/commit/aa85f609b5136cb2a9b23408a2b125c6a8a20f37))
### v0.6.4 (2015-07-23)
#### Features
* **http:** add optional serialization of common types via `serde` ([87de1b77](https://github.com/hyperium/hyper/commit/87de1b77bcd5533c70a6ab9379121001acc5d366))
### v0.6.3 (2015-07-08)
#### Bug Fixes
* **lint:** change deny(missing_docs) to only apply for tests ([5994a6f8](https://github.com/hyperium/hyper/commit/5994a6f8b4e48c9ab766e425dba210bdac59b00b), closes [#600](https://github.com/hyperium/hyper/issues/600))
### v0.6.2 (2015-07-06)
#### Bug Fixes
* **http:** no longer keep alive for Http1.0 if no Connection header ([ddecb262](https://github.com/hyperium/hyper/commit/ddecb262b39b90e594a95ba16c4dc8085930677e), closes [#596](https://github.com/hyperium/hyper/issues/596))
#### Features
* **client:** add url property Response ([82ed9092](https://github.com/hyperium/hyper/commit/82ed9092e30385de004912582a7838e037497c82))
* **headers:** add strict-transport-security header ([7c2e5124](https://github.com/hyperium/hyper/commit/7c2e5124e6678a5806f980902031e6f01652d218), closes [#589](https://github.com/hyperium/hyper/issues/589))
#### Breaking Changes
* Access-Control-Allow-Origin does no longer use Url
([ed458628](https://github.com/hyperium/hyper/commit/ed458628e54bd241b45f50fb0cf55a84ffb12205))
* Technically a break, since `Response::new()` takes an
additional argument. In practice, the only place that should have been
creating Responses directly is inside the Client, so it shouldn't
break anyone. If you were creating Responses manually, you'll need to
pass a Url argument.
([82ed9092](https://github.com/hyperium/hyper/commit/82ed9092e30385de004912582a7838e037497c82))
### v0.6.1 (2015-06-26)
#### Bug Fixes
* **benches:** adjust to missing `set_ssl_verifier` ([eb38a11b](https://github.com/hyperium/hyper/commit/eb38a11b9ab401d6b909077f92507fa872349d13))
* **cargo:** fix linking on OSX 10.10 ([9af2b66f](https://github.com/hyperium/hyper/commit/9af2b66fe4003706517d95ed94013af9cd365b24))
* **client:** use Ssl instance in creation of SslStream ([1a490e25](https://github.com/hyperium/hyper/commit/1a490e25c321bdd173d47ed7a7a704039746fb29))
## v0.6.0 (2015-06-24)
#### Bug Fixes
* **client:** check for drained stream in Response::drop ([e689f203](https://github.com/hyperium/hyper/commit/e689f20376d3e078f5d380902d39f8ae9c043486))
#### Features
* **client:**
* impl Sync for Client ([64e47b4b](https://github.com/hyperium/hyper/commit/64e47b4bbd0433065a059804adeb2b4a2d72f327), closes [#254](https://github.com/hyperium/hyper/issues/254))
* implement Protocol trait for HTTP/1.1 ([dccdf8d6](https://github.com/hyperium/hyper/commit/dccdf8d65a9b900daec34555d3b97c2c3c678067))
* add `Protocol` trait ([3417303a](https://github.com/hyperium/hyper/commit/3417303a4a9aa4809729d53f0d018338e876da51))
* implement HttpMessage for HTTP/1.1 ([ecb713f8](https://github.com/hyperium/hyper/commit/ecb713f8494b13bdba91258b1507e8f7ce62b8d9))
* add `HttpMessage` trait ([289fd02b](https://github.com/hyperium/hyper/commit/289fd02b55a42748cbce8de428939208713a765d))
* **error:** add private `__Nonexhaustive` variant to Error ([7c0421e3](https://github.com/hyperium/hyper/commit/7c0421e3fc1d5a8b4868b57acca87abd685f3430))
* **headers:**
* add bearer token support ([edf6ac20](https://github.com/hyperium/hyper/commit/edf6ac2074d11694ded275807a66df3a8a8e33a6))
* add `Range` header ([05c31998](https://github.com/hyperium/hyper/commit/05c319984630b31d18dfbfa9b7567f6c7613d7f8))
* **http2:**
* implement message API for HTTP/2 ([f0fe2c5a](https://github.com/hyperium/hyper/commit/f0fe2c5a83bd4e654a4ff684f75a1b602f8f38fc))
* add new error variant for HTTP/2 ([48e9ca2f](https://github.com/hyperium/hyper/commit/48e9ca2f70f6c6475f1579ae9212af7b4ca87e88))
* add dependency on `solicit` ([3122ffef](https://github.com/hyperium/hyper/commit/3122ffefc2d56ffc03a6fcc264086df0c9d74083))
* **langtags:** use true language tags in headers ([99ff7e62](https://github.com/hyperium/hyper/commit/99ff7e62573865a1fc431db26b6a18c43b9127de))
* **ssl:** redesign SSL usage ([53bba6eb](https://github.com/hyperium/hyper/commit/53bba6eb7f34e61e5c8a835281d625436532de8f))
#### Breaking Changes
* AcceptLanguage and ContentLanguage use LanguageTag now,
Language removed from Hyper.
([99ff7e62](https://github.com/hyperium/hyper/commit/99ff7e62573865a1fc431db26b6a18c43b9127de))
* Server::https was changed to allow any implementation
of Ssl. Server in general was also changed. HttpConnector no longer
uses SSL; using HttpsConnector instead.
([53bba6eb](https://github.com/hyperium/hyper/commit/53bba6eb7f34e61e5c8a835281d625436532de8f))
* Connectors and Protocols passed to the `Client` must
now also have a `Sync` bounds, but this shouldn't break default usage.
([64e47b4b](https://github.com/hyperium/hyper/commit/64e47b4bbd0433065a059804adeb2b4a2d72f327))
* parse_header returns Result instead of Option, related
code did also change
([195a89fa](https://github.com/hyperium/hyper/commit/195a89fa918a83c9dcab47a4b09edb464d4e8006))
* Adds a new variant to public Error enum. The proper fix
is to stop matching exhaustively on `hyper::Error`.
([7c0421e3](https://github.com/hyperium/hyper/commit/7c0421e3fc1d5a8b4868b57acca87abd685f3430))
* A new variant `Http2` added to a public enum
`hyper::Error`.
([48e9ca2f](https://github.com/hyperium/hyper/commit/48e9ca2f70f6c6475f1579ae9212af7b4ca87e88))
* `hyper::client::request::Response` is no longer generic
over `NetworkStream` types. It no longer requires a generic type
parameter at all.
([aa297f45](https://github.com/hyperium/hyper/commit/aa297f45322d66980bb2b51c413b15dfd51533ea))
### v0.5.2 (2015-06-01)
#### Bug Fixes
* **buffer:** check capacity before resizing ([b1686d1b](https://github.com/hyperium/hyper/commit/b1686d1b22aa95a17088f99054d577bbb2aef9dc))
### v0.5.1 (2015-05-25)
#### Bug Fixes
* **client:** don't close stream until EOF ([a5e6174e](https://github.com/hyperium/hyper/commit/a5e6174efd57afb1df7113c64f4e7718a3a94187), closes [#543](https://github.com/hyperium/hyper/issues/543))
#### Features
* **client:** implement Default trait for client ([be041d91](https://github.com/hyperium/hyper/commit/be041d915a55fa1b5088e112b81727b864949976))
* **header:** add ContentType::form_url_encoded() constructor ([2c99d4e9](https://github.com/hyperium/hyper/commit/2c99d4e9068b30ecb6d4eac4d364924fb253fdcd))
* **headers:** return hyper::Error instead of () from header components ([5d669399](https://github.com/hyperium/hyper/commit/5d669399b6ca5ec7d0f01b9d30513cd1cc4cc47b))
* **http:** add get_mut method to HttpReader ([e64ce8c0](https://github.com/hyperium/hyper/commit/e64ce8c05e847b2396e4b7e2bb656240e9806ed8))
#### Breaking Changes
* Error enum extended. Return type of header/shared/
types changed.
([5d669399](https://github.com/hyperium/hyper/commit/5d669399b6ca5ec7d0f01b9d30513cd1cc4cc47b))
## v0.5.0 (2015-05-12)
#### Bug Fixes
* **client:**
* don't call close() inside Request ([3334fca2](https://github.com/hyperium/hyper/commit/3334fca278e662b2755e41045ce641238514bea9), closes [#519](https://github.com/hyperium/hyper/issues/519))
* keep the underlying connector when setting an SSL verifier ([f4556d55](https://github.com/hyperium/hyper/commit/f4556d554faa2a1170fec0af5b4076c31e7c3600), closes [#495](https://github.com/hyperium/hyper/issues/495))
* **mock:** adjust ChannelMockConnector connect method to compile ([085d7b07](https://github.com/hyperium/hyper/commit/085d7b0752d7fc0134e99e9eec2a67cc66b319b3))
#### Features
* **header:**
* add ContentType::json(), plaintext(), html(), jpeg(), and png() constructors ([b6114ecd](https://github.com/hyperium/hyper/commit/b6114ecd2e65bd59e79a67a45913adaf0f1552f0))
* add Connection::close() and ::keep_alive() constructors ([c2938fb4](https://github.com/hyperium/hyper/commit/c2938fb45f9c1fff2a1235d82b7741531de21445))
* export __hyper__tm! macro so test modules work with header! ([f64fb10b](https://github.com/hyperium/hyper/commit/f64fb10bc87bb4b5a5291d09364ad6c725a842d8))
* **net:**
* remove mut requirement for NetworkConnector.connect() ([1b318724](https://github.com/hyperium/hyper/commit/1b318724a5fd425366daddf15c5964d7c3cbc240))
* add `set_ssl_verifier` method to `NetworkConnector` trait ([a5d632b6](https://github.com/hyperium/hyper/commit/a5d632b6ea53d0988d6383dd734d0b5e6245ba2b))
* **server:** check Response headers for Connection: close in keep_alive loop ([49b5b8fd](https://github.com/hyperium/hyper/commit/49b5b8fdfe256ead8f3aa3d489bc4b299c190a9a))
#### Breaking Changes
* Usage of Response.deconstruct() and construct() now use
a &mut Headers, instead of the struct proper.
([49b5b8fd](https://github.com/hyperium/hyper/commit/49b5b8fdfe256ead8f3aa3d489bc4b299c190a9a))
* If you use deref! from the header module, you'll need
to switch to using __hyper__deref!.
([62d96adc](https://github.com/hyperium/hyper/commit/62d96adc6b852b3836b47fc2e154bbdbab9ad7f6))
* Any custom Connectors will need to change to &self in
the connect method. Any Connectors that needed the mutability need to
figure out a synchronization strategy.
Request::with_connector() takes a &NetworkConnector instead of &mut.
Any uses of with_connector will need to change to passing &C.
([1b318724](https://github.com/hyperium/hyper/commit/1b318724a5fd425366daddf15c5964d7c3cbc240))
* Adding a new required method to a public trait is a
breaking change.
([a5d632b6](https://github.com/hyperium/hyper/commit/a5d632b6ea53d0988d6383dd734d0b5e6245ba2b))
## v0.4.0 (2015-05-07)
#### Bug Fixes
* **net:** ignore NotConnected error in NetworkStream.close ([6be60052](https://github.com/hyperium/hyper/commit/6be60052c627b7e498d973465b4a3ee7efc40665), closes [#508](https://github.com/hyperium/hyper/issues/508))
#### Features
* **error:** add Ssl variant to hyper::Error ([972b3a38](https://github.com/hyperium/hyper/commit/972b3a388ac3af98ba038927c551b92be3a68d62), closes [#483](https://github.com/hyperium/hyper/issues/483))
* **headers:**
* Allow `null` value in Access-Control-Allow-Origin ([5e341714](https://github.com/hyperium/hyper/commit/5e3417145ced116147ef1e890b4f1e7c775ad173))
* Parse Upgrade header protocols further ([f47d11b9](https://github.com/hyperium/hyper/commit/f47d11b97bb4a4bf67c3f9aa47c203babf4a9c72), closes [#480](https://github.com/hyperium/hyper/issues/480))
* Add From header field ([ce9c4af1](https://github.com/hyperium/hyper/commit/ce9c4af1e0a46abc9f7908c2cb0659a2ecab137c))
* Add Accept-Ranges header field ([2dbe3f9b](https://github.com/hyperium/hyper/commit/2dbe3f9b9a3fc9f04346712e55f40dabaf72d9a8))
* **method:** implement `AsRef<str>` for `Method` ([c29af729](https://github.com/hyperium/hyper/commit/c29af729726ae782bece5e790bce02b0d3ab9ef9))
* **server:**
* add Response.send to write a sized body ([d5558b68](https://github.com/hyperium/hyper/commit/d5558b687d32d0affb9aaa7185227a4e294f5454), closes [#446](https://github.com/hyperium/hyper/issues/446))
* dropping a Response will write out to the underlying stream ([a9dcc59c](https://github.com/hyperium/hyper/commit/a9dcc59cd9846609a5733678f66353655c075279))
#### Breaking Changes
* Adds a variant to `hyper::Error`, which may break any
exhaustive matches.
([972b3a38](https://github.com/hyperium/hyper/commit/972b3a388ac3af98ba038927c551b92be3a68d62))
* The terms `Http` and `Error` have been removed from the Error
type and its variants. `HttpError` should now be accessed as `hyper::Error`,
and variants like `HttpIoError` should be accessed as `Error::Io`.
([9ba074d1](https://github.com/hyperium/hyper/commit/9ba074d150a55a749161317405fe8b28253c5a9d))
* Add variant to Access-Control-Allow-Origin enum
([5e341714](https://github.com/hyperium/hyper/commit/5e3417145ced116147ef1e890b4f1e7c775ad173))
* Upgrade header Protocol changed.
([f47d11b9](https://github.com/hyperium/hyper/commit/f47d11b97bb4a4bf67c3f9aa47c203babf4a9c72))
* `from_one_raw_str()` returns `None` on empty values.
([a6974c99](https://github.com/hyperium/hyper/commit/a6974c99d39fcbaf3fb9ed38428b21e0301f3602))
### v0.3.16 (2015-05-01)
#### Bug Fixes
* **header:**
* make test_module of header! optional ([a5ce9c59](https://github.com/hyperium/hyper/commit/a5ce9c59fa61410551b07252364564a2bb13bb86), closes [#490](https://github.com/hyperium/hyper/issues/490))
* exporting test_header! macro ([2bc5a779](https://github.com/hyperium/hyper/commit/2bc5a779bdc3fce67e06c398ac8702fcbea93dab))
* **http:** keep raw reason phrase in RawStatus ([8cdb9d5d](https://github.com/hyperium/hyper/commit/8cdb9d5d3b0972629e8843d3c1db58dbbbaf49cf), closes [#497](https://github.com/hyperium/hyper/issues/497))
#### Features
* **client:** add a Connection Pool ([1e72a8ab](https://github.com/hyperium/hyper/commit/1e72a8ab3a0092bb863686ad2e65646710706c1b), closes [#363](https://github.com/hyperium/hyper/issues/363), [#41](https://github.com/hyperium/hyper/issues/41))
* **headers:** Add If-Range header ([a39735f1](https://github.com/hyperium/hyper/commit/a39735f1d3d1a314969b5b0085e8f77f0c10c863), closes [#388](https://github.com/hyperium/hyper/issues/388))
### v0.3.15 (2015-04-29)
#### Bug Fixes
* **headers:**
* Do not parse empty values in list headers. ([093a29ba](https://github.com/hyperium/hyper/commit/093a29bab7eb27e78bb10506478ac486e8d61671))
* Fix formatting of 0 qualites and formatting of empty list header fields. ([621ef521](https://github.com/hyperium/hyper/commit/621ef521f6723ba2d59beff05ff39ae8fd6df2c3))
#### Features
* **client:**
* remove Clone requirement for NetworkStream in Client ([60d92c29](https://github.com/hyperium/hyper/commit/60d92c296a445b352679919c03c5ed2a2a297e16))
* accept &String as Body in RequestBuilder ([a2aefd9a](https://github.com/hyperium/hyper/commit/a2aefd9a5689d4816f7c054bd6c32aa5c6fe3087))
* accept &String for a Url in RequestBuilder ([8bc179fb](https://github.com/hyperium/hyper/commit/8bc179fb517735a7c1d5cd1d7f5598bb82914dc6))
* **headers:** Implement Content-Language header field ([308880b4](https://github.com/hyperium/hyper/commit/308880b455df4dbb5d32817b5c0320c2a88139e3), closes [#475](https://github.com/hyperium/hyper/issues/475))
* **net:** add https_using_context for user-supplied SslContext ([1a076d1b](https://github.com/hyperium/hyper/commit/1a076d1bc7e8fb9c58904b0cec879dcf0fbce97b))
* **server:** allow consumer to supply an SslContext ([3a1a2427](https://github.com/hyperium/hyper/commit/3a1a24270dd13e22ef59120d66d327528949d5e0), closes [#471](https://github.com/hyperium/hyper/issues/471))
#### Breaking Changes
* This removes the trait `IntoBody`, and instead using
`Into<Body>`, as it's more idiomatic. This will only have broken code
that had custom implementations of `IntoBody`, and can be fixed by
changing them to `Into<Body>`.
([a2aefd9a](https://github.com/hyperium/hyper/commit/a2aefd9a5689d4816f7c054bd6c32aa5c6fe3087))
### v0.3.14 (2015-04-18)
#### Bug Fixes
* **http:** Adjust httparse Request and Response lifetimes. ([76550fdb](https://github.com/hyperium/hyper/commit/76550fdb20bb812e92a1fc3f3a7eaaf4a689348b))
### v0.3.13 (2015-04-17)
#### Bug Fixes
* **server:** JoinHandle type parameter ([c694b138](https://github.com/hyperium/hyper/commit/c694b1385bd294e7c8e0398ee75e3a054ced5006))
#### Features
* **debug:** add Debug impls for StatusClass, Server, and Listening ([0fb92ee7](https://github.com/hyperium/hyper/commit/0fb92ee735136a07c832124df521b96a6779bd39))
### v0.3.12 (2015-04-15)
#### Bug Fixes
* **server:**
* handle keep-alive closing ([d9187713](https://github.com/hyperium/hyper/commit/d9187713b2eaa628eb34f68c8a7201a6cf8e010d), closes [#437](https://github.com/hyperium/hyper/issues/437))
* join on thread when Listening drops ([68d4d63c](https://github.com/hyperium/hyper/commit/68d4d63c2a0289b72ec1442d13e1212a0479c50b), closes [#447](https://github.com/hyperium/hyper/issues/447))
* Use thread::spawn instead of thread::scoped. ([e8649567](https://github.com/hyperium/hyper/commit/e864956734af72bab07a3e01c9665bc1b7c96e5e))
#### Features
* **http:** Implement Debug for HttpReader/Writer. ([2f606c88](https://github.com/hyperium/hyper/commit/2f606c88bd91e5e36dee4c6db00c3117b1adf067))
* **log:** clean up logging ([4f09b002](https://github.com/hyperium/hyper/commit/4f09b002ffb2d076fc8fb01d9b9e0464216b2b41))
* **net:** make HttpStream implement Debug ([7b7f9c25](https://github.com/hyperium/hyper/commit/7b7f9c257d0e2d515bf336c567f12a625471e477))
### v0.3.11 (2015-04-15)
#### Bug Fixes
* **headers:** Content-Encoding needs a hyphen. ([ca2815ef](https://github.com/hyperium/hyper/commit/ca2815effda2a5b27f781b7bc35105aa81121bae))
#### Features
* **client:** remove generic parameter for Connector ([139a51f1](https://github.com/hyperium/hyper/commit/139a51f1c31b80cdddf643e984bbbfbb3d3e8c96), closes [#379](https://github.com/hyperium/hyper/issues/379))
#### Breaking Changes
* `AccessControlAllowHeaders` and `AccessControlRequestHeaders` values
are case insensitive now. `AccessControlAllowOrigin` variants are now `Any` and
`Value` to match the other headers.
([94f38950](https://github.com/hyperium/hyper/commit/94f38950ddf9a97fdc4f44e42aada4ed8f4d9b43))
* `If-Match`, `If-None-Match` and `Vary` item variant name changed to `Items`
([38d297b1](https://github.com/hyperium/hyper/commit/38d297b16e5d14d533947988f770f03b49d47a17))
* `Etag` header field is now `ETag` header field
([4434ea6a](https://github.com/hyperium/hyper/commit/4434ea6a7d57d367c0a541c82f6289ffbda5fb6c))
* For people using the default HttpConnector and Client,
everything should continue to just work. If the Client has been
used with a generic parameter, it should be removed.
However, there were some breaking changes to the internals of
NetworkConnectors. Specifically, they no longer return a
NetworkStream, but instead a Into<Box<NetworkStream + Send>>. All
implementations of NetworkStream should continue to just work,
however.
Possible breakages could come from the stricter usage of Send
throughout the Client API.
([139a51f1](https://github.com/hyperium/hyper/commit/139a51f1c31b80cdddf643e984bbbfbb3d3e8c96))
### v0.3.10 (2015-04-06)
#### Bug Fixes
* **README:** Update to compile example against Rust beta ([341f19d3](https://github.com/hyperium/hyper/commit/341f19d3266c6de9a9a90c94f718124792766630))
### v0.3.9 (2015-04-03)
#### Bug Fixes
* **headers:** Add CowStr as a temporary hack to build on beta. ([8e065563](https://github.com/hyperium/hyper/commit/8e0655637e80c5377c01da4dbca6fb627e6d4225))
### v0.3.8 (2015-04-02)
#### Bug Fixes
* **rustup:** update to rust beta ([0f5858f3](https://github.com/hyperium/hyper/commit/0f5858f37974731243d47710364776fdd73376fe))
#### Breaking Changes
* Removed impl_header!() and impl_list_header!() macros,
use new header!() macro.
([262c450f](https://github.com/hyperium/hyper/commit/262c450f908dbf27754daff0784f0f20145036dd))
### v0.3.7 (2015-03-31)
#### Bug Fixes
* **buffer:** zero out new capacity when buffer grows ([cfdabd70](https://github.com/hyperium/hyper/commit/cfdabd70ecc3f5290ae1e6f7e5dfd50310d8658d))
#### Features
* **entitytag:** Add EntityTag comparison, make EntityTag safe to use ([9c21f7f9](https://github.com/hyperium/hyper/commit/9c21f7f953a5163792e71fb186cab391c45d1bb4))
### v0.3.6 (2015-03-30)
#### Bug Fixes
* **buffer:** get_buf to not return consumed part of buffer ([04e3b565](https://github.com/hyperium/hyper/commit/04e3b5651561f087fee7c0345fe77d217d3ad35a), closes [#406](https://github.com/hyperium/hyper/issues/406))
* **rustup:** get rid of slice pattern, add `Reflect` bounds ([c9f2c841](https://github.com/hyperium/hyper/commit/c9f2c841ff0e68dead38e762ed5f8c0f42255bc4))
### v0.3.5 (2015-03-28)
#### Bug Fixes
* **http:** read more before triggering TooLargeError ([cb59f609](https://github.com/hyperium/hyper/commit/cb59f609c61a097d5d9fa728b9df33d79922573b), closes [#389](https://github.com/hyperium/hyper/issues/389))
### v0.3.4 (2015-03-26)
#### Bug Fixes
* **rustup:** static bounds required on Type definition, trivial_casts ([eee7a85d](https://github.com/hyperium/hyper/commit/eee7a85d3c3a3f51a1c3c12496c0e45ea312524e))
### v0.3.3 (2015-03-25)
#### Bug Fixes
* **rustup:**
* rustc 1.0.0-nightly (123a754cb 2015-03-24) ([3e456f00](https://github.com/hyperium/hyper/commit/3e456f00f9991b1c723a232fc9c76fe8c0539858))
* 1.0.0-nightly (e2fa53e59 2015-03-20) ([f547080d](https://github.com/hyperium/hyper/commit/f547080df53076711b52a016b990c5be56f42ede))
#### Features
* **headers:** Implementing content-encoding header ([2983e8de](https://github.com/hyperium/hyper/commit/2983e8dea21f02a31012a25b0a302a128768030a), closes [#391](https://github.com/hyperium/hyper/issues/391))
### v0.3.2 (2015-03-20)
#### Bug Fixes
* **benches:** removed unused features ([104d4903](https://github.com/hyperium/hyper/commit/104d49036ff40c730ec8bef8012f19ccbee4aaae))
* **rustup:**
* rustc 1.0.0-nightly (ea8b82e90) ([8181de25](https://github.com/hyperium/hyper/commit/8181de253aecfe81123e166a141ebfc8430ec4a4))
* adapt to current rustc ([1f0bc951](https://github.com/hyperium/hyper/commit/1f0bc951c9ee40cab622a72d614d4c45d889ccd3), closes [#381](https://github.com/hyperium/hyper/issues/381))
#### Features
* **server:** use SocketAddrs instead of Ipv4Addrs ([5d7be77e](https://github.com/hyperium/hyper/commit/5d7be77e4ac0d5c1d852c1208abc77a913c4f4d1))
### v0.3.1 (2015-03-18)
#### Bug Fixes
* **header:** Fix charset parsing bug. ([5a6e176f](https://github.com/hyperium/hyper/commit/5a6e176f50fe667fbdc4c933c81d2db5ba5c571d))
* **headers:** Fix overflow with empty cookies ([99baaa10](https://github.com/hyperium/hyper/commit/99baaa10157f6c69ef1795a97e0db8bd794011f6))
* **rustup:** update to latest rustc ([4fd8a6a9](https://github.com/hyperium/hyper/commit/4fd8a6a9dc0dc969b36f3d3ad51cee177545f883))
#### Features
* **server:** add Expect 100-continue support ([0b716943](https://github.com/hyperium/hyper/commit/0b7169432b5f51efe5c167be418c2c50220e46a5), closes [#369](https://github.com/hyperium/hyper/issues/369))
#### Breaking Changes
* Several public functions and types in the `http` module
have been removed. They have been replaced with 2 methods that handle
all of the http1 parsing.
([b87bb20f](https://github.com/hyperium/hyper/commit/b87bb20f0c25891c30ef2399da2721596fbc1fcf))
## v0.3.0 (2015-03-03)
#### Features
* **headers:**
* add enum for Charset ([180d9a92](https://github.com/hyperium/hyper/commit/180d9a92d92541aa415c918a2265bd6b33d39655))
* add AcceptCharset header ([235089a1](https://github.com/hyperium/hyper/commit/235089a1034dc93ca62f47dcab0a93f1d49c72dd))
* add q function to ease creating Quality values ([d68773c7](https://github.com/hyperium/hyper/commit/d68773c79f998813bbd1bf50a0dbc2bc01ee0470))
* adds re-parsing ability when getting typed headers ([df756871](https://github.com/hyperium/hyper/commit/df756871edf4143135644c211106c5a8f8f5adb0))
* **hyper:** switch to std::io, std::net, and std::path. ([0fd6fcd7](https://github.com/hyperium/hyper/commit/0fd6fcd7c7f30c4317678a3b0968cc08ae9c0a71), closes [#347](https://github.com/hyperium/hyper/issues/347))
#### Breaking Changes
* added requirement that all HeaderFormat implementations
must also be fmt::Debug. This likely as easy as slapping
#[derive(Debug)] on to any custom headers.
([df756871](https://github.com/hyperium/hyper/commit/df756871edf4143135644c211106c5a8f8f5adb0))
* Check the docs. Everything was touched.
([0fd6fcd7](https://github.com/hyperium/hyper/commit/0fd6fcd7c7f30c4317678a3b0968cc08ae9c0a71))
### v0.2.1 (2015-02-27)
#### Bug Fixes
* **rustup:** str.split and associated type changes ([1b6e6a04](https://github.com/hyperium/hyper/commit/1b6e6a040fa26a8b3855ac46ccbcd5ee78065c71))
#### Features
* **headers:** add remove_raw method and corresponding test ([4f576780](https://github.com/hyperium/hyper/commit/4f576780c24ff3f943d5f821730ba65f4cdf8d4a), closes [#326](https://github.com/hyperium/hyper/issues/326))
## v0.2.0 (2015-02-21)
#### Bug Fixes
* **headers:** use $crate when referring to hyper modules on macros ([e246c3ac](https://github.com/hyperium/hyper/commit/e246c3ace8395cb5d281b841a416c503db1054ee), closes [#323](https://github.com/hyperium/hyper/issues/323))
* **rustup:**
* Send changes ([4f5b97fe](https://github.com/hyperium/hyper/commit/4f5b97fefcea650214ca26c1aa197cd73683742f))
* CowString is gone ([98b8c4b1](https://github.com/hyperium/hyper/commit/98b8c4b13723d8fa1b4f1ba42a06bb533bf13694))
* Extend now takes an IntoIterator ([598d8f93](https://github.com/hyperium/hyper/commit/598d8f93e4a79dcc5ff58fbdc27e6b1a859786d1))
* Add PhantomData markers to phantom type users ([1904c456](https://github.com/hyperium/hyper/commit/1904c4561f00a345714beadfa077016306b2c05d))
* Remove uses of the obsolete &a[] syntax ([039e984f](https://github.com/hyperium/hyper/commit/039e984f6878d724d47f7e9fe7db765495ae2f10))
* Fix signature of IntoCow ([234fcdc3](https://github.com/hyperium/hyper/commit/234fcdc3a25deb06240848d601be9e68930a73e6))
* update feature flags ([b47f9365](https://github.com/hyperium/hyper/commit/b47f936525dde91b3456078ecf8d0c11917cc6b7))
* use module-level thread functions ([fc2076cd](https://github.com/hyperium/hyper/commit/fc2076cd53c37ea244a0b89d7dd4b1eb8aeeb1d3))
* update lifetime bounds ([f4a66b38](https://github.com/hyperium/hyper/commit/f4a66b38cb9e35bfec0bbc3c97e5298fc8ad8409))
#### Features
* **server:** make AcceptorPool::accept() block and allow non'-static data ([b0a72d80](https://github.com/hyperium/hyper/commit/b0a72d80d0e894220da6aa5ea29d71b278df596d))
### v0.1.13 (2015-02-17)
#### Bug Fixes
* **server:** Drain requests on drop. ([3d0f423e](https://github.com/hyperium/hyper/commit/3d0f423eb26c4f14aaf9f8a909b307f661a3c5d6), closes [#197](https://github.com/hyperium/hyper/issues/197), [#309](https://github.com/hyperium/hyper/issues/309))
#### Features
* **header:** Support arbitrary status codes ([73978531](https://github.com/hyperium/hyper/commit/7397853148b8221c0eb8315ae2e5f195ad2e642c))
* **headers:**
* Implement PartialOrd for QualityItem ([2859d7ef](https://github.com/hyperium/hyper/commit/2859d7ef4ecadc3927fa46292ebbb225da597690), closes [#314](https://github.com/hyperium/hyper/issues/314))
* add AcceptLanguage header ([20a585e3](https://github.com/hyperium/hyper/commit/20a585e30bbb060a91839de7e95fd75a95d03d93))
* add IfMatch header ([5df06d44](https://github.com/hyperium/hyper/commit/5df06d4465fae01ef08b926f1f3be9f32a0f5c80))
* **server:** Rewrite the accept loop into a custom thread pool. ([3528fb9b](https://github.com/hyperium/hyper/commit/3528fb9b015a0959268452d5b42d5544c7b98a6a))
#### Breaking Changes
* This removes unregistered status codes from the enum. Use
`FromPrimitive` methods to create them now. StatusCode and StatusClass can no
longer be casted to `u16`, use `ToPrimitive` methods now.
For example `status.to_u16().unwrap()` to get the status code number.
([73978531](https://github.com/hyperium/hyper/commit/7397853148b8221c0eb8315ae2e5f195ad2e642c))
### v0.1.12 (2015-02-13)
#### Bug Fixes
* **net:** don't stop the server when an SSL handshake fails with EOF ([55f12660](https://github.com/hyperium/hyper/commit/55f12660891812d13a59e799b0ab5b185926479a))
#### Features
* **headers:** Add `If-None-Match` header field ([318b067a](https://github.com/hyperium/hyper/commit/318b067a06ecb42f0fba51928675d3b4291c7643), closes [#238](https://github.com/hyperium/hyper/issues/238))
### v0.1.11 (2015-02-06)
#### Bug Fixes
* **readme:** Make the README client example work ([9b5d6aab](https://github.com/hyperium/hyper/commit/9b5d6aab7e68cf776618151e9e69e34fd66aba6c))
#### Features
* **headers:** add IfUnmodifiedSince header ([b5543b67](https://github.com/hyperium/hyper/commit/b5543b67525e3d6ebc655d7e1736c8ade5b6dbb0))
#### Breaking Changes
* for any consumers of the Etag header, since the entity
tag is now in a tuple.
([28fd5c81](https://github.com/hyperium/hyper/commit/28fd5c81f54bb0ea3eda43a4014c736d00b4b07d))
### v0.1.10 (2015-02-03)
#### Bug Fixes
* **headers:** add limit to maximum header size that should be parsed ([f18a8fb7](https://github.com/hyperium/hyper/commit/f18a8fb76f15f36dec329683abb66be203ab2e7e), closes [#256](https://github.com/hyperium/hyper/issues/256))
* **rustup:**
* update FromStr ([742081c8](https://github.com/hyperium/hyper/commit/742081c8cfeeb59908a653316a6377d05ffaa55c))
* fix unused_feature warning in example server ([05a3a6b7](https://github.com/hyperium/hyper/commit/05a3a6b70badc28da33ff65e8c15003f87738e07))
* switch to unstable features ([3af8b687](https://github.com/hyperium/hyper/commit/3af8b687d4a6ef462eb74b1f5a1cbb8f191902fd))
### v0.1.9 (2015-01-28)
#### Bug Fixes
* **headers:** Don't display q if q=1 in quality item. ([91df2441](https://github.com/hyperium/hyper/commit/91df2441a0bb8c032b6fc5ccff50ed0eb98f2194), closes [#281](https://github.com/hyperium/hyper/issues/281))
* **rustup:** update io import, Writer::write ([f606b603](https://github.com/hyperium/hyper/commit/f606b6039d15a0b6e46f5154a9c5482866497a0c))
#### Features
* **status:** add is_<status_class>() methods to StatusCodes ([2d55a22e](https://github.com/hyperium/hyper/commit/2d55a22e738fb7f37a271be4fc3cf2ebdb9b5345))
### v0.1.8 (2015-01-27)
#### Bug Fixes
* **headers:**
* make ConnectionHeader unicase ([e06e7d9a](https://github.com/hyperium/hyper/commit/e06e7d9a7ece9588b673b06df6aec4663595df30))
* make Protocol search websocket unicase ([65c70180](https://github.com/hyperium/hyper/commit/65c7018046eb556085ca47a28c980ec901980643))
* **log:** update to new logging levels ([b002b6c3](https://github.com/hyperium/hyper/commit/b002b6c3f09775e5d6759bbd07dacdee318c2915))
#### Features
* **headers:** Add `Pragma` header field ([767c95d2](https://github.com/hyperium/hyper/commit/767c95d2b9709b496b35d0d691ff7a1f6d35cbed), closes [#237](https://github.com/hyperium/hyper/issues/237))
#### Breaking Changes
* Change header `Cookie` to `Cookie`
([92f43cf8](https://github.com/hyperium/hyper/commit/92f43cf873ddceca9518195af6dad1ff6ac79e11))
### v0.1.7 (2015-01-27)
#### Bug Fixes
* **rustup:** update to newest fmt trait names and slice syntax ([9e3c94d7](https://github.com/hyperium/hyper/commit/9e3c94d764522f900731fdbdee857639901037fe))
#### Breaking Changes
* Implementations of Header will need to adjust the
header_name method. It no longer takes any arguments.
([8215889e](https://github.com/hyperium/hyper/commit/8215889eda537d09da82a7ed12a1766bf4fd3bfe))
### v0.1.6 (2015-01-27)
#### Bug Fixes
* **headers:** make Schemes, Basic, Protocol public ([e43c35c1](https://github.com/hyperium/hyper/commit/e43c35c1ca86c0ff1278ccfe3d2cff43222627b2))
### v0.1.5 (2015-01-27)
### v0.1.4 (2015-01-27)
#### Bug Fixes
* **imports:** Update TypeID import location to "any" ([dd2534a6](https://github.com/hyperium/hyper/commit/dd2534a6863f8b3940d2776e6b6a8e48988b9b88))
### v0.1.3 (2015-01-27)
#### Features
* **server:** add a deconstruct method to Request. ([1014855f](https://github.com/hyperium/hyper/commit/1014855faec62ba00acdff6263c86e7dfa5fb047))
### v0.1.2 (2015-01-27)
#### Bug Fixes
* **server:** Increase MAX_HEADER_FIELD_LENGTH to 4k ([54238b28](https://github.com/hyperium/hyper/commit/54238b28e4899e76bb3d7c2dfd8d9bc6fd489b6c))
#### Features
* **net:**
* Move SSL verification to unboxed closures ([bca9a53c](https://github.com/hyperium/hyper/commit/bca9a53c66c967affb8e245f26507494db39c35e))
* Allow more generic SSL verification () ([af577851](https://github.com/hyperium/hyper/commit/af5778510d1d8422fcb04873f7c726a67f15f5eb), closes [#244](https://github.com/hyperium/hyper/issues/244))
### 0.1.1 (2015-01-13)
#### Features
* **server:**: Add TLS/SSL support serverside ([c6eef681](c6eef6812458e10de582530d7f2c5bce5156b73c), closes [#1](https://github.com/hyperium/hyper/issues/1))
#### Bug Fixes
* **headers:**
* fix fmt_header outputs of several headers ([aa266653](https://github.com/hyperium/hyper/commit/aa26665367bde895ce02ad2a8e1a372f00719852), closes [#246](https://github.com/hyperium/hyper/issues/246))
* don't use Show to write UserAgent header ([c8e334aa](https://github.com/hyperium/hyper/commit/c8e334aaebb5522a86d47f7e3c33836d2061cb65))
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to Hyper
You want to contribute? You're awesome!
Contributions come in all shapes and sizes. Let's take a tour of some of the different wants you could contribute.
## [Code of Conduct](./docs/CODE_OF_CONDUCT.md)
Firstly, all interactions with the project need to abide by the code of conduct. This is to make sure everyone is treated kindly.
## [Issues](./docs/ISSUES.md)
- **Filing an issue** is a contribution. We appreciate you letting us know about bugs you've found, and any information that you can provide that we can use to make hyper better. Without your filing it, we may not be aware of the bug.
- [Triaging issues](./docs/ISSUES.md#triaging) is a huge help. By your helping make issues better, the reporters can get answers sooner, and others can fix them with less effort. You can also volunteer as a frequent [triager](./docs/MAINTAINERS.md#triagers).
- Discuss [feature requests][feat] (especially those marked [request-for-comment][b-rfc]).
[feat]: https://github.com/hyperium/hyper/issues?q=is%3Aissue+is%3Aopen+label%3AC-feature
[b-rfc]: https://github.com/hyperium/hyper/issues?q=is%3Aissue+is%3Aopen+label%3AB-rfc
## [Pull Requests](./docs/PULL_REQUESTS.md)
By the way, consider checking the [list of easy issues](https://github.com/hyperium/hyper/issues?q=is%3Aopen+is%3Aissue+label%3AE-easy) if you want to submit something.
- [Submitting a Pull Request](./docs/PULL_REQUESTS.md#submitting-a-pull-request)
- [Commit Guidelines](./docs/COMMITS.md)
## Documentation
Improving hyper's documentation is a huge help for everyone who is trying to _use_ hyper.
- The API documentation (rendered at https://docs.rs/hyper) is stored as rustdoc comments directly in the source.
- The main website has [tutorial-style guides](https://hyper.rs/guides). As of v1, they are currently in a [revamp](https://github.com/hyperium/hyper/issues/3411), and would greatly benefit from being filled out.
## Help
Helping others use hyper in their specific workflows is a very valuable way to contribute.
- Answer questions asked directly in hyper's [Discussions](https://github.com/hyperium/hyper/discussions).
- Join our [Discord](https://discord.gg/kkwpueZ) and help those who show up with questions.
- **Blog about hyper.** You writing a blog post about how you use hyper to do something specific, or how you contributed a new feature, or debugged something in it, is a great idea. Not all examples can fit in the hyper repo. Search engines will help people find their use cases on your blog. And you can describe processes in more depth or from a different perspective.
================================================
FILE: Cargo.toml
================================================
[package]
name = "hyper"
version = "1.8.1"
description = "A protective and efficient HTTP library for all."
readme = "README.md"
homepage = "https://hyper.rs"
documentation = "https://docs.rs/hyper"
repository = "https://github.com/hyperium/hyper"
license = "MIT"
authors = ["Sean McArthur <sean@seanmonstar.com>"]
keywords = ["http", "hyper", "hyperium"]
categories = ["network-programming", "web-programming::http-client", "web-programming::http-server"]
edition = "2021"
rust-version = "1.63" # keep in sync with MSRV.md dev doc
include = [
"Cargo.toml",
"LICENSE",
"src/**/*",
]
[dependencies]
bytes = "1.2"
http = "1"
http-body = "1"
tokio = { version = "1", features = ["sync"] }
# Optional
atomic-waker = { version = "1.1.2", optional = true }
futures-channel = { version = "0.3", optional = true }
futures-core = { version = "0.3.31", optional = true }
futures-util = { version = "0.3", default-features = false, features = ["alloc"], optional = true }
h2 = { version = "0.4.2", optional = true }
http-body-util = { version = "0.1", optional = true }
httparse = { version = "1.9", optional = true }
httpdate = { version = "1.0", optional = true }
itoa = { version = "1", optional = true }
pin-project-lite = { version = "0.2.4", optional = true }
smallvec = { version = "1.12", features = ["const_generics", "const_new"], optional = true }
tracing = { version = "0.1", default-features = false, features = ["std"], optional = true }
want = { version = "0.3", optional = true }
[dev-dependencies]
form_urlencoded = "1"
futures-channel = { version = "0.3", features = ["sink"] }
futures-util = { version = "0.3", default-features = false, features = ["alloc", "sink"] }
http-body-util = "0.1"
pretty_env_logger = "0.5"
pin-project-lite = "0.2.4"
spmc = "0.3"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
tokio = { version = "1", features = [
"fs",
"macros",
"net",
"io-std",
"io-util",
"rt",
"rt-multi-thread",
"sync",
"time",
"test-util",
] }
tokio-test = "0.4"
tokio-util = "0.7.10"
[features]
# Nothing by default
default = []
# Easily turn it all on
full = [
"client",
"http1",
"http2",
"server",
]
# HTTP versions
http1 = ["dep:atomic-waker", "dep:futures-channel", "dep:futures-core", "dep:httparse", "dep:itoa"]
http2 = ["dep:futures-channel", "dep:futures-core", "dep:h2"]
# Client/Server
client = ["dep:want", "dep:pin-project-lite", "dep:smallvec"]
server = ["dep:httpdate", "dep:pin-project-lite", "dep:smallvec"]
# C-API support (currently unstable (no semver))
ffi = ["dep:http-body-util", "dep:futures-util"]
capi = []
# Utilize tracing (currently unstable)
tracing = ["dep:tracing"]
# internal features used in CI
nightly = []
[lints.rust.unexpected_cfgs]
level = "warn"
check-cfg = [
'cfg(hyper_unstable_tracing)',
'cfg(hyper_unstable_ffi)'
]
[package.metadata.docs.rs]
features = ["ffi", "full", "tracing"]
rustdoc-args = ["--cfg", "hyper_unstable_ffi", "--cfg", "hyper_unstable_tracing"]
[package.metadata.playground]
features = ["full"]
[package.metadata.capi.header]
generation = false
subdirectory = false
[package.metadata.capi.install.include]
asset = [{ from="capi/include/hyper.h" }]
[profile.release]
codegen-units = 1
incremental = false
[profile.bench]
codegen-units = 1
incremental = false
[[example]]
name = "client"
path = "examples/client.rs"
r
gitextract_tk80unb4/
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.yml
│ │ └── feature_request.md
│ ├── PULL_REQUEST_TEMPLATE
│ └── workflows/
│ ├── CI.yml
│ ├── bench.yml
│ ├── cargo-audit.yml
│ └── external-types.toml
├── .gitignore
├── CHANGELOG.md
├── CONTRIBUTING.md
├── Cargo.toml
├── LICENSE
├── README.md
├── SECURITY.md
├── benches/
│ ├── body.rs
│ ├── connect.rs
│ ├── end_to_end.rs
│ ├── pipeline.rs
│ ├── server.rs
│ └── support/
│ ├── mod.rs
│ └── tokiort.rs
├── capi/
│ ├── README.md
│ ├── cbindgen.toml
│ ├── examples/
│ │ ├── Makefile
│ │ ├── client.c
│ │ └── upload.c
│ ├── gen_header.sh
│ └── include/
│ └── hyper.h
├── docs/
│ ├── CODE_OF_CONDUCT.md
│ ├── CODE_STYLE.md
│ ├── COMMITS.md
│ ├── GOVERNANCE.md
│ ├── ISSUES.md
│ ├── MAINTAINERS.md
│ ├── MSRV.md
│ ├── PULL_REQUESTS.md
│ ├── README.md
│ ├── ROADMAP-1.0.md
│ ├── ROADMAP.md
│ ├── TENETS.md
│ └── VISION.md
├── examples/
│ ├── README.md
│ ├── client.rs
│ ├── client_json.rs
│ ├── echo.rs
│ ├── gateway.rs
│ ├── graceful_shutdown.rs
│ ├── hello-http2.rs
│ ├── hello.rs
│ ├── http_proxy.rs
│ ├── multi_server.rs
│ ├── params.rs
│ ├── send_file.rs
│ ├── send_file_index.html
│ ├── service_struct_impl.rs
│ ├── single_threaded.rs
│ ├── state.rs
│ ├── upgrades.rs
│ └── web_api.rs
├── src/
│ ├── body/
│ │ ├── incoming.rs
│ │ ├── length.rs
│ │ └── mod.rs
│ ├── cfg.rs
│ ├── client/
│ │ ├── conn/
│ │ │ ├── http1.rs
│ │ │ ├── http2.rs
│ │ │ └── mod.rs
│ │ ├── dispatch.rs
│ │ ├── mod.rs
│ │ └── tests.rs
│ ├── common/
│ │ ├── buf.rs
│ │ ├── date.rs
│ │ ├── either.rs
│ │ ├── future.rs
│ │ ├── io/
│ │ │ ├── compat.rs
│ │ │ ├── mod.rs
│ │ │ └── rewind.rs
│ │ ├── mod.rs
│ │ ├── task.rs
│ │ ├── time.rs
│ │ └── watch.rs
│ ├── error.rs
│ ├── ext/
│ │ ├── h1_reason_phrase.rs
│ │ ├── informational.rs
│ │ └── mod.rs
│ ├── ffi/
│ │ ├── body.rs
│ │ ├── client.rs
│ │ ├── error.rs
│ │ ├── http_types.rs
│ │ ├── io.rs
│ │ ├── macros.rs
│ │ ├── mod.rs
│ │ └── task.rs
│ ├── headers.rs
│ ├── lib.rs
│ ├── mock.rs
│ ├── proto/
│ │ ├── h1/
│ │ │ ├── conn.rs
│ │ │ ├── decode.rs
│ │ │ ├── dispatch.rs
│ │ │ ├── encode.rs
│ │ │ ├── io.rs
│ │ │ ├── mod.rs
│ │ │ └── role.rs
│ │ ├── h2/
│ │ │ ├── client.rs
│ │ │ ├── mod.rs
│ │ │ ├── ping.rs
│ │ │ ├── server.rs
│ │ │ └── upgrade.rs
│ │ └── mod.rs
│ ├── rt/
│ │ ├── bounds.rs
│ │ ├── io.rs
│ │ ├── mod.rs
│ │ └── timer.rs
│ ├── server/
│ │ ├── conn/
│ │ │ ├── http1.rs
│ │ │ ├── http2.rs
│ │ │ └── mod.rs
│ │ └── mod.rs
│ ├── service/
│ │ ├── http.rs
│ │ ├── mod.rs
│ │ ├── service.rs
│ │ └── util.rs
│ ├── trace.rs
│ └── upgrade.rs
└── tests/
├── client.rs
├── integration.rs
├── server.rs
└── support/
├── mod.rs
└── trailers.rs
SYMBOL INDEX (1695 symbols across 77 files)
FILE: benches/end_to_end.rs
type BoxedBody (line 17) | type BoxedBody = http_body_util::combinators::BoxBody<bytes::Bytes, Infa...
function http1_consecutive_x1_empty (line 22) | fn http1_consecutive_x1_empty(b: &mut test::Bencher) {
function http1_consecutive_x1_req_10b (line 27) | fn http1_consecutive_x1_req_10b(b: &mut test::Bencher) {
function http1_consecutive_x1_both_100kb (line 35) | fn http1_consecutive_x1_both_100kb(b: &mut test::Bencher) {
function http1_consecutive_x1_both_10mb (line 45) | fn http1_consecutive_x1_both_10mb(b: &mut test::Bencher) {
function http1_parallel_x10_empty (line 56) | fn http1_parallel_x10_empty(b: &mut test::Bencher) {
function http1_parallel_x10_req_10mb (line 62) | fn http1_parallel_x10_req_10mb(b: &mut test::Bencher) {
function http1_parallel_x10_req_10kb_100_chunks (line 73) | fn http1_parallel_x10_req_10kb_100_chunks(b: &mut test::Bencher) {
function http1_parallel_x10_res_1mb (line 84) | fn http1_parallel_x10_res_1mb(b: &mut test::Bencher) {
function http1_parallel_x10_res_10mb (line 91) | fn http1_parallel_x10_res_10mb(b: &mut test::Bencher) {
constant HTTP2_MAX_WINDOW (line 98) | const HTTP2_MAX_WINDOW: u32 = std::u32::MAX >> 1;
function http2_consecutive_x1_empty (line 101) | fn http2_consecutive_x1_empty(b: &mut test::Bencher) {
function http2_consecutive_x1_req_10b (line 106) | fn http2_consecutive_x1_req_10b(b: &mut test::Bencher) {
function http2_consecutive_x1_req_100kb (line 115) | fn http2_consecutive_x1_req_100kb(b: &mut test::Bencher) {
function http2_parallel_x10_empty (line 125) | fn http2_parallel_x10_empty(b: &mut test::Bencher) {
function http2_parallel_x10_req_10mb (line 130) | fn http2_parallel_x10_req_10mb(b: &mut test::Bencher) {
function http2_parallel_x10_req_10kb_100_chunks (line 143) | fn http2_parallel_x10_req_10kb_100_chunks(b: &mut test::Bencher) {
function http2_parallel_x10_req_10kb_100_chunks_adaptive_window (line 154) | fn http2_parallel_x10_req_10kb_100_chunks_adaptive_window(b: &mut test::...
function http2_parallel_x10_req_10kb_100_chunks_max_window (line 166) | fn http2_parallel_x10_req_10kb_100_chunks_max_window(b: &mut test::Bench...
function http2_parallel_x10_res_1mb (line 179) | fn http2_parallel_x10_res_1mb(b: &mut test::Bencher) {
function http2_parallel_x10_res_10mb (line 191) | fn http2_parallel_x10_res_10mb(b: &mut test::Bencher) {
type Opts (line 205) | struct Opts {
method http2 (line 232) | fn http2(mut self) -> Self {
method http2_stream_window (line 237) | fn http2_stream_window(mut self, sz: impl Into<Option<u32>>) -> Self {
method http2_conn_window (line 243) | fn http2_conn_window(mut self, sz: impl Into<Option<u32>>) -> Self {
method http2_adaptive_window (line 249) | fn http2_adaptive_window(mut self) -> Self {
method method (line 256) | fn method(mut self, m: Method) -> Self {
method request_body (line 261) | fn request_body(mut self, body: &'static [u8]) -> Self {
method request_chunks (line 266) | fn request_chunks(mut self, chunk: &'static [u8], cnt: usize) -> Self {
method response_body (line 273) | fn response_body(mut self, body: &'static [u8]) -> Self {
method parallel (line 278) | fn parallel(mut self, cnt: u32) -> Self {
method bench (line 284) | fn bench(self, b: &mut test::Bencher) {
function opts (line 217) | fn opts() -> Opts {
function spawn_server (line 404) | fn spawn_server(rt: &tokio::runtime::Runtime, opts: &Opts) -> SocketAddr {
FILE: benches/pipeline.rs
constant PIPELINED_REQUESTS (line 23) | const PIPELINED_REQUESTS: usize = 16;
function hello_world_16 (line 26) | fn hello_world_16(b: &mut test::Bencher) {
FILE: benches/server.rs
function body (line 95) | fn body(b: &'static [u8]) -> Full<Bytes> {
function throughput_fixedsize_small_payload (line 100) | fn throughput_fixedsize_small_payload(b: &mut test::Bencher) {
function throughput_fixedsize_large_payload (line 105) | fn throughput_fixedsize_large_payload(b: &mut test::Bencher) {
function throughput_fixedsize_many_chunks (line 112) | fn throughput_fixedsize_many_chunks(b: &mut test::Bencher) {
function throughput_chunked_small_payload (line 122) | fn throughput_chunked_small_payload(b: &mut test::Bencher) {
function throughput_chunked_large_payload (line 129) | fn throughput_chunked_large_payload(b: &mut test::Bencher) {
function throughput_chunked_many_chunks (line 136) | fn throughput_chunked_many_chunks(b: &mut test::Bencher) {
function raw_tcp_throughput_small_payload (line 146) | fn raw_tcp_throughput_small_payload(b: &mut test::Bencher) {
function raw_tcp_throughput_large_payload (line 184) | fn raw_tcp_throughput_large_payload(b: &mut test::Bencher) {
FILE: benches/support/tokiort.rs
type TokioExecutor (line 15) | pub struct TokioExecutor;
method execute (line 22) | fn execute(&self, fut: F) {
type TokioTimer (line 30) | pub struct TokioTimer;
method new (line 58) | pub fn new() -> Self {
method sleep (line 33) | fn sleep(&self, duration: Duration) -> Pin<Box<dyn Sleep>> {
method sleep_until (line 39) | fn sleep_until(&self, deadline: Instant) -> Pin<Box<dyn Sleep>> {
method now (line 45) | fn now(&self) -> Instant {
method reset (line 49) | fn reset(&self, sleep: &mut Pin<Box<dyn Sleep>>, new_deadline: Instant) {
type Output (line 73) | type Output = ();
method poll (line 75) | fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
method reset (line 83) | pub fn reset(self: Pin<&mut Self>, deadline: Instant) {
function new (line 97) | pub fn new(inner: T) -> Self {
function inner (line 101) | pub fn inner(self) -> T {
function poll_read (line 110) | fn poll_read(
function poll_write (line 134) | fn poll_write(
function poll_flush (line 142) | fn poll_flush(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result...
function poll_shutdown (line 146) | fn poll_shutdown(
function is_write_vectored (line 153) | fn is_write_vectored(&self) -> bool {
function poll_write_vectored (line 157) | fn poll_write_vectored(
function poll_read (line 170) | fn poll_read(
function poll_write (line 202) | fn poll_write(
function poll_flush (line 210) | fn poll_flush(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result...
function poll_shutdown (line 214) | fn poll_shutdown(
function is_write_vectored (line 221) | fn is_write_vectored(&self) -> bool {
function poll_write_vectored (line 225) | fn poll_write_vectored(
FILE: capi/examples/client.c
type conn_data (line 17) | struct conn_data {
function read_cb (line 23) | static size_t read_cb(void *userdata, hyper_context *ctx, uint8_t *buf, ...
function write_cb (line 44) | static size_t write_cb(void *userdata, hyper_context *ctx, const uint8_t...
function free_conn_data (line 65) | static void free_conn_data(struct conn_data *conn) {
function connect_to (line 78) | static int connect_to(const char *host, const char *port) {
function print_each_header (line 115) | static int print_each_header(void *userdata,
function print_each_chunk (line 124) | static int print_each_chunk(void *userdata, const hyper_buf *chunk) {
type example_id (line 133) | typedef enum {
function main (line 142) | int main(int argc, char *argv[]) {
FILE: capi/examples/upload.c
type conn_data (line 17) | struct conn_data {
function read_cb (line 23) | static size_t read_cb(void *userdata, hyper_context *ctx, uint8_t *buf, ...
function write_cb (line 44) | static size_t write_cb(void *userdata, hyper_context *ctx, const uint8_t...
function free_conn_data (line 65) | static void free_conn_data(struct conn_data *conn) {
function connect_to (line 78) | static int connect_to(const char *host, const char *port) {
type upload_body (line 115) | struct upload_body {
function poll_req_upload (line 121) | static int poll_req_upload(void *userdata,
function print_each_header (line 143) | static int print_each_header(void *userdata,
function print_informational (line 152) | static void print_informational(void *userdata, hyper_response *resp) {
type example_id (line 158) | typedef enum {
function main (line 167) | int main(int argc, char *argv[]) {
FILE: capi/include/hyper.h
type hyper_code (line 73) | typedef enum hyper_code {
type hyper_task_return_type (line 107) | typedef enum hyper_task_return_type {
type hyper_body (line 133) | typedef struct hyper_body hyper_body;
type hyper_buf (line 138) | typedef struct hyper_buf hyper_buf;
type hyper_clientconn (line 143) | typedef struct hyper_clientconn hyper_clientconn;
type hyper_clientconn_options (line 148) | typedef struct hyper_clientconn_options hyper_clientconn_options;
type hyper_context (line 153) | typedef struct hyper_context hyper_context;
type hyper_error (line 158) | typedef struct hyper_error hyper_error;
type hyper_executor (line 163) | typedef struct hyper_executor hyper_executor;
type hyper_headers (line 168) | typedef struct hyper_headers hyper_headers;
type hyper_io (line 173) | typedef struct hyper_io hyper_io;
type hyper_request (line 178) | typedef struct hyper_request hyper_request;
type hyper_response (line 183) | typedef struct hyper_response hyper_response;
type hyper_task (line 188) | typedef struct hyper_task hyper_task;
type hyper_waker (line 193) | typedef struct hyper_waker hyper_waker;
type hyper_buf (line 195) | struct hyper_buf
type hyper_context (line 197) | struct hyper_context
type hyper_buf (line 197) | struct hyper_buf
type hyper_response (line 199) | struct hyper_response
type hyper_context (line 203) | struct hyper_context
type hyper_context (line 205) | struct hyper_context
type hyper_body (line 219) | struct hyper_body
type hyper_body (line 224) | struct hyper_body
type hyper_task (line 229) | struct hyper_task
type hyper_body (line 229) | struct hyper_body
type hyper_task (line 234) | struct hyper_task
type hyper_body (line 234) | struct hyper_body
type hyper_body (line 241) | struct hyper_body
type hyper_body (line 246) | struct hyper_body
type hyper_buf (line 251) | struct hyper_buf
type hyper_buf (line 256) | struct hyper_buf
type hyper_buf (line 261) | struct hyper_buf
type hyper_buf (line 266) | struct hyper_buf
type hyper_task (line 271) | struct hyper_task
type hyper_io (line 271) | struct hyper_io
type hyper_clientconn_options (line 272) | struct hyper_clientconn_options
type hyper_task (line 277) | struct hyper_task
type hyper_clientconn (line 277) | struct hyper_clientconn
type hyper_request (line 277) | struct hyper_request
type hyper_clientconn (line 282) | struct hyper_clientconn
type hyper_clientconn_options (line 287) | struct hyper_clientconn_options
type hyper_clientconn_options (line 292) | struct hyper_clientconn_options
type hyper_clientconn_options (line 298) | struct hyper_clientconn_options
type hyper_clientconn_options (line 304) | struct hyper_clientconn_options
type hyper_clientconn_options (line 309) | struct hyper_clientconn_options
type hyper_executor (line 310) | struct hyper_executor
type hyper_code (line 315) | enum hyper_code
type hyper_clientconn_options (line 315) | struct hyper_clientconn_options
type hyper_code (line 320) | enum hyper_code
type hyper_clientconn_options (line 320) | struct hyper_clientconn_options
type hyper_error (line 326) | struct hyper_error
type hyper_code (line 331) | enum hyper_code
type hyper_error (line 331) | struct hyper_error
type hyper_error (line 336) | struct hyper_error
type hyper_request (line 341) | struct hyper_request
type hyper_request (line 346) | struct hyper_request
type hyper_code (line 351) | enum hyper_code
type hyper_request (line 351) | struct hyper_request
type hyper_code (line 358) | enum hyper_code
type hyper_request (line 358) | struct hyper_request
type hyper_code (line 365) | enum hyper_code
type hyper_request (line 365) | struct hyper_request
type hyper_code (line 376) | enum hyper_code
type hyper_request (line 376) | struct hyper_request
type hyper_headers (line 381) | struct hyper_headers
type hyper_request (line 381) | struct hyper_request
type hyper_code (line 386) | enum hyper_code
type hyper_request (line 386) | struct hyper_request
type hyper_body (line 386) | struct hyper_body
type hyper_code (line 391) | enum hyper_code
type hyper_request (line 391) | struct hyper_request
type hyper_response (line 398) | struct hyper_response
type hyper_response (line 403) | struct hyper_response
type hyper_response (line 408) | struct hyper_response
type hyper_response (line 413) | struct hyper_response
type hyper_response (line 418) | struct hyper_response
type hyper_headers (line 423) | struct hyper_headers
type hyper_response (line 423) | struct hyper_response
type hyper_body (line 428) | struct hyper_body
type hyper_response (line 428) | struct hyper_response
type hyper_headers (line 433) | struct hyper_headers
type hyper_code (line 440) | enum hyper_code
type hyper_headers (line 440) | struct hyper_headers
type hyper_code (line 449) | enum hyper_code
type hyper_headers (line 449) | struct hyper_headers
type hyper_io (line 458) | struct hyper_io
type hyper_io (line 463) | struct hyper_io
type hyper_io (line 468) | struct hyper_io
type hyper_io (line 473) | struct hyper_io
type hyper_io (line 478) | struct hyper_io
type hyper_executor (line 483) | struct hyper_executor
type hyper_executor (line 488) | struct hyper_executor
type hyper_code (line 493) | enum hyper_code
type hyper_executor (line 493) | struct hyper_executor
type hyper_task (line 493) | struct hyper_task
type hyper_task (line 498) | struct hyper_task
type hyper_executor (line 498) | struct hyper_executor
type hyper_task (line 503) | struct hyper_task
type hyper_task (line 508) | struct hyper_task
type hyper_task_return_type (line 513) | enum hyper_task_return_type
type hyper_task (line 513) | struct hyper_task
type hyper_task (line 518) | struct hyper_task
type hyper_task (line 523) | struct hyper_task
type hyper_waker (line 528) | struct hyper_waker
type hyper_context (line 528) | struct hyper_context
type hyper_waker (line 533) | struct hyper_waker
type hyper_waker (line 538) | struct hyper_waker
FILE: examples/client.rs
type Result (line 16) | type Result<T> = std::result::Result<T, Box<dyn std::error::Error + Send...
function main (line 19) | async fn main() -> Result<()> {
function fetch_url (line 42) | async fn fetch_url(url: hyper::Uri) -> Result<()> {
FILE: examples/client_json.rs
type Result (line 15) | type Result<T> = std::result::Result<T, Box<dyn std::error::Error + Send...
function main (line 18) | async fn main() -> Result<()> {
function fetch_json (line 30) | async fn fetch_json(url: hyper::Uri) -> Result<Vec<User>> {
type User (line 65) | struct User {
FILE: examples/echo.rs
function echo (line 19) | async fn echo(
function empty (line 79) | fn empty() -> BoxBody<Bytes, hyper::Error> {
function full (line 85) | fn full<T: Into<Bytes>>(chunk: T) -> BoxBody<Bytes, hyper::Error> {
function main (line 92) | async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
FILE: examples/gateway.rs
function main (line 12) | async fn main() -> Result<(), Box<dyn std::error::Error>> {
FILE: examples/graceful_shutdown.rs
function hello (line 21) | async fn hello(_: Request<hyper::body::Incoming>) -> Result<Response<Ful...
function main (line 32) | pub async fn main() -> Result<(), Box<dyn std::error::Error + Send + Syn...
FILE: examples/hello-http2.rs
function hello (line 23) | async fn hello(_: Request<hyper::body::Incoming>) -> Result<Response<Ful...
type TokioExecutor (line 29) | pub struct TokioExecutor;
method execute (line 40) | fn execute(&self, fut: F) {
function main (line 47) | async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
function main (line 87) | fn main() {
FILE: examples/hello.rs
function hello (line 21) | async fn hello(_: Request<impl hyper::body::Body>) -> Result<Response<Fu...
function main (line 26) | pub async fn main() -> Result<(), Box<dyn std::error::Error + Send + Syn...
FILE: examples/http_proxy.rs
type ClientBuilder (line 17) | type ClientBuilder = hyper::client::conn::http1::Builder;
type ServerBuilder (line 18) | type ServerBuilder = hyper::server::conn::http1::Builder;
function main (line 28) | async fn main() -> Result<(), Box<dyn std::error::Error>> {
function proxy (line 52) | async fn proxy(
function host_addr (line 114) | fn host_addr(uri: &http::Uri) -> Option<String> {
function empty (line 118) | fn empty() -> BoxBody<Bytes, hyper::Error> {
function full (line 124) | fn full<T: Into<Bytes>>(chunk: T) -> BoxBody<Bytes, hyper::Error> {
function tunnel (line 132) | async fn tunnel(upgraded: Upgraded, addr: String) -> std::io::Result<()> {
FILE: examples/multi_server.rs
function index1 (line 21) | async fn index1(_: Request<hyper::body::Incoming>) -> Result<Response<Fu...
function index2 (line 25) | async fn index2(_: Request<hyper::body::Incoming>) -> Result<Response<Fu...
function main (line 30) | async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
FILE: examples/params.rs
function param_example (line 24) | async fn param_example(
function empty (line 112) | fn empty() -> BoxBody<Bytes, Infallible> {
function full (line 116) | fn full<T: Into<Bytes>>(chunk: T) -> BoxBody<Bytes, Infallible> {
function main (line 121) | async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
FILE: examples/send_file.rs
function main (line 23) | async fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
function response_examples (line 46) | async fn response_examples(
function not_found (line 60) | fn not_found() -> Response<BoxBody<Bytes, std::io::Error>> {
function simple_file_send (line 67) | async fn simple_file_send(filename: &str) -> Result<Response<BoxBody<Byt...
FILE: examples/service_struct_impl.rs
type Counter (line 17) | type Counter = i32;
function main (line 20) | async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
type Svc (line 43) | struct Svc {
type Response (line 48) | type Response = Response<Full<Bytes>>;
type Error (line 49) | type Error = hyper::Error;
type Future (line 50) | type Future = Pin<Box<dyn Future<Output = Result<Self::Response, Self:...
method call (line 52) | fn call(&self, req: Request<IncomingBody>) -> Self::Future {
FILE: examples/single_threaded.rs
type Body (line 35) | struct Body {
method from (line 42) | fn from(a: String) -> Self {
type Data (line 51) | type Data = Bytes;
type Error (line 52) | type Error = Error;
method poll_frame (line 54) | fn poll_frame(
function main (line 62) | fn main() {
function http1_server (line 130) | async fn http1_server() -> Result<(), Box<dyn std::error::Error>> {
function http1_client (line 163) | async fn http1_client(url: hyper::Uri) -> Result<(), Box<dyn std::error:...
function http2_server (line 219) | async fn http2_server() -> Result<(), Box<dyn std::error::Error>> {
function http2_client (line 264) | async fn http2_client(url: hyper::Uri) -> Result<(), Box<dyn std::error:...
type LocalExec (line 325) | struct LocalExec;
method execute (line 331) | fn execute(&self, fut: F) {
type IOTypeNotSend (line 337) | struct IOTypeNotSend {
method new (line 343) | fn new(stream: TokioIo<TcpStream>) -> Self {
method poll_write (line 352) | fn poll_write(
method poll_flush (line 360) | fn poll_flush(
method poll_shutdown (line 367) | fn poll_shutdown(
method poll_read (line 376) | fn poll_read(
FILE: examples/state.rs
function main (line 20) | async fn main() -> Result<(), Box<dyn std::error::Error>> {
FILE: examples/upgrades.rs
type Result (line 24) | type Result<T> = std::result::Result<T, Box<dyn std::error::Error + Send...
function server_upgraded_io (line 27) | async fn server_upgraded_io(upgraded: Upgraded) -> Result<()> {
function server_upgrade (line 46) | async fn server_upgrade(mut req: Request<hyper::body::Incoming>) -> Resu...
function client_upgraded_io (line 83) | async fn client_upgraded_io(upgraded: Upgraded) -> Result<()> {
function client_upgrade_request (line 98) | async fn client_upgrade_request(addr: SocketAddr) -> Result<()> {
function main (line 135) | async fn main() {
FILE: examples/web_api.rs
type GenericError (line 16) | type GenericError = Box<dyn std::error::Error + Send + Sync>;
type Result (line 17) | type Result<T> = std::result::Result<T, GenericError>;
type BoxBody (line 18) | type BoxBody = http_body_util::combinators::BoxBody<Bytes, hyper::Error>;
function client_request_response (line 26) | async fn client_request_response() -> Result<Response<BoxBody>> {
function api_post_response (line 54) | async fn api_post_response(req: Request<IncomingBody>) -> Result<Respons...
function api_get_response (line 70) | async fn api_get_response() -> Result<Response<BoxBody>> {
function response_examples (line 85) | async fn response_examples(req: Request<IncomingBody>) -> Result<Respons...
function full (line 101) | fn full<T: Into<Bytes>>(chunk: T) -> BoxBody {
function main (line 108) | async fn main() -> Result<()> {
FILE: src/body/incoming.rs
type BodySender (line 32) | type BodySender = mpsc::Sender<Result<Bytes, crate::Error>>;
type TrailersSender (line 34) | type TrailersSender = oneshot::Sender<HeaderMap>;
type Incoming (line 52) | pub struct Incoming {
method channel (line 109) | pub(crate) fn channel() -> (Sender, Incoming) {
method new_channel (line 114) | pub(crate) fn new_channel(content_length: DecodedLength, wanter: bool)...
method new (line 139) | fn new(kind: Kind) -> Incoming {
method empty (line 144) | pub(crate) fn empty() -> Incoming {
method ffi (line 149) | pub(crate) fn ffi() -> Incoming {
method h2 (line 154) | pub(crate) fn h2(
method as_ffi_mut (line 174) | pub(crate) fn as_ffi_mut(&mut self) -> &mut crate::ffi::UserBody {
method fmt (line 320) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
type Kind (line 56) | enum Kind {
type Sender (line 91) | pub(crate) struct Sender {
method poll_ready (line 353) | pub(crate) fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<crat...
method poll_want (line 361) | fn poll_want(&mut self, cx: &mut Context<'_>) -> Poll<crate::Result<()...
method ready (line 371) | async fn ready(&mut self) -> crate::Result<()> {
method send_data (line 378) | pub(crate) async fn send_data(&mut self, chunk: Bytes) -> crate::Resul...
method send_trailers (line 387) | pub(crate) async fn send_trailers(&mut self, trailers: HeaderMap) -> c...
method try_send_data (line 408) | pub(crate) fn try_send_data(&mut self, chunk: Bytes) -> Result<(), Byt...
method try_send_trailers (line 415) | pub(crate) fn try_send_trailers(
method abort (line 428) | pub(crate) fn abort(mut self) {
method send_error (line 432) | pub(crate) fn send_error(&mut self, err: crate::Error) {
method fmt (line 443) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
constant WANT_PENDING (line 98) | const WANT_PENDING: usize = 1;
constant WANT_READY (line 100) | const WANT_READY: usize = 2;
type Data (line 190) | type Data = Bytes;
type Error (line 191) | type Error = crate::Error;
method poll_frame (line 193) | fn poll_frame(
method is_end_stream (line 282) | fn is_end_stream(&self) -> bool {
method size_hint (line 294) | fn size_hint(&self) -> SizeHint {
function test_size_of (line 475) | fn test_size_of() {
function size_hint (line 505) | fn size_hint() {
function channel_abort (line 526) | async fn channel_abort() {
function channel_abort_when_buffer_is_full (line 538) | async fn channel_abort_when_buffer_is_full() {
function channel_buffers_one (line 560) | fn channel_buffers_one() {
function channel_empty (line 573) | async fn channel_empty() {
function channel_ready (line 581) | fn channel_ready() {
function channel_wanter (line 591) | fn channel_wanter() {
function channel_notices_closure (line 614) | fn channel_notices_closure() {
FILE: src/body/length.rs
type DecodedLength (line 4) | pub(crate) struct DecodedLength(u64);
method from (line 8) | fn from(len: Option<u64>) -> Self {
constant CLOSE_DELIMITED (line 21) | pub(crate) const CLOSE_DELIMITED: DecodedLength = DecodedLength(u64::M...
constant CHUNKED (line 22) | pub(crate) const CHUNKED: DecodedLength = DecodedLength(u64::MAX - 1);
constant ZERO (line 23) | pub(crate) const ZERO: DecodedLength = DecodedLength(0);
method new (line 26) | pub(crate) fn new(len: u64) -> Self {
method danger_len (line 37) | pub(crate) fn danger_len(self) -> u64 {
method into_opt (line 47) | pub(crate) fn into_opt(self) -> Option<u64> {
method checked_new (line 56) | pub(crate) fn checked_new(len: u64) -> Result<Self, crate::error::Pars...
method sub_if (line 69) | pub(crate) fn sub_if(&mut self, amt: u64) {
method is_exact (line 84) | pub(crate) fn is_exact(&self) -> bool {
method fmt (line 90) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
method fmt (line 100) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
constant MAX_LEN (line 18) | const MAX_LEN: u64 = u64::MAX - 2;
function sub_if_known (line 115) | fn sub_if_known() {
function sub_if_chunked (line 123) | fn sub_if_chunked() {
FILE: src/body/mod.rs
function _assert_send_sync (line 44) | fn _assert_send_sync() {
FILE: src/client/conn/http1.rs
type Dispatcher (line 19) | type Dispatcher<T, B> =
type SendRequest (line 23) | pub struct SendRequest<B> {
type Parts (line 33) | pub struct Parts<T> {
type Connection (line 54) | pub struct Connection<T, B>
function into_parts (line 71) | pub fn into_parts(self) -> Parts<T> {
function poll_without_shutdown (line 87) | pub fn poll_without_shutdown(&mut self, cx: &mut Context<'_>) -> Poll<cr...
function without_shutdown (line 93) | pub async fn without_shutdown(self) -> crate::Result<Parts<T>> {
type Builder (line 110) | pub struct Builder {
method new (line 308) | pub fn new() -> Builder {
method http09_responses (line 326) | pub fn http09_responses(&mut self, enabled: bool) -> &mut Builder {
method allow_spaces_after_header_name_in_responses (line 348) | pub fn allow_spaces_after_header_name_in_responses(&mut self, enabled:...
method allow_obsolete_multiline_headers_in_responses (line 386) | pub fn allow_obsolete_multiline_headers_in_responses(&mut self, enable...
method ignore_invalid_headers_in_responses (line 399) | pub fn ignore_invalid_headers_in_responses(&mut self, enabled: bool) -...
method writev (line 417) | pub fn writev(&mut self, enabled: bool) -> &mut Builder {
method title_case_headers (line 426) | pub fn title_case_headers(&mut self, enabled: bool) -> &mut Builder {
method preserve_header_case (line 442) | pub fn preserve_header_case(&mut self, enabled: bool) -> &mut Builder {
method max_headers (line 460) | pub fn max_headers(&mut self, val: usize) -> &mut Self {
method preserve_header_order (line 473) | pub fn preserve_header_order(&mut self, enabled: bool) -> &mut Builder {
method read_buf_exact_size (line 483) | pub fn read_buf_exact_size(&mut self, sz: Option<usize>) -> &mut Build...
method max_buf_size (line 498) | pub fn max_buf_size(&mut self, max: usize) -> &mut Self {
method handshake (line 514) | pub fn handshake<T, B>(
function handshake (line 127) | pub async fn handshake<T, B>(io: T) -> crate::Result<(SendRequest<B>, Co...
function poll_ready (line 143) | pub fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<crate::Result...
function ready (line 150) | pub async fn ready(&mut self) -> crate::Result<()> {
function is_ready (line 161) | pub fn is_ready(&self) -> bool {
function is_closed (line 166) | pub fn is_closed(&self) -> bool {
function send_request (line 191) | pub fn send_request(
function try_send_request (line 221) | pub fn try_send_request(
function fmt (line 248) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
function with_upgrades (line 264) | pub fn with_upgrades(self) -> upgrades::UpgradeableConnection<T, B> {
function fmt (line 274) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
type Output (line 286) | type Output = crate::Result<()>;
method poll (line 288) | fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Ou...
type UpgradeableConnection (line 581) | pub struct UpgradeableConnection<T, B>
type Output (line 597) | type Output = crate::Result<()>;
method poll (line 599) | fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Ou...
FILE: src/client/conn/http2.rs
type SendRequest (line 24) | pub struct SendRequest<B> {
method clone (line 29) | fn clone(&self) -> SendRequest<B> {
type Connection (line 43) | pub struct Connection<T, B, E>
type Builder (line 60) | pub struct Builder<Ex> {
function handshake (line 70) | pub async fn handshake<E, T, B>(
function poll_ready (line 90) | pub fn poll_ready(&mut self, _cx: &mut Context<'_>) -> Poll<crate::Resul...
function ready (line 101) | pub async fn ready(&mut self) -> crate::Result<()> {
function is_ready (line 112) | pub fn is_ready(&self) -> bool {
function is_closed (line 117) | pub fn is_closed(&self) -> bool {
function send_request (line 134) | pub fn send_request(
function try_send_request (line 165) | pub fn try_send_request(
function fmt (line 192) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
function is_extended_connect_protocol_enabled (line 216) | pub fn is_extended_connect_protocol_enabled(&self) -> bool {
function fmt (line 228) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
type Output (line 242) | type Output = crate::Result<()>;
method poll (line 244) | fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Ou...
function new (line 261) | pub fn new(exec: Ex) -> Builder<Ex> {
function timer (line 270) | pub fn timer<M>(&mut self, timer: M) -> &mut Builder<Ex>
function initial_stream_window_size (line 286) | pub fn initial_stream_window_size(&mut self, sz: impl Into<Option<u32>>)...
function initial_connection_window_size (line 299) | pub fn initial_connection_window_size(&mut self, sz: impl Into<Option<u3...
function initial_max_send_streams (line 317) | pub fn initial_max_send_streams(&mut self, initial: impl Into<Option<usi...
function adaptive_window (line 329) | pub fn adaptive_window(&mut self, enabled: bool) -> &mut Self {
function max_frame_size (line 343) | pub fn max_frame_size(&mut self, sz: impl Into<Option<u32>>) -> &mut Self {
function max_header_list_size (line 351) | pub fn max_header_list_size(&mut self, max: u32) -> &mut Self {
function header_table_size (line 363) | pub fn header_table_size(&mut self, size: impl Into<Option<u32>>) -> &mu...
function max_concurrent_streams (line 391) | pub fn max_concurrent_streams(&mut self, max: impl Into<Option<u32>>) ->...
function keep_alive_interval (line 402) | pub fn keep_alive_interval(&mut self, interval: impl Into<Option<Duratio...
function keep_alive_timeout (line 413) | pub fn keep_alive_timeout(&mut self, timeout: Duration) -> &mut Self {
function keep_alive_while_idle (line 426) | pub fn keep_alive_while_idle(&mut self, enabled: bool) -> &mut Self {
function max_concurrent_reset_streams (line 439) | pub fn max_concurrent_reset_streams(&mut self, max: usize) -> &mut Self {
function max_send_buf_size (line 451) | pub fn max_send_buf_size(&mut self, max: usize) -> &mut Self {
function max_pending_accept_reset_streams (line 463) | pub fn max_pending_accept_reset_streams(&mut self, max: impl Into<Option...
function max_local_error_reset_streams (line 474) | pub fn max_local_error_reset_streams(&mut self, max: impl Into<Option<us...
function handshake (line 484) | pub fn handshake<T, B>(
function send_sync_executor_of_non_send_futures (line 520) | async fn send_sync_executor_of_non_send_futures() {
function not_send_not_sync_executor_of_not_send_futures (line 552) | async fn not_send_not_sync_executor_of_not_send_futures() {
function send_not_sync_executor_of_not_send_futures (line 588) | async fn send_not_sync_executor_of_not_send_futures() {
function send_sync_executor_of_send_futures (line 624) | async fn send_sync_executor_of_send_futures() {
function send_not_sync_executor_of_send_futures (line 656) | async fn send_not_sync_executor_of_send_futures() {
FILE: src/client/dispatch.rs
type RetryPromise (line 16) | pub(crate) type RetryPromise<T, U> = oneshot::Receiver<Result<U, TrySend...
type Promise (line 17) | pub(crate) type Promise<T> = oneshot::Receiver<Result<T, crate::Error>>;
type TrySendError (line 26) | pub struct TrySendError<T> {
function channel (line 31) | pub(crate) fn channel<T, U>() -> (Sender<T, U>, Receiver<T, U>) {
type Sender (line 48) | pub(crate) struct Sender<T, U> {
type UnboundedSender (line 68) | pub(crate) struct UnboundedSender<T, U> {
function poll_ready (line 76) | pub(crate) fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<crate:...
function is_ready (line 83) | pub(crate) fn is_ready(&self) -> bool {
function is_closed (line 88) | pub(crate) fn is_closed(&self) -> bool {
function can_send (line 93) | fn can_send(&mut self) -> bool {
function try_send (line 107) | pub(crate) fn try_send(&mut self, val: T) -> Result<RetryPromise<T, U>, ...
function send (line 119) | pub(crate) fn send(&mut self, val: T) -> Result<Promise<U>, T> {
function unbound (line 131) | pub(crate) fn unbound(self) -> UnboundedSender<T, U> {
function is_ready (line 141) | pub(crate) fn is_ready(&self) -> bool {
function is_closed (line 145) | pub(crate) fn is_closed(&self) -> bool {
function try_send (line 149) | pub(crate) fn try_send(&mut self, val: T) -> Result<RetryPromise<T, U>, ...
function send (line 157) | pub(crate) fn send(&mut self, val: T) -> Result<Promise<U>, T> {
method clone (line 168) | fn clone(&self) -> Self {
type Receiver (line 176) | pub(crate) struct Receiver<T, U> {
function poll_recv (line 182) | pub(crate) fn poll_recv(&mut self, cx: &mut Context<'_>) -> Poll<Option<...
function close (line 195) | pub(crate) fn close(&mut self) {
function try_recv (line 201) | pub(crate) fn try_recv(&mut self) -> Option<(T, Callback<T, U>)> {
method drop (line 210) | fn drop(&mut self) {
type Envelope (line 217) | struct Envelope<T, U>(Option<(T, Callback<T, U>)>);
method drop (line 220) | fn drop(&mut self) {
type Callback (line 230) | pub(crate) enum Callback<T, U> {
method drop (line 237) | fn drop(&mut self) {
function dispatch_gone (line 257) | fn dispatch_gone() -> crate::Error {
function is_canceled (line 268) | pub(crate) fn is_canceled(&self) -> bool {
function poll_canceled (line 276) | pub(crate) fn poll_canceled(&mut self, cx: &mut Context<'_>) -> Poll<()> {
function send (line 284) | pub(crate) fn send(mut self, val: Result<U, TrySendError<T>>) {
function take_message (line 302) | pub fn take_message(&mut self) -> Option<T> {
function message (line 311) | pub fn message(&self) -> Option<&T> {
function into_error (line 316) | pub fn into_error(self) -> crate::Error {
function error (line 321) | pub fn error(&self) -> &crate::Error {
type Output (line 346) | type Output = ();
method poll (line 348) | fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
type Custom (line 391) | struct Custom(#[allow(dead_code)] i32);
type Output (line 394) | type Output = Option<(T, Callback<T, U>)>;
method poll (line 396) | fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Ou...
type PollOnce (line 402) | struct PollOnce<'a, F>(&'a mut F);
type Output (line 408) | type Output = Option<()>;
method poll (line 410) | fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Ou...
function drop_receiver_sends_cancel_errors (line 420) | async fn drop_receiver_sends_cancel_errors() {
function sender_checks_for_want_on_send (line 443) | async fn sender_checks_for_want_on_send() {
function unbounded_sender_doesnt_bound_on_want (line 463) | fn unbounded_sender_doesnt_bound_on_want() {
function giver_queue_throughput (line 478) | fn giver_queue_throughput(b: &mut test::Bencher) {
function giver_queue_not_ready (line 502) | fn giver_queue_not_ready(b: &mut test::Bencher) {
function giver_queue_cancel (line 517) | fn giver_queue_cancel(b: &mut test::Bencher) {
FILE: src/common/buf.rs
type BufList (line 6) | pub(crate) struct BufList<T> {
function new (line 11) | pub(crate) fn new() -> BufList<T> {
function push (line 18) | pub(crate) fn push(&mut self, buf: T) {
function bufs_cnt (line 24) | pub(crate) fn bufs_cnt(&self) -> usize {
method remaining (line 31) | fn remaining(&self) -> usize {
method chunk (line 36) | fn chunk(&self) -> &[u8] {
method advance (line 41) | fn advance(&mut self, mut cnt: usize) {
method chunks_vectored (line 59) | fn chunks_vectored<'t>(&'t self, dst: &mut [IoSlice<'t>]) -> usize {
method copy_to_bytes (line 74) | fn copy_to_bytes(&mut self, len: usize) -> Bytes {
function hello_world_buf (line 100) | fn hello_world_buf() -> BufList<Bytes> {
function to_bytes_shorter (line 107) | fn to_bytes_shorter() {
function to_bytes_eq (line 119) | fn to_bytes_eq() {
function to_bytes_longer (line 130) | fn to_bytes_longer() {
function one_long_buf_to_bytes (line 138) | fn one_long_buf_to_bytes() {
function buf_to_bytes_too_many (line 147) | fn buf_to_bytes_too_many() {
FILE: src/common/date.rs
constant DATE_VALUE_LENGTH (line 11) | pub(crate) const DATE_VALUE_LENGTH: usize = 29;
function extend (line 14) | pub(crate) fn extend(dst: &mut Vec<u8>) {
function update (line 21) | pub(crate) fn update() {
function update_and_header_value (line 28) | pub(crate) fn update_and_header_value() -> HeaderValue {
type CachedDate (line 36) | struct CachedDate {
method new (line 47) | fn new() -> Self {
method buffer (line 59) | fn buffer(&self) -> &[u8] {
method check (line 63) | fn check(&mut self) {
method update (line 70) | fn update(&mut self, now: SystemTime) {
method render (line 80) | fn render(&mut self, now: SystemTime) {
method render_http2 (line 88) | fn render_http2(&mut self) {
method render_http2 (line 94) | fn render_http2(&mut self) {}
method write_str (line 98) | fn write_str(&mut self, s: &str) -> fmt::Result {
function test_date_len (line 114) | fn test_date_len() {
function bench_date_check (line 120) | fn bench_date_check(b: &mut Bencher) {
function bench_date_render (line 132) | fn bench_date_render(b: &mut Bencher) {
FILE: src/common/either.rs
function left (line 24) | pub(crate) fn left(fut: F1) -> Self {
function right (line 28) | pub(crate) fn right(fut: F2) -> Self {
type Output (line 38) | type Output = F1::Output;
method poll (line 40) | fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
FILE: src/common/future.rs
function poll_fn (line 8) | pub(crate) fn poll_fn<T, F>(f: F) -> PollFn<F>
type PollFn (line 15) | pub(crate) struct PollFn<F> {
type Output (line 25) | type Output = T;
method poll (line 27) | fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Ou...
FILE: src/common/io/compat.rs
type Compat (line 8) | pub(crate) struct Compat<T>(pub(crate) T);
function new (line 11) | pub(crate) fn new(io: T) -> Self {
function p (line 15) | fn p(self: Pin<&mut Self>) -> Pin<&mut T> {
function poll_read (line 26) | fn poll_read(
function poll_write (line 58) | fn poll_write(
function poll_flush (line 66) | fn poll_flush(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result...
function poll_shutdown (line 70) | fn poll_shutdown(
function is_write_vectored (line 77) | fn is_write_vectored(&self) -> bool {
function poll_write_vectored (line 81) | fn poll_write_vectored(
function poll_read (line 95) | fn poll_read(
function poll_write (line 120) | fn poll_write(
function poll_flush (line 128) | fn poll_flush(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result...
function poll_shutdown (line 132) | fn poll_shutdown(
function is_write_vectored (line 139) | fn is_write_vectored(&self) -> bool {
function poll_write_vectored (line 143) | fn poll_write_vectored(
FILE: src/common/io/rewind.rs
type Rewind (line 11) | pub(crate) struct Rewind<T> {
function new (line 22) | pub(crate) fn new(io: T) -> Self {
function new_buffered (line 29) | pub(crate) fn new_buffered(io: T, buf: Bytes) -> Self {
function rewind (line 41) | pub(crate) fn rewind(&mut self, bs: Bytes) {
function into_inner (line 46) | pub(crate) fn into_inner(self) -> (T, Bytes) {
method poll_read (line 59) | fn poll_read(
method poll_write (line 87) | fn poll_write(
method poll_write_vectored (line 95) | fn poll_write_vectored(
method poll_flush (line 103) | fn poll_flush(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<io...
method poll_shutdown (line 107) | fn poll_shutdown(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll...
method is_write_vectored (line 111) | fn is_write_vectored(&self) -> bool {
function partial_rewind (line 129) | async fn partial_rewind() {
function full_rewind (line 152) | async fn full_rewind() {
FILE: src/common/task.rs
function yield_now (line 8) | pub(crate) fn yield_now(cx: &mut Context<'_>) -> Poll<std::convert::Infa...
function noop_waker (line 15) | fn noop_waker() -> Waker {
function now_or_never (line 36) | pub(crate) fn now_or_never<F: std::future::Future>(fut: F) -> Option<F::...
FILE: src/common/time.rs
type Time (line 14) | pub(crate) enum Time {
method fmt (line 27) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
method sleep (line 34) | pub(crate) fn sleep(&self, duration: Duration) -> Pin<Box<dyn Sleep>> {
method sleep_until (line 44) | pub(crate) fn sleep_until(&self, deadline: Instant) -> Pin<Box<dyn Sle...
method now (line 53) | pub(crate) fn now(&self) -> Instant {
method reset (line 60) | pub(crate) fn reset(&self, sleep: &mut Pin<Box<dyn Sleep>>, new_deadli...
method check (line 70) | pub(crate) fn check(&self, dur: Dur, name: &'static str) -> Option<Dur...
type Dur (line 21) | pub(crate) enum Dur {
FILE: src/common/watch.rs
type Value (line 14) | type Value = usize;
constant CLOSED (line 16) | pub(crate) const CLOSED: usize = 0;
function channel (line 18) | pub(crate) fn channel(initial: Value) -> (Sender, Receiver) {
type Sender (line 37) | pub(crate) struct Sender {
method send (line 51) | pub(crate) fn send(&mut self, value: Value) {
type Receiver (line 41) | pub(crate) struct Receiver {
method load (line 65) | pub(crate) fn load(&mut self, cx: &mut task::Context<'_>) -> Value {
method peek (line 70) | pub(crate) fn peek(&self) -> Value {
type Shared (line 45) | struct Shared {
method drop (line 59) | fn drop(&mut self) {
FILE: src/error.rs
type Result (line 6) | pub type Result<T> = std::result::Result<T, Error>;
type Cause (line 8) | type Cause = Box<dyn StdError + Send + Sync>;
type Error (line 31) | pub struct Error {
method is_parse (line 176) | pub fn is_parse(&self) -> bool {
method is_parse_too_large (line 182) | pub fn is_parse_too_large(&self) -> bool {
method is_parse_status (line 191) | pub fn is_parse_status(&self) -> bool {
method is_user (line 196) | pub fn is_user(&self) -> bool {
method is_canceled (line 201) | pub fn is_canceled(&self) -> bool {
method is_closed (line 206) | pub fn is_closed(&self) -> bool {
method is_incomplete_message (line 237) | pub fn is_incomplete_message(&self) -> bool {
method is_body_write_aborted (line 246) | pub fn is_body_write_aborted(&self) -> bool {
method is_shutdown (line 261) | pub fn is_shutdown(&self) -> bool {
method is_timeout (line 270) | pub fn is_timeout(&self) -> bool {
method new (line 278) | pub(super) fn new(kind: Kind) -> Error {
method with (line 284) | pub(super) fn with<C: Into<Cause>>(mut self, cause: C) -> Error {
method kind (line 290) | pub(super) fn kind(&self) -> &Kind {
method find_source (line 294) | pub(crate) fn find_source<E: StdError + 'static>(&self) -> Option<&E> {
method h2_reason (line 308) | pub(super) fn h2_reason(&self) -> h2::Reason {
method new_canceled (line 316) | pub(super) fn new_canceled() -> Error {
method new_incomplete (line 321) | pub(super) fn new_incomplete() -> Error {
method new_too_large (line 326) | pub(super) fn new_too_large() -> Error {
method new_version_h2 (line 331) | pub(super) fn new_version_h2() -> Error {
method new_unexpected_message (line 336) | pub(super) fn new_unexpected_message() -> Error {
method new_io (line 344) | pub(super) fn new_io(cause: std::io::Error) -> Error {
method new_closed (line 352) | pub(super) fn new_closed() -> Error {
method new_body (line 360) | pub(super) fn new_body<E: Into<Cause>>(cause: E) -> Error {
method new_body_write (line 368) | pub(super) fn new_body_write<E: Into<Cause>>(cause: E) -> Error {
method new_body_write_aborted (line 376) | pub(super) fn new_body_write_aborted() -> Error {
method new_user (line 380) | fn new_user(user: User) -> Error {
method new_user_header (line 386) | pub(super) fn new_user_header() -> Error {
method new_header_timeout (line 391) | pub(super) fn new_header_timeout() -> Error {
method new_user_unsupported_status_code (line 397) | pub(super) fn new_user_unsupported_status_code() -> Error {
method new_user_no_upgrade (line 401) | pub(super) fn new_user_no_upgrade() -> Error {
method new_user_manual_upgrade (line 406) | pub(super) fn new_user_manual_upgrade() -> Error {
method new_user_service (line 414) | pub(super) fn new_user_service<E: Into<Cause>>(cause: E) -> Error {
method new_user_body (line 422) | pub(super) fn new_user_body<E: Into<Cause>>(cause: E) -> Error {
method new_user_invalid_connect (line 427) | pub(super) fn new_user_invalid_connect() -> Error {
method new_shutdown (line 432) | pub(super) fn new_shutdown(cause: std::io::Error) -> Error {
method new_user_aborted_by_callback (line 437) | pub(super) fn new_user_aborted_by_callback() -> Error {
method new_user_dispatch_gone (line 442) | pub(super) fn new_user_dispatch_gone() -> Error {
method new_h2 (line 447) | pub(super) fn new_h2(cause: ::h2::Error) -> Error {
method description (line 455) | fn description(&self) -> &str {
method fmt (line 557) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
method fmt (line 568) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
method from (line 584) | fn from(err: Parse) -> Error {
type ErrorImpl (line 35) | struct ErrorImpl {
type Kind (line 41) | pub(super) enum Kind {
type Parse (line 89) | pub(super) enum Parse {
method content_length_invalid (line 592) | pub(crate) fn content_length_invalid() -> Self {
method transfer_encoding_invalid (line 597) | pub(crate) fn transfer_encoding_invalid() -> Self {
method transfer_encoding_unexpected (line 602) | pub(crate) fn transfer_encoding_unexpected() -> Self {
method from (line 609) | fn from(err: httparse::Error) -> Parse {
method from (line 623) | fn from(_: http::method::InvalidMethod) -> Parse {
method from (line 629) | fn from(_: http::status::InvalidStatusCode) -> Parse {
method from (line 635) | fn from(_: http::uri::InvalidUri) -> Parse {
method from (line 641) | fn from(_: http::uri::InvalidUriParts) -> Parse {
type Header (line 110) | pub(super) enum Header {
type User (line 121) | pub(super) enum User {
type TimedOut (line 172) | pub(super) struct TimedOut;
method fmt (line 649) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
method source (line 574) | fn source(&self) -> Option<&(dyn StdError + 'static)> {
function assert_send_sync (line 661) | fn assert_send_sync<T: Send + Sync + 'static>() {}
function error_satisfies_send_sync (line 664) | fn error_satisfies_send_sync() {
function error_size_of (line 669) | fn error_size_of() {
function h2_reason_unknown (line 675) | fn h2_reason_unknown() {
function h2_reason_one_level (line 682) | fn h2_reason_one_level() {
function h2_reason_nested (line 689) | fn h2_reason_nested() {
FILE: src/ext/h1_reason_phrase.rs
type ReasonPhrase (line 34) | pub struct ReasonPhrase(Bytes);
method as_bytes (line 38) | pub fn as_bytes(&self) -> &[u8] {
method from_static (line 43) | pub const fn from_static(reason: &'static [u8]) -> Self {
method from_bytes_unchecked (line 57) | pub(crate) fn from_bytes_unchecked(reason: Bytes) -> Self {
type Error (line 63) | type Error = InvalidReasonPhrase;
method try_from (line 65) | fn try_from(reason: &[u8]) -> Result<Self, Self::Error> {
type Error (line 75) | type Error = InvalidReasonPhrase;
method try_from (line 77) | fn try_from(reason: Vec<u8>) -> Result<Self, Self::Error> {
type Error (line 87) | type Error = InvalidReasonPhrase;
method try_from (line 89) | fn try_from(reason: String) -> Result<Self, Self::Error> {
type Error (line 99) | type Error = InvalidReasonPhrase;
method try_from (line 101) | fn try_from(reason: Bytes) -> Result<Self, Self::Error> {
method as_ref (line 117) | fn as_ref(&self) -> &[u8] {
method from (line 111) | fn from(reason: ReasonPhrase) -> Self {
type InvalidReasonPhrase (line 128) | pub struct InvalidReasonPhrase {
method fmt (line 133) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
function is_valid_byte (line 140) | const fn is_valid_byte(b: u8) -> bool {
function find_invalid_byte (line 159) | const fn find_invalid_byte(bytes: &[u8]) -> Option<u8> {
function basic_valid (line 176) | fn basic_valid() {
function empty_valid (line 183) | fn empty_valid() {
function obs_text_valid (line 190) | fn obs_text_valid() {
constant NEWLINE_PHRASE (line 196) | const NEWLINE_PHRASE: &[u8] = b"hyp\ner";
function newline_invalid_panic (line 200) | fn newline_invalid_panic() {
function newline_invalid_err (line 205) | fn newline_invalid_err() {
constant CR_PHRASE (line 209) | const CR_PHRASE: &[u8] = b"hyp\rer";
function cr_invalid_panic (line 213) | fn cr_invalid_panic() {
function cr_invalid_err (line 218) | fn cr_invalid_err() {
FILE: src/ext/informational.rs
type OnInformational (line 4) | pub(crate) struct OnInformational(Arc<dyn OnInformationalCallback + Send...
method call (line 41) | pub(crate) fn call(&self, res: http::Response<()>) {
function on_informational (line 20) | pub fn on_informational<B, F>(req: &mut http::Request<B>, callback: F)
function on_informational_raw (line 27) | pub(crate) fn on_informational_raw<B, C>(req: &mut http::Request<B>, cal...
type OnInformationalCallback (line 36) | pub(crate) trait OnInformationalCallback {
method on_informational (line 37) | fn on_informational(&self, res: http::Response<()>);
method on_informational (line 52) | fn on_informational(&self, res: http::Response<()>) {
type OnInformationalClosure (line 46) | struct OnInformationalClosure<F>(F);
type Response (line 69) | pub struct Response<'a>(&'a http::Response<()>);
function status (line 73) | pub fn status(&self) -> http::StatusCode {
function version (line 78) | pub fn version(&self) -> http::Version {
function headers (line 83) | pub fn headers(&self) -> &http::HeaderMap {
FILE: src/ext/mod.rs
type Protocol (line 86) | pub struct Protocol {
method from_static (line 93) | pub const fn from_static(value: &'static str) -> Self {
method as_str (line 100) | pub fn as_str(&self) -> &str {
method from_inner (line 105) | pub(crate) fn from_inner(inner: h2::ext::Protocol) -> Self {
method into_inner (line 110) | pub(crate) fn into_inner(self) -> h2::ext::Protocol {
method from (line 117) | fn from(value: &'a str) -> Self {
method as_ref (line 126) | fn as_ref(&self) -> &[u8] {
method fmt (line 133) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
type HeaderCaseMap (line 161) | pub(crate) struct HeaderCaseMap(HeaderMap<Bytes>);
method get_all (line 168) | pub(crate) fn get_all<'a>(
method get_all_internal (line 178) | pub(crate) fn get_all_internal(&self, name: &HeaderName) -> ValueIter<...
method default (line 183) | pub(crate) fn default() -> Self {
method insert (line 188) | pub(crate) fn insert(&mut self, name: HeaderName, orig: Bytes) {
method append (line 193) | pub(crate) fn append<N>(&mut self, name: N, orig: Bytes)
type OriginalHeaderOrder (line 204) | pub(crate) struct OriginalHeaderOrder {
method default (line 218) | pub(crate) fn default() -> Self {
method insert (line 225) | pub(crate) fn insert(&mut self, name: HeaderName) {
method append (line 236) | pub(crate) fn append<N>(&mut self, name: N)
method get_in_order (line 292) | pub(crate) fn get_in_order(&self) -> impl Iterator<Item = &(HeaderName...
FILE: src/ffi/body.rs
type hyper_body (line 33) | pub struct hyper_body(pub(super) IncomingBody);
type hyper_buf (line 47) | pub struct hyper_buf(pub(crate) Bytes);
type UserBody (line 49) | pub(crate) struct UserBody {
method new (line 204) | pub(crate) fn new() -> UserBody {
method poll_data (line 211) | pub(crate) fn poll_data(
type hyper_body_foreach_callback (line 56) | type hyper_body_foreach_callback = extern "C" fn(*mut c_void, *const hyp...
type hyper_body_data_callback (line 58) | type hyper_body_data_callback =
function data_noop (line 238) | extern "C" fn data_noop(
method as_task_type (line 299) | fn as_task_type(&self) -> hyper_task_return_type {
FILE: src/ffi/client.rs
type hyper_clientconn_options (line 24) | pub struct hyper_clientconn_options {
type hyper_clientconn (line 71) | pub struct hyper_clientconn {
type Tx (line 75) | enum Tx {
method as_task_type (line 173) | fn as_task_type(&self) -> hyper_task_return_type {
FILE: src/ffi/error.rs
type hyper_error (line 13) | pub struct hyper_error(crate::Error);
method code (line 41) | fn code(&self) -> hyper_code {
method print_to (line 54) | fn print_to(&self, dst: &mut [u8]) -> usize {
type hyper_code (line 17) | pub enum hyper_code {
FILE: src/ffi/http_types.rs
type hyper_request (line 31) | pub struct hyper_request(pub(super) Request<IncomingBody>);
method finalize_request (line 292) | pub(super) fn finalize_request(&mut self) {
type hyper_response (line 51) | pub struct hyper_response(pub(super) Response<IncomingBody>);
method wrap (line 391) | pub(super) fn wrap(mut resp: Response<IncomingBody>) -> hyper_response {
method reason_phrase (line 410) | fn reason_phrase(&self) -> &[u8] {
type hyper_headers (line 66) | pub struct hyper_headers {
method get_or_default (line 435) | pub(super) fn get_or_default(ext: &mut http::Extensions) -> &mut hyper...
type OnInformational (line 73) | struct OnInformational {
method on_informational (line 583) | fn on_informational(&self, res: http::Response<()>) {
type hyper_request_on_informational_callback (line 78) | type hyper_request_on_informational_callback = extern "C" fn(*mut c_void...
method as_task_type (line 424) | fn as_task_type(&self) -> hyper_task_return_type {
type hyper_headers_foreach_callback (line 431) | type hyper_headers_foreach_callback =
method default (line 549) | fn default() -> Self {
function raw_name_value (line 558) | unsafe fn raw_name_value(
function test_headers_foreach_cases_preserved (line 595) | fn test_headers_foreach_cases_preserved() {
function test_headers_foreach_order_preserved (line 645) | fn test_headers_foreach_order_preserved() {
FILE: src/ffi/io.rs
constant HYPER_IO_PENDING (line 11) | pub const HYPER_IO_PENDING: size_t = 0xFFFFFFFF;
constant HYPER_IO_ERROR (line 14) | pub const HYPER_IO_ERROR: size_t = 0xFFFFFFFE;
type hyper_io_read_callback (line 16) | type hyper_io_read_callback =
type hyper_io_write_callback (line 18) | type hyper_io_write_callback =
type hyper_io (line 35) | pub struct hyper_io {
function read_noop (line 125) | extern "C" fn read_noop(
function write_noop (line 135) | extern "C" fn write_noop(
method poll_read (line 145) | fn poll_read(
method poll_write (line 170) | fn poll_write(
method poll_flush (line 188) | fn poll_flush(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll<std::io...
method poll_shutdown (line 192) | fn poll_shutdown(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll<std:...
FILE: src/ffi/mod.rs
constant HYPER_ITER_CONTINUE (line 65) | pub const HYPER_ITER_CONTINUE: std::ffi::c_int = 0;
constant HYPER_ITER_BREAK (line 68) | pub const HYPER_ITER_BREAK: std::ffi::c_int = 1;
constant HYPER_HTTP_VERSION_NONE (line 71) | pub const HYPER_HTTP_VERSION_NONE: std::ffi::c_int = 0;
constant HYPER_HTTP_VERSION_1_0 (line 73) | pub const HYPER_HTTP_VERSION_1_0: std::ffi::c_int = 10;
constant HYPER_HTTP_VERSION_1_1 (line 75) | pub const HYPER_HTTP_VERSION_1_1: std::ffi::c_int = 11;
constant HYPER_HTTP_VERSION_2 (line 77) | pub const HYPER_HTTP_VERSION_2: std::ffi::c_int = 20;
type UserDataPointer (line 80) | struct UserDataPointer(*mut std::ffi::c_void);
type size_t (line 92) | type size_t = usize;
FILE: src/ffi/task.rs
type BoxFuture (line 16) | type BoxFuture<T> = Pin<Box<dyn Future<Output = T> + Send>>;
type BoxAny (line 17) | type BoxAny = Box<dyn AsTaskType + Send + Sync>;
constant HYPER_POLL_READY (line 20) | pub const HYPER_POLL_READY: c_int = 0;
constant HYPER_POLL_PENDING (line 25) | pub const HYPER_POLL_PENDING: c_int = 1;
constant HYPER_POLL_ERROR (line 27) | pub const HYPER_POLL_ERROR: c_int = 3;
type hyper_executor (line 52) | pub struct hyper_executor {
method new (line 184) | fn new() -> Arc<hyper_executor> {
method downgrade (line 192) | pub(crate) fn downgrade(exec: &Arc<hyper_executor>) -> WeakExec {
method spawn (line 196) | fn spawn(&self, task: Box<hyper_task>) {
method poll_next (line 203) | fn poll_next(&self) -> Option<Box<hyper_task>> {
method drain_queue (line 240) | fn drain_queue(&self) -> bool {
type WeakExec (line 74) | pub(crate) struct WeakExec(Weak<hyper_executor>);
method new (line 265) | pub(crate) fn new() -> Self {
method execute (line 275) | fn execute(&self, fut: F) {
type ExecWaker (line 76) | struct ExecWaker(AtomicBool);
method wake_by_ref (line 257) | fn wake_by_ref(me: &Arc<ExecWaker>) {
type hyper_task (line 113) | pub struct hyper_task {
method boxed (line 343) | pub(crate) fn boxed<F>(fut: F) -> Box<hyper_task>
method output_type (line 355) | fn output_type(&self) -> hyper_task_return_type {
type TaskFuture (line 119) | struct TaskFuture {
type hyper_context (line 129) | pub struct hyper_context<'a>(Context<'a>);
type hyper_waker (line 154) | pub struct hyper_waker {
type hyper_task_return_type (line 160) | pub enum hyper_task_return_type {
type AsTaskType (line 173) | pub(crate) unsafe trait AsTaskType {
method as_task_type (line 174) | fn as_task_type(&self) -> hyper_task_return_type;
method as_task_type (line 454) | fn as_task_type(&self) -> hyper_task_return_type {
method as_task_type (line 460) | fn as_task_type(&self) -> hyper_task_return_type {
type IntoDynTaskType (line 177) | pub(crate) trait IntoDynTaskType {
method into_dyn_task_type (line 178) | fn into_dyn_task_type(self) -> BoxAny;
method into_dyn_task_type (line 469) | fn into_dyn_task_type(self) -> BoxAny {
method into_dyn_task_type (line 478) | fn into_dyn_task_type(self) -> BoxAny {
method into_dyn_task_type (line 490) | fn into_dyn_task_type(self) -> BoxAny {
type Output (line 364) | type Output = Box<hyper_task>;
method poll (line 366) | fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Ou...
function wrap (line 501) | pub(crate) fn wrap<'a, 'b>(cx: &'a mut Context<'b>) -> &'a mut hyper_con...
FILE: src/headers.rs
function connection_keep_alive (line 13) | pub(super) fn connection_keep_alive(value: &HeaderValue) -> bool {
function connection_close (line 18) | pub(super) fn connection_close(value: &HeaderValue) -> bool {
function connection_has (line 23) | fn connection_has(value: &HeaderValue, needle: &str) -> bool {
function content_length_parse (line 35) | pub(super) fn content_length_parse(value: &HeaderValue) -> Option<u64> {
function content_length_parse_all (line 40) | pub(super) fn content_length_parse_all(headers: &HeaderMap) -> Option<u6...
function content_length_parse_all_values (line 45) | pub(super) fn content_length_parse_all_values(values: ValueIter<'_, Head...
function from_digits (line 72) | fn from_digits(bytes: &[u8]) -> Option<u64> {
function method_has_defined_payload_semantics (line 100) | pub(super) fn method_has_defined_payload_semantics(method: &Method) -> b...
function set_content_length_if_missing (line 108) | pub(super) fn set_content_length_if_missing(headers: &mut HeaderMap, len...
function transfer_encoding_is_chunked (line 115) | pub(super) fn transfer_encoding_is_chunked(headers: &HeaderMap) -> bool {
function is_chunked (line 120) | pub(super) fn is_chunked(mut encodings: ValueIter<'_, HeaderValue>) -> b...
function is_chunked_ (line 130) | pub(super) fn is_chunked_(value: &HeaderValue) -> bool {
function add_chunked (line 142) | pub(super) fn add_chunked(mut entry: http::header::OccupiedEntry<'_, Hea...
FILE: src/proto/h1/conn.rs
constant H2_PREFACE (line 29) | const H2_PREFACE: &[u8] = b"PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n";
type Conn (line 38) | pub(crate) struct Conn<I, B, T> {
function new (line 50) | pub(crate) fn new(io: I) -> Conn<I, B, T> {
function set_timer (line 92) | pub(crate) fn set_timer(&mut self, timer: Time) {
function set_flush_pipeline (line 97) | pub(crate) fn set_flush_pipeline(&mut self, enabled: bool) {
function set_write_strategy_queue (line 101) | pub(crate) fn set_write_strategy_queue(&mut self) {
function set_max_buf_size (line 105) | pub(crate) fn set_max_buf_size(&mut self, max: usize) {
function set_read_buf_exact_size (line 110) | pub(crate) fn set_read_buf_exact_size(&mut self, sz: usize) {
function set_write_strategy_flatten (line 114) | pub(crate) fn set_write_strategy_flatten(&mut self) {
function set_h1_parser_config (line 118) | pub(crate) fn set_h1_parser_config(&mut self, parser_config: ParserConfi...
function set_title_case_headers (line 122) | pub(crate) fn set_title_case_headers(&mut self) {
function set_preserve_header_case (line 126) | pub(crate) fn set_preserve_header_case(&mut self) {
function set_preserve_header_order (line 131) | pub(crate) fn set_preserve_header_order(&mut self) {
function set_h09_responses (line 136) | pub(crate) fn set_h09_responses(&mut self) {
function set_http1_max_headers (line 140) | pub(crate) fn set_http1_max_headers(&mut self, val: usize) {
function set_http1_header_read_timeout (line 145) | pub(crate) fn set_http1_header_read_timeout(&mut self, val: Duration) {
function set_allow_half_close (line 150) | pub(crate) fn set_allow_half_close(&mut self) {
function disable_date_header (line 155) | pub(crate) fn disable_date_header(&mut self) {
function into_inner (line 159) | pub(crate) fn into_inner(self) -> (I, Bytes) {
function pending_upgrade (line 163) | pub(crate) fn pending_upgrade(&mut self) -> Option<crate::upgrade::Pendi...
function is_read_closed (line 167) | pub(crate) fn is_read_closed(&self) -> bool {
function is_write_closed (line 171) | pub(crate) fn is_write_closed(&self) -> bool {
function can_read_head (line 175) | pub(crate) fn can_read_head(&self) -> bool {
function can_read_body (line 187) | pub(crate) fn can_read_body(&self) -> bool {
function has_initial_read_write_state (line 195) | pub(crate) fn has_initial_read_write_state(&self) -> bool {
function should_error_on_eof (line 201) | fn should_error_on_eof(&self) -> bool {
function has_h2_prefix (line 206) | fn has_h2_prefix(&self) -> bool {
function poll_read_head (line 211) | pub(super) fn poll_read_head(
function on_read_head_error (line 337) | fn on_read_head_error<Z>(&mut self, e: crate::Error) -> Poll<Option<crat...
function poll_read_body (line 363) | pub(crate) fn poll_read_body(
function wants_read_again (line 428) | pub(crate) fn wants_read_again(&mut self) -> bool {
function poll_read_keep_alive (line 434) | pub(crate) fn poll_read_keep_alive(&mut self, cx: &mut Context<'_>) -> P...
function is_mid_message (line 446) | fn is_mid_message(&self) -> bool {
function require_empty_read (line 457) | fn require_empty_read(&mut self, cx: &mut Context<'_>) -> Poll<crate::Re...
function mid_message_detect_eof (line 490) | fn mid_message_detect_eof(&mut self, cx: &mut Context<'_>) -> Poll<crate...
function force_io_read (line 509) | fn force_io_read(&mut self, cx: &mut Context<'_>) -> Poll<io::Result<usi...
function maybe_notify (line 520) | fn maybe_notify(&mut self, cx: &mut Context<'_>) {
function try_keep_alive (line 567) | fn try_keep_alive(&mut self, cx: &mut Context<'_>) {
function can_write_head (line 572) | pub(crate) fn can_write_head(&self) -> bool {
function can_write_body (line 583) | pub(crate) fn can_write_body(&self) -> bool {
function can_buffer_body (line 590) | pub(crate) fn can_buffer_body(&self) -> bool {
function write_head (line 594) | pub(crate) fn write_head(&mut self, head: MessageHead<T::Outgoing>, body...
function encode_head (line 606) | fn encode_head(
function fix_keep_alive (line 655) | fn fix_keep_alive(&mut self, head: &mut MessageHead<T::Outgoing>) {
function enforce_version (line 681) | fn enforce_version(&mut self, head: &mut MessageHead<T::Outgoing>) {
function write_body (line 703) | pub(crate) fn write_body(&mut self, chunk: B) {
function write_trailers (line 728) | pub(crate) fn write_trailers(&mut self, trailers: HeaderMap) {
function write_body_and_end (line 753) | pub(crate) fn write_body_and_end(&mut self, chunk: B) {
function end_body (line 773) | pub(crate) fn end_body(&mut self) -> crate::Result<()> {
function on_parse_error (line 808) | fn on_parse_error(&mut self, err: crate::Error) -> crate::Result<()> {
function poll_flush (line 827) | pub(crate) fn poll_flush(&mut self, cx: &mut Context<'_>) -> Poll<io::Re...
function poll_shutdown (line 834) | pub(crate) fn poll_shutdown(&mut self, cx: &mut Context<'_>) -> Poll<io:...
function poll_drain_or_close_read (line 848) | pub(super) fn poll_drain_or_close_read(&mut self, cx: &mut Context<'_>) {
function close_read (line 866) | pub(crate) fn close_read(&mut self) {
function close_write (line 870) | pub(crate) fn close_write(&mut self) {
function disable_keep_alive (line 875) | pub(crate) fn disable_keep_alive(&mut self) {
function take_error (line 885) | pub(crate) fn take_error(&mut self) -> crate::Result<()> {
function on_upgrade (line 893) | pub(super) fn on_upgrade(&mut self) -> crate::upgrade::OnUpgrade {
function fmt (line 900) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
type State (line 911) | struct State {
method fmt (line 979) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
method close (line 1048) | fn close(&mut self) {
method close_read (line 1055) | fn close_read(&mut self) {
method close_write (line 1061) | fn close_write(&mut self) {
method wants_keep_alive (line 1067) | fn wants_keep_alive(&self) -> bool {
method try_keep_alive (line 1071) | fn try_keep_alive<T: Http1Transaction>(&mut self) {
method disable_keep_alive (line 1092) | fn disable_keep_alive(&mut self) {
method busy (line 1096) | fn busy(&mut self) {
method idle (line 1103) | fn idle<T: Http1Transaction>(&mut self) {
method is_idle (line 1135) | fn is_idle(&self) -> bool {
method is_read_closed (line 1139) | fn is_read_closed(&self) -> bool {
method is_write_closed (line 1143) | fn is_write_closed(&self) -> bool {
method prepare_upgrade (line 1147) | fn prepare_upgrade(&mut self) -> crate::upgrade::OnUpgrade {
type Reading (line 963) | enum Reading {
type Writing (line 971) | enum Writing {
method fmt (line 1002) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
type KA (line 1022) | enum KA {
method bitand_assign (line 1013) | fn bitand_assign(&mut self, enabled: bool) {
method idle (line 1030) | fn idle(&mut self) {
method busy (line 1034) | fn busy(&mut self) {
method disable (line 1038) | fn disable(&mut self) {
method status (line 1042) | fn status(&self) -> KA {
function bench_read_head_short (line 1158) | fn bench_read_head_short(b: &mut ::test::Bencher) {
FILE: src/proto/h1/decode.rs
constant CHUNKED_EXTENSIONS_LIMIT (line 20) | const CHUNKED_EXTENSIONS_LIMIT: u64 = 1024 * 16;
constant TRAILER_LIMIT (line 25) | const TRAILER_LIMIT: usize = 1024 * 16;
type Decoder (line 32) | pub(crate) struct Decoder {
method length (line 89) | pub(crate) fn length(x: u64) -> Decoder {
method chunked (line 95) | pub(crate) fn chunked(
method eof (line 112) | pub(crate) fn eof() -> Decoder {
method new (line 118) | pub(super) fn new(
method is_eof (line 132) | pub(crate) fn is_eof(&self) -> bool {
method decode (line 144) | pub(crate) fn decode<R: MemRead>(
method decode_fut (line 248) | async fn decode_fut<R: MemRead>(&mut self, body: &mut R) -> Result<Fra...
method fmt (line 254) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
type Kind (line 37) | enum Kind {
type ChunkedState (line 70) | enum ChunkedState {
method new (line 307) | fn new() -> ChunkedState {
method step (line 310) | fn step<R: MemRead>(
method read_start (line 349) | fn read_start<R: MemRead>(
method read_size (line 381) | fn read_size<R: MemRead>(
method read_size_lws (line 414) | fn read_size_lws<R: MemRead>(
method read_extension (line 430) | fn read_extension<R: MemRead>(
method read_size_lf (line 461) | fn read_size_lf<R: MemRead>(
method read_body (line 483) | fn read_body<R: MemRead>(
method read_body_cr (line 517) | fn read_body_cr<R: MemRead>(
method read_body_lf (line 529) | fn read_body_lf<R: MemRead>(
method read_trailer (line 542) | fn read_trailer<R: MemRead>(
method read_trailer_lf (line 563) | fn read_trailer_lf<R: MemRead>(
method read_end_cr (line 597) | fn read_end_cr<R: MemRead>(
method read_end_lf (line 628) | fn read_end_lf<R: MemRead>(
type StepArgs (line 296) | struct StepArgs<'a> {
function decode_trailers (line 651) | fn decode_trailers(buf: &mut BytesMut, count: usize) -> Result<HeaderMap...
type IncompleteBody (line 693) | struct IncompleteBody;
method fmt (line 696) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
method read_mem (line 711) | fn read_mem(&mut self, _: &mut Context<'_>, len: usize) -> Poll<io::Resu...
method read_mem (line 725) | fn read_mem(&mut self, cx: &mut Context<'_>, len: usize) -> Poll<io::Res...
method read_mem (line 734) | fn read_mem(&mut self, _: &mut Context<'_>, len: usize) -> Poll<io::Resu...
function test_read_chunk_size (line 753) | async fn test_read_chunk_size() {
function test_read_sized_early_eof (line 869) | async fn test_read_sized_early_eof() {
function test_read_chunked_early_eof (line 888) | async fn test_read_chunked_early_eof() {
function test_read_chunked_single_read (line 910) | async fn test_read_chunked_single_read() {
function test_read_chunked_with_missing_zero_digit (line 924) | async fn test_read_chunked_with_missing_zero_digit() {
function test_read_chunked_extensions_over_limit (line 944) | async fn test_read_chunked_extensions_over_limit() {
function test_read_chunked_trailer_with_missing_lf (line 976) | async fn test_read_chunked_trailer_with_missing_lf() {
function test_read_chunked_after_eof (line 986) | async fn test_read_chunked_after_eof() {
function read_async (line 1022) | async fn read_async(mut decoder: Decoder, content: &[u8], block_at: usiz...
function all_async_cases (line 1058) | async fn all_async_cases(content: &str, expected: &str, decoder: Decoder) {
function test_read_length_async (line 1068) | async fn test_read_length_async() {
function test_read_chunked_async (line 1075) | async fn test_read_chunked_async() {
function test_read_eof_async (line 1083) | async fn test_read_eof_async() {
function bench_decode_chunked_1kb (line 1090) | fn bench_decode_chunked_1kb(b: &mut test::Bencher) {
function bench_decode_length_1kb (line 1119) | fn bench_decode_length_1kb(b: &mut test::Bencher) {
function new_runtime (line 1142) | fn new_runtime() -> tokio::runtime::Runtime {
function test_decode_trailers (line 1150) | fn test_decode_trailers() {
function test_trailer_max_headers_enforced (line 1165) | async fn test_trailer_max_headers_enforced() {
function test_trailer_max_header_size_huge_trailer (line 1195) | async fn test_trailer_max_header_size_huge_trailer() {
function test_trailer_max_header_size_many_small_trailers (line 1223) | async fn test_trailer_max_header_size_many_small_trailers() {
FILE: src/proto/h1/dispatch.rs
type Dispatcher (line 22) | pub(crate) struct Dispatcher<D, Bs: Body, I, T> {
type Dispatch (line 30) | pub(crate) trait Dispatch {
method poll_msg (line 35) | fn poll_msg(
method recv_msg (line 39) | fn recv_msg(&mut self, msg: crate::Result<(Self::RecvItem, IncomingBod...
method poll_ready (line 41) | fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<Result<(), ()>>;
method should_poll (line 42) | fn should_poll(&self) -> bool;
function new (line 80) | pub(crate) fn new(dispatch: D, conn: Conn<I, Bs::Data, T>) -> Self {
function disable_keep_alive (line 91) | pub(crate) fn disable_keep_alive(&mut self) {
function into_inner (line 102) | pub(crate) fn into_inner(self) -> (I, Bytes, D) {
function poll_without_shutdown (line 112) | pub(crate) fn poll_without_shutdown(
function poll_catch (line 123) | fn poll_catch(
function poll_inner (line 142) | fn poll_inner(
function poll_loop (line 165) | fn poll_loop(&mut self, cx: &mut Context<'_>) -> Poll<crate::Result<()>> {
function poll_read (line 195) | fn poll_read(&mut self, cx: &mut Context<'_>) -> Poll<crate::Result<()>> {
function poll_read_head (line 271) | fn poll_read_head(&mut self, cx: &mut Context<'_>) -> Poll<crate::Result...
function poll_write (line 328) | fn poll_write(&mut self, cx: &mut Context<'_>) -> Poll<crate::Result<()>> {
function poll_flush (line 423) | fn poll_flush(&mut self, cx: &mut Context<'_>) -> Poll<crate::Result<()>> {
function close (line 430) | fn close(&mut self) {
function is_done (line 436) | fn is_done(&self) -> bool {
type Output (line 467) | type Output = crate::Result<Dispatched>;
method poll (line 470) | fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Ou...
type OptGuard (line 479) | struct OptGuard<'a, T>(Pin<&'a mut Option<T>>, bool);
function new (line 482) | fn new(pin: Pin<&'a mut Option<T>>) -> Self {
function guard_mut (line 486) | fn guard_mut(&mut self) -> (Option<Pin<&mut T>>, &mut bool) {
method drop (line 492) | fn drop(&mut self) {
function client_read_bytes_before_writing_request (line 713) | fn client_read_bytes_before_writing_request() {
function client_flushing_is_not_ready_for_next_request (line 749) | async fn client_flushing_is_not_ready_for_next_request() {
function body_empty_chunks_ignored (line 781) | async fn body_empty_chunks_ignored() {
FILE: src/proto/h1/encode.rs
type StaticBuf (line 18) | type StaticBuf = &'static [u8];
type Encoder (line 22) | pub(crate) struct Encoder {
method new (line 61) | fn new(kind: Kind) -> Encoder {
method chunked (line 67) | pub(crate) fn chunked() -> Encoder {
method length (line 71) | pub(crate) fn length(len: u64) -> Encoder {
method close_delimited (line 76) | pub(crate) fn close_delimited() -> Encoder {
method into_chunked_with_trailing_fields (line 80) | pub(crate) fn into_chunked_with_trailing_fields(self, trailers: Vec<He...
method is_eof (line 90) | pub(crate) fn is_eof(&self) -> bool {
method set_last (line 95) | pub(crate) fn set_last(mut self, is_last: bool) -> Self {
method is_last (line 100) | pub(crate) fn is_last(&self) -> bool {
method is_close_delimited (line 104) | pub(crate) fn is_close_delimited(&self) -> bool {
method is_chunked (line 112) | pub(crate) fn is_chunked(&self) -> bool {
method end (line 116) | pub(crate) fn end<B>(&self) -> Result<Option<EncodedBuf<B>>, NotEof> {
method encode (line 128) | pub(crate) fn encode<B>(&mut self, msg: B) -> EncodedBuf<B>
method encode_trailers (line 163) | pub(crate) fn encode_trailers<B>(
method encode_and_end (line 219) | pub(super) fn encode_and_end<B>(&self, msg: B, dst: &mut WriteBuf<Enco...
type EncodedBuf (line 28) | pub(crate) struct EncodedBuf<B> {
type NotEof (line 33) | pub(crate) struct NotEof(u64);
method fmt (line 423) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
type Kind (line 36) | enum Kind {
type BufKind (line 52) | enum BufKind<B> {
function is_valid_trailer_field (line 264) | fn is_valid_trailer_field(name: &HeaderName) -> bool {
method remaining (line 287) | fn remaining(&self) -> usize {
method chunk (line 298) | fn chunk(&self) -> &[u8] {
method advance (line 309) | fn advance(&mut self, cnt: usize) {
method chunks_vectored (line 320) | fn chunks_vectored<'t>(&'t self, dst: &mut [IoSlice<'t>]) -> usize {
constant USIZE_BYTES (line 332) | const USIZE_BYTES: usize = 4;
constant USIZE_BYTES (line 335) | const USIZE_BYTES: usize = 8;
constant CHUNK_SIZE_MAX_BYTES (line 338) | const CHUNK_SIZE_MAX_BYTES: usize = USIZE_BYTES * 2;
type ChunkSize (line 341) | struct ChunkSize {
method new (line 348) | fn new(len: usize) -> ChunkSize {
method fmt (line 379) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
method write_str (line 388) | fn write_str(&mut self, num: &str) -> fmt::Result {
method remaining (line 362) | fn remaining(&self) -> usize {
method chunk (line 367) | fn chunk(&self) -> &[u8] {
method advance (line 372) | fn advance(&mut self, cnt: usize) {
function from (line 399) | fn from(buf: B) -> Self {
function from (line 407) | fn from(buf: Take<B>) -> Self {
function from (line 415) | fn from(buf: Chain<Chain<ChunkSize, B>, StaticBuf>) -> Self {
function chunked (line 445) | fn chunked() {
function length (line 470) | fn length() {
function eof (line 495) | fn eof() {
function chunked_with_valid_trailers (line 517) | fn chunked_with_valid_trailers() {
function chunked_with_multiple_trailer_headers (line 541) | fn chunked_with_multiple_trailer_headers() {
function chunked_with_no_trailer_header (line 571) | fn chunked_with_no_trailer_header() {
function chunked_with_invalid_trailers (line 590) | fn chunked_with_invalid_trailers() {
function chunked_with_title_case_headers (line 627) | fn chunked_with_title_case_headers() {
function chunked_trailers_case_insensitive_matching (line 644) | fn chunked_trailers_case_insensitive_matching() {
FILE: src/proto/h1/io.rs
constant INIT_BUFFER_SIZE (line 15) | pub(crate) const INIT_BUFFER_SIZE: usize = 8192;
constant MINIMUM_MAX_BUFFER_SIZE (line 18) | pub(crate) const MINIMUM_MAX_BUFFER_SIZE: usize = INIT_BUFFER_SIZE;
constant DEFAULT_MAX_BUFFER_SIZE (line 23) | pub(crate) const DEFAULT_MAX_BUFFER_SIZE: usize = 8192 + 4096 * 100;
constant MAX_BUF_LIST_BUFFERS (line 30) | const MAX_BUF_LIST_BUFFERS: usize = 16;
type Buffered (line 32) | pub(crate) struct Buffered<T, B> {
function fmt (line 46) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
function new (line 59) | pub(crate) fn new(io: T) -> Buffered<T, B> {
function set_flush_pipeline (line 78) | pub(crate) fn set_flush_pipeline(&mut self, enabled: bool) {
function set_max_buf_size (line 86) | pub(crate) fn set_max_buf_size(&mut self, max: usize) {
function set_read_buf_exact_size (line 97) | pub(crate) fn set_read_buf_exact_size(&mut self, sz: usize) {
function set_write_strategy_flatten (line 101) | pub(crate) fn set_write_strategy_flatten(&mut self) {
function set_write_strategy_queue (line 108) | pub(crate) fn set_write_strategy_queue(&mut self) {
function read_buf (line 115) | pub(crate) fn read_buf(&self) -> &[u8] {
function read_buf_mut (line 121) | pub(super) fn read_buf_mut(&mut self) -> &mut BytesMut {
function read_buf_remaining_mut (line 127) | fn read_buf_remaining_mut(&self) -> usize {
function can_headers_buf (line 136) | pub(crate) fn can_headers_buf(&self) -> bool {
function headers_buf (line 140) | pub(crate) fn headers_buf(&mut self) -> &mut Vec<u8> {
function write_buf (line 145) | pub(super) fn write_buf(&mut self) -> &mut WriteBuf<B> {
function buffer (line 149) | pub(crate) fn buffer<BB: Buf + Into<B>>(&mut self, buf: BB) {
function can_buffer (line 153) | pub(crate) fn can_buffer(&self) -> bool {
function consume_leading_lines (line 157) | pub(crate) fn consume_leading_lines(&mut self) {
function parse (line 170) | pub(super) fn parse<S>(
function poll_read_from_io (line 223) | pub(crate) fn poll_read_from_io(&mut self, cx: &mut Context<'_>) -> Poll...
function into_inner (line 255) | pub(crate) fn into_inner(self) -> (T, Bytes) {
function io_mut (line 259) | pub(crate) fn io_mut(&mut self) -> &mut T {
function is_read_blocked (line 263) | pub(crate) fn is_read_blocked(&self) -> bool {
function poll_flush (line 267) | pub(crate) fn poll_flush(&mut self, cx: &mut Context<'_>) -> Poll<io::Re...
function poll_flush_flattened (line 307) | fn poll_flush_flattened(&mut self, cx: &mut Context<'_>) -> Poll<io::Res...
function flush (line 327) | fn flush(&mut self) -> impl std::future::Future<Output = io::Result<()>>...
type MemRead (line 336) | pub(crate) trait MemRead {
method read_mem (line 337) | fn read_mem(&mut self, cx: &mut Context<'_>, len: usize) -> Poll<io::R...
method read_mem (line 345) | fn read_mem(&mut self, cx: &mut Context<'_>, len: usize) -> Poll<io::R...
type ReadStrategy (line 357) | enum ReadStrategy {
method with_max (line 368) | fn with_max(max: usize) -> ReadStrategy {
method next (line 376) | fn next(&self) -> usize {
method max (line 384) | fn max(&self) -> usize {
method record (line 392) | fn record(&mut self, bytes_read: usize) {
function incr_power_of_two (line 427) | fn incr_power_of_two(n: usize) -> usize {
function prev_power_of_two (line 431) | fn prev_power_of_two(n: usize) -> usize {
method default (line 439) | fn default() -> ReadStrategy {
type Cursor (line 445) | pub(crate) struct Cursor<T> {
function new (line 452) | pub(crate) fn new(bytes: T) -> Cursor<T> {
function maybe_unshift (line 461) | fn maybe_unshift(&mut self, additional: usize) {
function reset (line 476) | fn reset(&mut self) {
function fmt (line 483) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
method remaining (line 493) | fn remaining(&self) -> usize {
method chunk (line 498) | fn chunk(&self) -> &[u8] {
method advance (line 503) | fn advance(&mut self, cnt: usize) {
type WriteBuf (line 510) | pub(super) struct WriteBuf<B> {
function new (line 520) | fn new(strategy: WriteStrategy) -> WriteBuf<B> {
function set_strategy (line 534) | fn set_strategy(&mut self, strategy: WriteStrategy) {
function buffer (line 538) | pub(super) fn buffer<BB: Buf + Into<B>>(&mut self, mut buf: BB) {
function can_buffer (line 575) | fn can_buffer(&self) -> bool {
function headers_mut (line 584) | fn headers_mut(&mut self) -> &mut Cursor<Vec<u8>> {
function fmt (line 591) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
method remaining (line 601) | fn remaining(&self) -> usize {
method chunk (line 606) | fn chunk(&self) -> &[u8] {
method advance (line 616) | fn advance(&mut self, cnt: usize) {
method chunks_vectored (line 631) | fn chunks_vectored<'t>(&'t self, dst: &mut [IoSlice<'t>]) -> usize {
type WriteStrategy (line 638) | enum WriteStrategy {
function iobuf_write_empty_slice (line 666) | async fn iobuf_write_empty_slice() {
function parse_reads_until_blocked (line 687) | async fn parse_reads_until_blocked() {
function read_strategy_adaptive_increments (line 730) | fn read_strategy_adaptive_increments() {
function read_strategy_adaptive_decrements (line 756) | fn read_strategy_adaptive_decrements() {
function read_strategy_adaptive_stays_the_same (line 787) | fn read_strategy_adaptive_stays_the_same() {
function read_strategy_adaptive_max_fuzz (line 808) | fn read_strategy_adaptive_max_fuzz() {
function write_buf_requires_non_empty_bufs (line 839) | fn write_buf_requires_non_empty_bufs() {
function write_buf_flatten (line 871) | async fn write_buf_flatten() {
function write_buf_flatten_partially_flushed (line 889) | fn write_buf_flatten_partially_flushed() {
function write_buf_queue_disable_auto (line 925) | async fn write_buf_queue_disable_auto() {
FILE: src/proto/h1/mod.rs
type Http1Transaction (line 30) | pub(crate) trait Http1Transaction {
constant LOG (line 34) | const LOG: &'static str;
method parse (line 35) | fn parse(bytes: &mut BytesMut, ctx: ParseContext<'_>) -> ParseResult<S...
method encode (line 36) | fn encode(enc: Encode<'_, Self::Outgoing>, dst: &mut Vec<u8>) -> crate...
method on_error (line 38) | fn on_error(err: &crate::Error) -> Option<MessageHead<Self::Outgoing>>;
method is_client (line 40) | fn is_client() -> bool {
method is_server (line 44) | fn is_server() -> bool {
method should_error_on_parse_eof (line 48) | fn should_error_on_parse_eof() -> bool {
method should_read_first (line 52) | fn should_read_first() -> bool {
method update_date (line 56) | fn update_date() {}
type ParseResult (line 60) | pub(crate) type ParseResult<T> = Result<Option<ParsedMessage<T>>, crate:...
type ParsedMessage (line 63) | pub(crate) struct ParsedMessage<T> {
type ParseContext (line 71) | pub(crate) struct ParseContext<'a> {
type Encode (line 85) | pub(crate) struct Encode<'a, T> {
type Wants (line 98) | struct Wants(u8);
constant EMPTY (line 101) | const EMPTY: Wants = Wants(0b00);
constant EXPECT (line 102) | const EXPECT: Wants = Wants(0b01);
constant UPGRADE (line 103) | const UPGRADE: Wants = Wants(0b10);
method add (line 106) | fn add(self, other: Wants) -> Wants {
method contains (line 110) | fn contains(&self, other: Wants) -> bool {
FILE: src/proto/h1/role.rs
constant DEFAULT_MAX_HEADERS (line 31) | pub(crate) const DEFAULT_MAX_HEADERS: usize = 100;
constant AVERAGE_HEADER_SIZE (line 32) | const AVERAGE_HEADER_SIZE: usize = 30;
constant MAX_URI_LEN (line 34) | const MAX_URI_LEN: usize = (u16::MAX - 1) as usize;
function parse_headers (line 67) | pub(super) fn parse_headers<T>(
function is_complete_fast (line 94) | fn is_complete_fast(bytes: &[u8], prev_len: usize) -> bool {
function encode_headers (line 111) | pub(super) fn encode_headers<T>(
type Client (line 125) | pub(crate) enum Client {}
method decoder (line 1246) | fn decoder(
method set_length (line 1309) | fn set_length(head: &mut RequestHead, body: Option<BodyLength>) -> Enc...
method obs_fold_line (line 1442) | fn obs_fold_line(all: &mut [u8], idx: &mut HeaderIndices) {
type Server (line 128) | pub(crate) enum Server {}
method can_have_body (line 496) | fn can_have_body(method: &Option<Method>, status: StatusCode) -> bool {
method can_chunked (line 500) | fn can_chunked(method: &Option<Method>, status: StatusCode) -> bool {
method can_have_content_length (line 511) | fn can_have_content_length(method: &Option<Method>, status: StatusCode...
method can_have_implicit_zero_content_length (line 519) | fn can_have_implicit_zero_content_length(method: &Option<Method>, stat...
method encode_headers_with_lower_case (line 523) | fn encode_headers_with_lower_case(
method encode_headers_with_original_case (line 564) | fn encode_headers_with_original_case(
method encode_headers (line 634) | fn encode_headers<W>(
method record_path_range (line 980) | fn record_path_range(bytes: &[u8], req_path: &str) -> std::ops::Range<...
type Incoming (line 132) | type Incoming = RequestLine;
type Outgoing (line 133) | type Outgoing = StatusCode;
constant LOG (line 135) | const LOG: &'static str = "{role=server}";
method parse (line 137) | fn parse(buf: &mut BytesMut, ctx: ParseContext<'_>) -> ParseResult<Reque...
method encode (line 363) | fn encode(mut msg: Encode<'_, Self::Outgoing>, dst: &mut Vec<u8>) -> cra...
method on_error (line 465) | fn on_error(err: &crate::Error) -> Option<MessageHead<Self::Outgoing>> {
method is_server (line 485) | fn is_server() -> bool {
method update_date (line 489) | fn update_date() {
type HeaderNameWriter (line 989) | trait HeaderNameWriter {
method write_full_header_line (line 990) | fn write_full_header_line(
method write_header_name_with_colon (line 996) | fn write_header_name_with_colon(
method write_header_name (line 1002) | fn write_header_name(&mut self, dst: &mut Vec<u8>, name: &HeaderName);
type Incoming (line 1007) | type Incoming = StatusCode;
type Outgoing (line 1008) | type Outgoing = RequestLine;
constant LOG (line 1010) | const LOG: &'static str = "{role=client}";
method parse (line 1012) | fn parse(buf: &mut BytesMut, ctx: ParseContext<'_>) -> ParseResult<Statu...
method encode (line 1182) | fn encode(msg: Encode<'_, Self::Outgoing>, dst: &mut Vec<u8>) -> crate::...
method on_error (line 1231) | fn on_error(_err: &crate::Error) -> Option<MessageHead<Self::Outgoing>> {
method is_client (line 1236) | fn is_client() -> bool {
function set_content_length (line 1503) | fn set_content_length(headers: &mut HeaderMap, len: u64) -> Encoder {
type HeaderIndices (line 1537) | struct HeaderIndices {
function record_header_indices (line 1542) | fn record_header_indices(
function title_case (line 1569) | fn title_case(dst: &mut Vec<u8>, name: &[u8]) {
function write_headers_title_case (line 1583) | pub(crate) fn write_headers_title_case(headers: &HeaderMap, dst: &mut Ve...
function write_headers (line 1592) | pub(crate) fn write_headers(headers: &HeaderMap, dst: &mut Vec<u8>) {
function write_headers_original_case (line 1603) | fn write_headers_original_case(
type FastWrite (line 1639) | struct FastWrite<'a>(&'a mut Vec<u8>);
function write_str (line 1644) | fn write_str(&mut self, s: &str) -> fmt::Result {
function write_fmt (line 1650) | fn write_fmt(&mut self, args: fmt::Arguments<'_>) -> fmt::Result {
function extend (line 1656) | fn extend(dst: &mut Vec<u8>, data: &[u8]) {
function test_parse_request (line 1668) | fn test_parse_request() {
function test_parse_response (line 1699) | fn test_parse_response() {
function test_parse_request_errors (line 1724) | fn test_parse_request_errors() {
constant H09_RESPONSE (line 1741) | const H09_RESPONSE: &str = "Baguettes are super delicious, don't you agr...
function test_parse_response_h09_allowed (line 1744) | fn test_parse_response_h09_allowed() {
function test_parse_response_h09_rejected (line 1767) | fn test_parse_response_h09_rejected() {
constant RESPONSE_WITH_WHITESPACE_BETWEEN_HEADER_NAME_AND_COLON (line 1786) | const RESPONSE_WITH_WHITESPACE_BETWEEN_HEADER_NAME_AND_COLON: &str =
function test_parse_allow_response_with_spaces_before_colons (line 1790) | fn test_parse_allow_response_with_spaces_before_colons() {
function test_parse_reject_response_with_spaces_before_colons (line 1818) | fn test_parse_reject_response_with_spaces_before_colons() {
constant REQUEST_WITH_MULTIPLE_SPACES_IN_REQUEST_LINE (line 1836) | const REQUEST_WITH_MULTIPLE_SPACES_IN_REQUEST_LINE: &str =
function test_parse_allow_request_with_multiple_spaces_in_request_line (line 1841) | fn test_parse_allow_request_with_multiple_spaces_in_request_line() {
function test_parse_reject_request_with_multiple_spaces_in_request_line (line 1873) | fn test_parse_reject_request_with_multiple_spaces_in_request_line() {
function test_parse_preserve_header_case_in_request (line 1893) | fn test_parse_preserve_header_case_in_request() {
function test_decoder_request (line 1930) | fn test_decoder_request() {
function test_decoder_response (line 2177) | fn test_decoder_response() {
function test_client_obs_fold_line (line 2506) | fn test_client_obs_fold_line() {
function test_client_request_encode_title_case (line 2523) | fn test_client_request_encode_title_case() {
function test_client_request_encode_orig_case (line 2554) | fn test_client_request_encode_orig_case() {
function test_client_request_encode_orig_and_title_case (line 2591) | fn test_client_request_encode_orig_and_title_case() {
function test_server_encode_connect_method (line 2630) | fn test_server_encode_connect_method() {
function test_server_response_encode_title_case (line 2652) | fn test_server_response_encode_title_case() {
function test_server_response_encode_orig_case (line 2686) | fn test_server_response_encode_orig_case() {
function test_server_response_encode_orig_and_title_case (line 2722) | fn test_server_response_encode_orig_and_title_case() {
function test_disabled_date_header (line 2759) | fn test_disabled_date_header() {
function parse_header_htabs (line 2794) | fn parse_header_htabs() {
function parse_too_large_headers (line 2819) | fn parse_too_large_headers() {
function test_is_complete_fast (line 2948) | fn test_is_complete_fast() {
function test_write_headers_orig_case_empty_value (line 2970) | fn test_write_headers_orig_case_empty_value() {
function test_write_headers_orig_case_multiple_entries (line 2987) | fn test_write_headers_orig_case_multiple_entries() {
function bench_parse_incoming (line 3008) | fn bench_parse_incoming(b: &mut Bencher) {
function bench_parse_short (line 3070) | fn bench_parse_short(b: &mut Bencher) {
function bench_server_encode_headers_preset (line 3111) | fn bench_server_encode_headers_preset(b: &mut Bencher) {
function bench_server_encode_no_headers (line 3145) | fn bench_server_encode_no_headers(b: &mut Bencher) {
FILE: src/proto/h2/client.rs
type ClientRx (line 35) | type ClientRx<B> = crate::client::dispatch::Receiver<Request<B>, Respons...
type ConnDropRef (line 39) | type ConnDropRef = mpsc::Sender<Infallible>;
type ConnEof (line 43) | type ConnEof = oneshot::Receiver<Infallible>;
constant DEFAULT_CONN_WINDOW (line 48) | const DEFAULT_CONN_WINDOW: u32 = 1024 * 1024 * 5;
constant DEFAULT_STREAM_WINDOW (line 49) | const DEFAULT_STREAM_WINDOW: u32 = 1024 * 1024 * 2;
constant DEFAULT_MAX_FRAME_SIZE (line 50) | const DEFAULT_MAX_FRAME_SIZE: u32 = 1024 * 16;
constant DEFAULT_MAX_SEND_BUF_SIZE (line 51) | const DEFAULT_MAX_SEND_BUF_SIZE: usize = 1024 * 1024;
constant DEFAULT_MAX_HEADER_LIST_SIZE (line 52) | const DEFAULT_MAX_HEADER_LIST_SIZE: u32 = 1024 * 16;
constant DEFAULT_INITIAL_MAX_SEND_STREAMS (line 61) | const DEFAULT_INITIAL_MAX_SEND_STREAMS: usize = 100;
type Config (line 64) | pub(crate) struct Config {
method default (line 83) | fn default() -> Config {
function new_builder (line 104) | fn new_builder(config: &Config) -> Builder {
function new_ping_config (line 132) | fn new_ping_config(config: &Config) -> ping::Config {
function handshake (line 145) | pub(crate) async fn handshake<T, B, E>(
function new (line 220) | fn new(ponger: Ponger, conn: Connection<Compat<T>, SendBuf<<B as Body>::...
type Output (line 230) | type Output = Result<(), h2::Error>;
method poll (line 232) | fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
type Output (line 270) | type Output = Result<(), ()>;
method poll (line 272) | fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
method is_terminated (line 293) | fn is_terminated(&self) -> bool {
function new (line 320) | fn new(
type Output (line 338) | type Output = ();
method poll (line 340) | fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
type Output (line 393) | type Output = ();
method poll (line 395) | fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> std::task::Poll<S...
type FutCtx (line 406) | struct FutCtx<B>
type ClientTask (line 420) | pub(crate) struct ClientTask<B, E, T>
function is_extended_connect_protocol_enabled (line 442) | pub(crate) fn is_extended_connect_protocol_enabled(&self) -> bool {
type Output (line 466) | type Output = ();
method poll (line 468) | fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> std::task::Poll<S...
function poll_pipe (line 494) | fn poll_pipe(&mut self, f: FutCtx<B>, cx: &mut Context<'_>) {
type Output (line 563) | type Output = Result<Response<crate::body::Incoming>, (crate::Error, Opt...
method poll (line 565) | fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Ou...
type Output (line 628) | type Output = crate::Result<Dispatched>;
method poll (line 630) | fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Ou...
FILE: src/proto/h2/mod.rs
constant SPEC_WINDOW_SIZE (line 30) | pub(crate) const SPEC_WINDOW_SIZE: u32 = 65_535;
function strip_connection_headers (line 43) | fn strip_connection_headers(headers: &mut HeaderMap, is_request: bool) {
function new (line 100) | fn new(stream: S, tx: SendStream<SendBuf<S::Data>>) -> PipeToSendStream<...
type Output (line 114) | type Output = crate::Result<()>;
method poll (line 116) | fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
type SendStreamExt (line 192) | trait SendStreamExt {
method on_user_err (line 193) | fn on_user_err<E>(&mut self, err: E) -> crate::Error
method send_eos_frame (line 196) | fn send_eos_frame(&mut self) -> crate::Result<()>;
method on_user_err (line 200) | fn on_user_err<E>(&mut self, err: E) -> crate::Error
method send_eos_frame (line 210) | fn send_eos_frame(&mut self) -> crate::Result<()> {
type SendBuf (line 218) | enum SendBuf<B> {
method remaining (line 226) | fn remaining(&self) -> usize {
method chunk (line 235) | fn chunk(&self) -> &[u8] {
method advance (line 244) | fn advance(&mut self, cnt: usize) {
method chunks_vectored (line 252) | fn chunks_vectored<'a>(&'a self, dst: &mut [IoSlice<'a>]) -> usize {
FILE: src/proto/h2/ping.rs
type WindowSize (line 34) | type WindowSize = u32;
function disabled (line 36) | pub(super) fn disabled() -> Recorder {
function channel (line 40) | pub(super) fn channel(ping_pong: PingPong, config: Config, timer: Time) ...
type Config (line 96) | pub(super) struct Config {
method is_enabled (line 184) | pub(super) fn is_enabled(&self) -> bool {
type Recorder (line 108) | pub(crate) struct Recorder {
method record_data (line 192) | pub(crate) fn record_data(&self, len: usize) {
method record_non_data (line 226) | pub(crate) fn record_non_data(&self) {
method for_stream (line 241) | pub(super) fn for_stream(self, stream: &h2::RecvStream) -> Self {
method ensure_not_timed_out (line 249) | pub(super) fn ensure_not_timed_out(&self) -> crate::Result<()> {
type Ponger (line 112) | pub(super) struct Ponger {
method poll (line 265) | pub(super) fn poll(&mut self, cx: &mut task::Context<'_>) -> Poll<Pong...
method is_idle (line 325) | fn is_idle(&self) -> bool {
type Shared (line 118) | struct Shared {
method send_ping (line 333) | fn send_ping(&mut self) {
method is_ping_sent (line 345) | fn is_ping_sent(&self) -> bool {
method update_last_read_at (line 349) | fn update_last_read_at(&mut self) {
method last_read_at (line 355) | fn last_read_at(&self) -> Instant {
type Bdp (line 139) | struct Bdp {
method calculate (line 366) | fn calculate(&mut self, bytes: usize, rtt: Duration) -> Option<WindowS...
method stabilize_delay (line 410) | fn stabilize_delay(&mut self) {
type KeepAlive (line 154) | struct KeepAlive {
method maybe_schedule (line 431) | fn maybe_schedule(&mut self, is_idle: bool, shared: &Shared) {
method schedule (line 450) | fn schedule(&mut self, shared: &Shared) {
method maybe_ping (line 456) | fn maybe_ping(&mut self, cx: &mut task::Context<'_>, is_idle: bool, sh...
method maybe_timeout (line 482) | fn maybe_timeout(&mut self, cx: &mut task::Context<'_>) -> Result<(), ...
type KeepAliveState (line 167) | enum KeepAliveState {
type Ponged (line 173) | pub(super) enum Ponged {
type KeepAliveTimedOut (line 179) | pub(super) struct KeepAliveTimedOut;
method crate_error (line 499) | pub(super) fn crate_error(self) -> crate::Error {
method fmt (line 505) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
method source (line 511) | fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
constant BDP_LIMIT (line 363) | const BDP_LIMIT: usize = 1024 * 1024 * 16;
function seconds (line 422) | fn seconds(dur: Duration) -> f64 {
FILE: src/proto/h2/server.rs
constant DEFAULT_CONN_WINDOW (line 36) | const DEFAULT_CONN_WINDOW: u32 = 1024 * 1024;
constant DEFAULT_STREAM_WINDOW (line 37) | const DEFAULT_STREAM_WINDOW: u32 = 1024 * 1024;
constant DEFAULT_MAX_FRAME_SIZE (line 38) | const DEFAULT_MAX_FRAME_SIZE: u32 = 1024 * 16;
constant DEFAULT_MAX_SEND_BUF_SIZE (line 39) | const DEFAULT_MAX_SEND_BUF_SIZE: usize = 1024 * 400;
constant DEFAULT_SETTINGS_MAX_HEADER_LIST_SIZE (line 40) | const DEFAULT_SETTINGS_MAX_HEADER_LIST_SIZE: u32 = 1024 * 16;
constant DEFAULT_MAX_LOCAL_ERROR_RESET_STREAMS (line 41) | const DEFAULT_MAX_LOCAL_ERROR_RESET_STREAMS: usize = 1024;
type Config (line 44) | pub(crate) struct Config {
method default (line 61) | fn default() -> Config {
type State (line 95) | enum State<T, B>
type Serving (line 106) | struct Serving<T, B>
function new (line 124) | pub(crate) fn new(
function graceful_shutdown (line 178) | pub(crate) fn graceful_shutdown(&mut self) {
type Output (line 201) | type Output = crate::Result<Dispatched>;
method poll (line 203) | fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Ou...
function poll_server (line 244) | fn poll_server<S, E>(
function poll_ping (line 341) | fn poll_ping(&mut self, cx: &mut Context<'_>) {
type ConnectParts (line 390) | struct ConnectParts {
function new (line 400) | fn new(
function poll2 (line 438) | fn poll2(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<crate::...
type Output (line 541) | type Output = ();
method poll (line 543) | fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
FILE: src/proto/h2/upgrade.rs
function pair (line 16) | pub(super) fn pair<B>(
type H2Upgraded (line 39) | pub(super) struct H2Upgraded {
type UpgradedSendStreamBridge (line 46) | struct UpgradedSendStreamBridge {
function tick (line 68) | fn tick(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result<(), c...
type Output (line 140) | type Output = ();
method poll (line 142) | fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Ou...
method poll_read (line 159) | fn poll_read(
method poll_write (line 196) | fn poll_write(
method poll_flush (line 238) | fn poll_flush(
method poll_shutdown (line 257) | fn poll_shutdown(
function io_error (line 270) | fn io_error(e: crate::Error) -> std::io::Error {
function h2_to_io_error (line 274) | fn h2_to_io_error(e: h2::Error) -> std::io::Error {
FILE: src/proto/mod.rs
type MessageHead (line 22) | pub(crate) struct MessageHead<S> {
type RequestHead (line 35) | pub(crate) type RequestHead = MessageHead<RequestLine>;
type RequestLine (line 39) | pub(crate) struct RequestLine(pub(crate) http::Method, pub(crate) http::...
type ResponseHead (line 43) | pub(crate) type ResponseHead = MessageHead<http::StatusCode>;
type BodyLength (line 47) | pub(crate) enum BodyLength {
type Dispatched (line 55) | pub(crate) enum Dispatched {
function into_response (line 65) | fn into_response<B>(self, body: B) -> http::Response<B> {
FILE: src/rt/bounds.rs
type Http2UpgradedExec (line 19) | pub trait Http2UpgradedExec<B> {
method execute_upgrade (line 21) | fn execute_upgrade(&self, fut: UpgradedSendStreamTask<B>);
method execute_upgrade (line 29) | fn execute_upgrade(&self, fut: UpgradedSendStreamTask<B>) {
type Http2ClientConnExec (line 51) | pub trait Http2ClientConnExec<B, T>:
method execute_h2_future (line 59) | fn execute_h2_future(&mut self, future: H2ClientFuture<B, T, Self>);
method execute_h2_future (line 72) | fn execute_h2_future(&mut self, future: H2ClientFuture<B, T, E>) {
type Sealed (line 90) | pub trait Sealed<X> {}
type Http2ServerConnExec (line 109) | pub trait Http2ServerConnExec<F, B: Body>:
method execute_h2stream (line 113) | fn execute_h2stream(&mut self, fut: H2Stream<F, B, Self>);
method execute_h2stream (line 125) | fn execute_h2stream(&mut self, fut: H2Stream<F, B, E>) {
type Sealed (line 141) | pub trait Sealed<T> {}
FILE: src/rt/io.rs
type Read (line 74) | pub trait Read {
method poll_read (line 84) | fn poll_read(
method poll_read (line 412) | fn poll_read(
type Write (line 94) | pub trait Write {
method poll_write (line 105) | fn poll_write(
method poll_flush (line 118) | fn poll_flush(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Resu...
method poll_shutdown (line 121) | fn poll_shutdown(
method is_write_vectored (line 130) | fn is_write_vectored(&self) -> bool {
method poll_write_vectored (line 135) | fn poll_write_vectored(
method poll_write (line 469) | fn poll_write(
method poll_write_vectored (line 477) | fn poll_write_vectored(
method is_write_vectored (line 485) | fn is_write_vectored(&self) -> bool {
method poll_flush (line 489) | fn poll_flush(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<std:...
method poll_shutdown (line 493) | fn poll_shutdown(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<s...
type ReadBuf (line 167) | pub struct ReadBuf<'a> {
type ReadBufCursor (line 230) | pub struct ReadBufCursor<'a> {
function new (line 237) | pub fn new(raw: &'data mut [u8]) -> Self {
function uninit (line 249) | pub fn uninit(raw: &'data mut [MaybeUninit<u8>]) -> Self {
function filled (line 259) | pub fn filled(&self) -> &[u8] {
function unfilled (line 266) | pub fn unfilled<'cursor>(&'cursor mut self) -> ReadBufCursor<'cursor> {
function set_init (line 280) | pub(crate) unsafe fn set_init(&mut self, n: usize) {
function set_filled (line 286) | pub(crate) unsafe fn set_filled(&mut self, n: usize) {
function len (line 292) | pub(crate) fn len(&self) -> usize {
function init_len (line 298) | pub(crate) fn init_len(&self) -> usize {
function remaining (line 303) | fn remaining(&self) -> usize {
function capacity (line 308) | fn capacity(&self) -> usize {
function fmt (line 314) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
function as_mut (line 331) | pub unsafe fn as_mut(&mut self) -> &mut [MaybeUninit<u8>] {
function advance (line 341) | pub unsafe fn advance(&mut self, n: usize) {
function remaining (line 351) | pub fn remaining(&self) -> usize {
function put_slice (line 362) | pub fn put_slice(&mut self, src: &[u8]) {
function pin_as_deref_mut (line 500) | fn pin_as_deref_mut<P: DerefMut>(pin: Pin<&mut Pin<P>>) -> Pin<&mut P::T...
FILE: src/rt/mod.rs
type Executor (line 45) | pub trait Executor<Fut> {
method execute (line 47) | fn execute(&self, fut: Fut);
FILE: src/rt/timer.rs
type Timer (line 70) | pub trait Timer {
method sleep (line 72) | fn sleep(&self, duration: Duration) -> Pin<Box<dyn Sleep>>;
method sleep_until (line 75) | fn sleep_until(&self, deadline: Instant) -> Pin<Box<dyn Sleep>>;
method now (line 80) | fn now(&self) -> Instant {
method reset (line 85) | fn reset(&self, sleep: &mut Pin<Box<dyn Sleep>>, new_deadline: Instant) {
type Sleep (line 91) | pub trait Sleep: Send + Sync + Future<Output = ()> {
method __type_id (line 94) | fn __type_id(&self, _: private::Sealed) -> TypeId
function is (line 106) | pub fn is<T>(&self) -> bool
function downcast_mut_pin (line 114) | pub fn downcast_mut_pin<T>(self: Pin<&mut Self>) -> Option<Pin<&mut T>>
type Sealed (line 133) | pub struct Sealed {}
FILE: src/server/conn/http1.rs
type Http1Dispatcher (line 24) | type Http1Dispatcher<T, B, S> = proto::h1::Dispatcher<
type Builder (line 71) | pub struct Builder {
method new (line 233) | pub fn new() -> Self {
method half_close (line 257) | pub fn half_close(&mut self, val: bool) -> &mut Self {
method keep_alive (line 265) | pub fn keep_alive(&mut self, val: bool) -> &mut Self {
method title_case_headers (line 274) | pub fn title_case_headers(&mut self, enabled: bool) -> &mut Self {
method allow_multiple_spaces_in_request_line_delimiters (line 282) | pub fn allow_multiple_spaces_in_request_line_delimiters(&mut self, ena...
method ignore_invalid_headers (line 295) | pub fn ignore_invalid_headers(&mut self, enabled: bool) -> &mut Builder {
method preserve_header_case (line 312) | pub fn preserve_header_case(&mut self, enabled: bool) -> &mut Self {
method max_headers (line 330) | pub fn max_headers(&mut self, val: usize) -> &mut Self {
method header_read_timeout (line 344) | pub fn header_read_timeout(&mut self, read_timeout: impl Into<Option<D...
method writev (line 361) | pub fn writev(&mut self, val: bool) -> &mut Self {
method max_buf_size (line 373) | pub fn max_buf_size(&mut self, max: usize) -> &mut Self {
method auto_date_header (line 387) | pub fn auto_date_header(&mut self, enabled: bool) -> &mut Self {
method pipeline_flush (line 397) | pub fn pipeline_flush(&mut self, enabled: bool) -> &mut Self {
method timer (line 403) | pub fn timer<M>(&mut self, timer: M) -> &mut Self
method serve_connection (line 444) | pub fn serve_connection<I, S>(&self, io: I, service: S) -> Connection<...
type Parts (line 92) | pub struct Parts<T, S> {
function fmt (line 114) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
function graceful_shutdown (line 137) | pub fn graceful_shutdown(mut self: Pin<&mut Self>) {
function into_parts (line 150) | pub fn into_parts(self) -> Parts<I, S> {
function poll_without_shutdown (line 166) | pub fn poll_without_shutdown(&mut self, cx: &mut Context<'_>) -> Poll<cr...
function without_shutdown (line 180) | pub fn without_shutdown(self) -> impl Future<Output = crate::Result<Part...
function with_upgrades (line 191) | pub fn with_upgrades(self) -> UpgradeableConnection<I, S>
type Output (line 207) | type Output = crate::Result<()>;
method poll (line 209) | fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Ou...
type UpgradeableConnection (line 499) | pub struct UpgradeableConnection<T, S>
function graceful_shutdown (line 518) | pub fn graceful_shutdown(mut self: Pin<&mut Self>) {
type Output (line 535) | type Output = crate::Result<()>;
method poll (line 537) | fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Ou...
FILE: src/server/conn/http2.rs
type Builder (line 42) | pub struct Builder<E> {
function fmt (line 54) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
function graceful_shutdown (line 78) | pub fn graceful_shutdown(mut self: Pin<&mut Self>) {
type Output (line 92) | type Output = crate::Result<()>;
method poll (line 94) | fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Ou...
function new (line 115) | pub fn new(exec: E) -> Self {
function max_pending_accept_reset_streams (line 129) | pub fn max_pending_accept_reset_streams(&mut self, max: impl Into<Option...
function max_local_error_reset_streams (line 144) | pub fn max_local_error_reset_streams(&mut self, max: impl Into<Option<us...
function initial_stream_window_size (line 157) | pub fn initial_stream_window_size(&mut self, sz: impl Into<Option<u32>>)...
function initial_connection_window_size (line 170) | pub fn initial_connection_window_size(&mut self, sz: impl Into<Option<u3...
function adaptive_window (line 183) | pub fn adaptive_window(&mut self, enabled: bool) -> &mut Self {
function max_frame_size (line 199) | pub fn max_frame_size(&mut self, sz: impl Into<Option<u32>>) -> &mut Self {
function max_concurrent_streams (line 215) | pub fn max_concurrent_streams(&mut self, max: impl Into<Option<u32>>) ->...
function keep_alive_interval (line 226) | pub fn keep_alive_interval(&mut self, interval: impl Into<Option<Duratio...
function keep_alive_timeout (line 237) | pub fn keep_alive_timeout(&mut self, timeout: Duration) -> &mut Self {
function max_send_buf_size (line 249) | pub fn max_send_buf_size(&mut self, max: usize) -> &mut Self {
function enable_connect_protocol (line 258) | pub fn enable_connect_protocol(&mut self) -> &mut Self {
function max_header_list_size (line 266) | pub fn max_header_list_size(&mut self, max: u32) -> &mut Self {
function timer (line 272) | pub fn timer<M>(&mut self, timer: M) -> &mut Self
function auto_date_header (line 285) | pub fn auto_date_header(&mut self, enabled: bool) -> &mut Self {
function serve_connection (line 294) | pub fn serve_connection<S, I, Bd>(&self, io: I, service: S) -> Connectio...
FILE: src/service/http.rs
type HttpService (line 20) | pub trait HttpService<ReqBody>: sealed::Sealed<ReqBody> {
method call (line 37) | fn call(&mut self, req: Request<ReqBody>) -> Self::Future;
type ResBody (line 46) | type ResBody = B2;
type Error (line 48) | type Error = T::Error;
type Future (line 49) | type Future = T::Future;
method call (line 51) | fn call(&mut self, req: Request<B1>) -> Self::Future {
type Sealed (line 64) | pub trait Sealed<T> {}
FILE: src/service/service.rs
type Service (line 32) | pub trait Service<Request> {
method call (line 56) | fn call(&self, req: Request) -> Self::Future;
type Response (line 60) | type Response = S::Response;
type Error (line 61) | type Error = S::Error;
type Future (line 62) | type Future = S::Future;
function call (line 65) | fn call(&self, req: Request) -> Self::Future {
type Response (line 71) | type Response = S::Response;
type Error (line 72) | type Error = S::Error;
type Future (line 73) | type Future = S::Future;
function call (line 76) | fn call(&self, req: Request) -> Self::Future {
type Response (line 82) | type Response = S::Response;
type Error (line 83) | type Error = S::Error;
type Future (line 84) | type Future = S::Future;
function call (line 87) | fn call(&self, req: Request) -> Self::Future {
type Response (line 93) | type Response = S::Response;
type Error (line 94) | type Error = S::Error;
type Future (line 95) | type Future = S::Future;
function call (line 98) | fn call(&self, req: Request) -> Self::Future {
type Response (line 104) | type Response = S::Response;
type Error (line 105) | type Error = S::Error;
type Future (line 106) | type Future = S::Future;
function call (line 109) | fn call(&self, req: Request) -> Self::Future {
FILE: src/service/util.rs
function service_fn (line 30) | pub fn service_fn<F, R, S>(f: F) -> ServiceFn<F, R>
type ServiceFn (line 42) | pub struct ServiceFn<F, R> {
type Response (line 55) | type Response = crate::Response<ResBody>;
type Error (line 56) | type Error = E;
type Future (line 57) | type Future = Ret;
function call (line 59) | fn call(&self, req: Request<ReqBody>) -> Self::Future {
function fmt (line 65) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
method clone (line 74) | fn clone(&self) -> Self {
FILE: src/upgrade.rs
type Upgraded (line 65) | pub struct Upgraded {
method new (line 138) | pub(super) fn new<T>(io: T, read_buf: Bytes) -> Self
method downcast (line 151) | pub fn downcast<T: Read + Write + Unpin + 'static>(self) -> Result<Par...
method fmt (line 206) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
type OnUpgrade (line 73) | pub struct OnUpgrade {
method none (line 214) | pub(super) fn none() -> Self {
method is_none (line 219) | pub(super) fn is_none(&self) -> bool {
method fmt (line 244) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
type Parts (line 83) | pub struct Parts<T> {
function on (line 105) | pub fn on<T: sealed::CanUpgrade>(msg: T) -> OnUpgrade {
type Pending (line 113) | pub(super) struct Pending {
method fulfill (line 256) | pub(super) fn fulfill(self, upgraded: Upgraded) {
method manual (line 264) | pub(super) fn manual(self) {
function pending (line 121) | pub(super) fn pending() -> (Pending, OnUpgrade) {
method poll_read (line 166) | fn poll_read(
method poll_write (line 176) | fn poll_write(
method poll_write_vectored (line 184) | fn poll_write_vectored(
method poll_flush (line 192) | fn poll_flush(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<io...
method poll_shutdown (line 196) | fn poll_shutdown(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll...
method is_write_vectored (line 200) | fn is_write_vectored(&self) -> bool {
type Output (line 225) | type Output = Result<Upgraded, crate::Error>;
method poll (line 227) | fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
type UpgradeExpected (line 278) | struct UpgradeExpected;
method fmt (line 281) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
type Io (line 290) | pub(super) trait Io: Read + Write + Unpin + 'static {
method __hyper_type_id (line 291) | fn __hyper_type_id(&self) -> TypeId {
function __hyper_is (line 299) | fn __hyper_is<T: Io>(&self) -> bool {
function __hyper_downcast (line 304) | fn __hyper_downcast<T: Io>(self: Box<Self>) -> Result<Box<T>, Box<Self>> {
type CanUpgrade (line 320) | pub trait CanUpgrade {
method on_upgrade (line 321) | fn on_upgrade(self) -> OnUpgrade;
method on_upgrade (line 325) | fn on_upgrade(mut self) -> OnUpgrade {
method on_upgrade (line 333) | fn on_upgrade(self) -> OnUpgrade {
method on_upgrade (line 341) | fn on_upgrade(mut self) -> OnUpgrade {
method on_upgrade (line 349) | fn on_upgrade(self) -> OnUpgrade {
function upgraded_downcast (line 366) | fn upgraded_downcast() {
type Mock (line 377) | struct Mock;
method poll_read (line 380) | fn poll_read(
method poll_write (line 390) | fn poll_write(
method poll_flush (line 399) | fn poll_flush(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll<io::R...
method poll_shutdown (line 403) | fn poll_shutdown(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll<io...
FILE: tests/client.rs
function s (line 26) | fn s(buf: &[u8]) -> &str {
function concat (line 30) | async fn concat<B>(b: B) -> Result<Bytes, B::Error>
function concat_with_trailers (line 37) | async fn concat_with_trailers<B>(b: B) -> Result<(Bytes, Option<HeaderMa...
function tcp_connect (line 48) | async fn tcp_connect(addr: &SocketAddr) -> std::io::Result<TokioIo<TcpSt...
type HttpInfo (line 53) | struct HttpInfo {
type Error (line 58) | enum Error {
method is_incomplete_message (line 66) | fn is_incomplete_message(&self) -> bool {
method is_parse (line 73) | fn is_parse(&self) -> bool {
method is_parse_too_large (line 80) | fn is_parse_too_large(&self) -> bool {
method is_parse_status (line 87) | fn is_parse_status(&self) -> bool {
method fmt (line 96) | fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
method from (line 107) | fn from(err: std::io::Error) -> Self {
method from (line 113) | fn from(err: hyper::Error) -> Self {
function setup_logger (line 1587) | fn setup_logger() {
function setup_tk_test_server (line 1591) | async fn setup_tk_test_server() -> (TkTcpListener, SocketAddr) {
function setup_std_test_server (line 1600) | fn setup_std_test_server() -> (TcpListener, SocketAddr) {
function setup_duplex_test_server (line 1607) | fn setup_duplex_test_server() -> (DuplexStream, DuplexStream, SocketAddr) {
function get (line 1623) | async fn get() {
function get_custom_reason_phrase (line 1663) | async fn get_custom_reason_phrase() {
function incoming_content_length (line 1715) | fn incoming_content_length() {
function aborted_body_isnt_completed (line 1761) | fn aborted_body_isnt_completed() {
function uri_absolute_form (line 1817) | fn uri_absolute_form() {
function http1_conn_coerces_http2_request (line 1862) | fn http1_conn_coerces_http2_request() {
function pipeline (line 1907) | fn pipeline() {
function upgrade (line 1959) | fn upgrade() {
function connect_method (line 2044) | fn connect_method() {
function client_100_then_http09 (line 2134) | async fn client_100_then_http09() {
function client_on_informational_ext (line 2191) | async fn client_on_informational_ext() {
function test_try_send_request (line 2231) | async fn test_try_send_request() {
function http2_detect_conn_eof (line 2314) | async fn http2_detect_conn_eof() {
function http2_connect_detect_close (line 2395) | async fn http2_connect_detect_close() {
function http2_keep_alive_detects_unresponsive_server (line 2469) | async fn http2_keep_alive_detects_unresponsive_server() {
function http2_keep_alive_not_while_idle (line 2500) | async fn http2_keep_alive_not_while_idle() {
function http2_keep_alive_closes_open_streams (line 2534) | async fn http2_keep_alive_closes_open_streams() {
function http2_keep_alive_with_responsive_server (line 2574) | async fn http2_keep_alive_with_responsive_server() {
function http2_responds_before_consuming_request_body (line 2629) | async fn http2_responds_before_consuming_request_body() {
function h2_connect (line 2685) | async fn h2_connect() {
function h2_connect_rejected (line 2740) | async fn h2_connect_rejected() {
function test_body_panics (line 2790) | async fn test_body_panics() {
function drain_til_eof (line 2821) | async fn drain_til_eof<T: tokio::io::AsyncRead + Unpin>(mut sock: T) -> ...
type DebugStream (line 2832) | struct DebugStream {
method poll_shutdown (line 2838) | fn poll_shutdown(
method poll_flush (line 2846) | fn poll_flush(
method poll_write (line 2853) | fn poll_write(
method poll_read (line 2863) | fn poll_read(
type FutureHyperExt (line 2873) | trait FutureHyperExt: TryFuture {
method expect (line 2874) | fn expect(self, msg: &'static str) -> Pin<Box<dyn Future<Output = Self...
method expect (line 2882) | fn expect(self, msg: &'static str) -> Pin<Box<dyn Future<Output = Self...
FILE: tests/server.rs
function get_should_ignore_body (line 38) | fn get_should_ignore_body() {
function get_with_body (line 59) | fn get_with_body() {
type TestCase (line 81) | struct TestCase {
type Bd (line 89) | enum Bd {
function run_test (line 94) | fn run_test(case: TestCase) {
function fixed_response_known (line 181) | fn fixed_response_known() {
function fixed_response_unknown (line 192) | fn fixed_response_unknown() {
function fixed_response_known_empty (line 203) | fn fixed_response_known_empty() {
function chunked_response_known (line 214) | fn chunked_response_known() {
function chunked_response_known_empty (line 226) | fn chunked_response_known_empty() {
function chunked_response_unknown (line 237) | fn chunked_response_unknown() {
function te_response_adds_chunked (line 248) | fn te_response_adds_chunked() {
function chunked_response_trumps_length (line 263) | fn chunked_response_trumps_length() {
function auto_response_with_unknown_length (line 278) | fn auto_response_with_unknown_length() {
function auto_response_with_known_length (line 290) | fn auto_response_with_known_length() {
function auto_response_known_empty (line 302) | fn auto_response_known_empty() {
function http10_auto_response_with_unknown_length (line 314) | fn http10_auto_response_with_unknown_length() {
function http10_chunked_response (line 326) | fn http10_chunked_response() {
function http2_auto_response_with_known_length (line 339) | async fn http2_auto_response_with_known_length() {
function http2_auto_response_with_conflicting_lengths (line 355) | async fn http2_auto_response_with_conflicting_lengths() {
function http2_implicit_empty_size_hint (line 374) | async fn http2_implicit_empty_size_hint() {
function get_response_custom_reason_phrase (line 391) | fn get_response_custom_reason_phrase() {
function get_chunked_response_with_ka (line 418) | fn get_chunked_response_with_ka() {
function post_with_content_length_body (line 460) | fn post_with_content_length_body() {
function post_with_invalid_prefix_content_length (line 478) | fn post_with_invalid_prefix_content_length() {
function post_with_chunked_body (line 498) | fn post_with_chunked_body() {
function post_with_chunked_overflow (line 524) | fn post_with_chunked_overflow() {
function post_with_incomplete_body (line 554) | fn post_with_incomplete_body() {
function post_with_chunked_missing_final_digit (line 576) | fn post_with_chunked_missing_final_digit() {
function head_response_can_send_content_length (line 599) | fn head_response_can_send_content_length() {
function head_response_doesnt_send_body (line 628) | fn head_response_doesnt_send_body() {
function response_does_not_set_chunked_if_body_not_allowed (line 658) | fn response_does_not_set_chunked_if_body_not_allowed() {
function keep_alive (line 691) | fn keep_alive() {
function http_10_keep_alive (line 731) | fn http_10_keep_alive() {
function http_10_close_on_no_ka (line 780) | fn http_10_close_on_no_ka() {
function disable_keep_alive (line 818) | fn disable_keep_alive() {
function header_connection_close (line 844) | fn header_connection_close() {
function expect_continue_sends_100 (line 877) | fn expect_continue_sends_100() {
function expect_continue_accepts_upper_cased_expectation (line 910) | fn expect_continue_accepts_upper_cased_expectation() {
function expect_continue_but_http_10_is_ignored (line 943) | fn expect_continue_but_http_10_is_ignored() {
function expect_continue_but_no_body_is_ignored (line 976) | fn expect_continue_but_no_body_is_ignored() {
function setup_tcp_listener (line 1000) | fn setup_tcp_listener() -> (TcpListener, SocketAddr) {
function setup_duplex_test_server (line 1007) | fn setup_duplex_test_server() -> (DuplexStream, DuplexStream, SocketAddr) {
function expect_continue_waits_for_body_poll (line 1023) | async fn expect_continue_waits_for_body_poll() {
function pipeline_disabled (line 1072) | fn pipeline_disabled() {
function pipeline_enabled (line 1116) | fn pipeline_enabled() {
function http_10_request_receives_http_10_response (line 1169) | fn http_10_request_receives_http_10_response() {
function http_11_uri_too_long (line 1189) | fn http_11_uri_too_long() {
function disable_keep_alive_mid_request (line 1206) | async fn disable_keep_alive_mid_request() {
function disable_keep_alive_post_request (line 1260) | async fn disable_keep_alive_post_request() {
function http1_graceful_shutdown_after_upgrade (line 1309) | async fn http1_graceful_shutdown_after_upgrade() {
function empty_parse_eof_does_not_return_error (line 1370) | async fn empty_parse_eof_does_not_return_error() {
function nonempty_parse_eof_returns_error (line 1385) | async fn nonempty_parse_eof_returns_error() {
function http1_allow_half_close (line 1403) | async fn http1_allow_half_close() {
function disconnect_after_reading_request_before_responding (line 1437) | async fn disconnect_after_reading_request_before_responding() {
function returning_1xx_response_is_error (line 1464) | async fn returning_1xx_response_is_error() {
function header_name_too_long (line 1496) | fn header_name_too_long() {
function header_read_timeout_slow_writes (line 1513) | async fn header_read_timeout_slow_writes() {
function header_read_timeout_starts_immediately (line 1560) | async fn header_read_timeout_starts_immediately() {
function header_read_timeout_slow_writes_multiple_requests (line 1581) | async fn header_read_timeout_slow_writes_multiple_requests() {
function header_read_timeout_as_idle_timeout (line 1657) | async fn header_read_timeout_as_idle_timeout() {
function upgrades (line 1701) | async fn upgrades() {
function http_connect (line 1757) | async fn http_connect() {
function upgrades_new (line 1810) | async fn upgrades_new() {
function upgrades_ignored (line 1879) | async fn upgrades_ignored() {
function http_connect_new (line 1922) | async fn http_connect_new() {
function h2_connect (line 1985) | async fn h2_connect() {
function h2_connect_multiplex (line 2051) | async fn h2_connect_multiplex() {
function h2_connect_large_body (line 2161) | async fn h2_connect_large_body() {
function h2_connect_empty_frames (line 2234) | async fn h2_connect_empty_frames() {
function parse_errors_send_4xx_response (line 2304) | async fn parse_errors_send_4xx_response() {
function illegal_request_length_returns_400_response (line 2326) | async fn illegal_request_length_returns_400_response() {
function max_buf_size_panic_too_small (line 2351) | fn max_buf_size_panic_too_small() {
function max_buf_size_no_panic (line 2358) | fn max_buf_size_no_panic() {
function max_buf_size (line 2365) | async fn max_buf_size() {
function graceful_shutdown_before_first_request_no_block (line 2392) | async fn graceful_shutdown_before_first_request_no_block() {
function streaming_body (line 2417) | fn streaming_body() {
function http1_response_with_http2_version (line 2442) | fn http1_response_with_http2_version() {
function http1_only (line 2459) | fn http1_only() {
function http2_service_error_sends_reset_reason (line 2474) | async fn http2_service_error_sends_reset_reason() {
function http2_body_user_error_sends_reset_reason (line 2502) | fn http2_body_user_error_sends_reset_reason() {
function skips_content_length_for_304_responses (line 2535) | fn skips_content_length_for_304_responses() {
function skips_content_length_and_body_for_304_responses (line 2558) | fn skips_content_length_and_body_for_304_responses() {
function no_implicit_zero_content_length_for_head_responses (line 2587) | fn no_implicit_zero_content_length_for_head_responses() {
function http2_keep_alive_detects_unresponsive_client (line 2607) | async fn http2_keep_alive_detects_unresponsive_client() {
function http2_keep_alive_with_responsive_client (line 2654) | async fn http2_keep_alive_with_responsive_client() {
function http2_check_date_header_disabled (line 2687) | async fn http2_check_date_header_disabled() {
function is_ping_frame (line 2722) | fn is_ping_frame(buf: &[u8]) -> bool {
function assert_ping_frame (line 2726) | fn assert_ping_frame(buf: &[u8], len: usize) {
function write_pong_frame (line 2741) | async fn write_pong_frame(conn: &mut TkTcpStream) {
function http2_keep_alive_count_server_pings (line 2754) | async fn http2_keep_alive_count_server_pings() {
function http1_trailer_send_fields (line 2809) | fn http1_trailer_send_fields() {
function http1_trailer_send_fields_titlecase (line 2854) | fn http1_trailer_send_fields_titlecase() {
function http1_trailer_fields_not_allowed (line 2899) | fn http1_trailer_fields_not_allowed() {
function http1_trailer_recv_fields (line 2942) | fn http1_trailer_recv_fields() {
type Serve (line 2974) | struct Serve {
method addr (line 2984) | fn addr(&self) -> &SocketAddr {
method body (line 2988) | fn body(&self) -> Vec<u8> {
method body_err (line 2992) | fn body_err(&self) -> hyper::Error {
method try_body (line 2996) | fn try_body(&self) -> Result<Vec<u8>, hyper::Error> {
method trailers (line 3011) | fn trailers(&self) -> HeaderMap {
method reply (line 3015) | fn reply(&self) -> ReplyBuilder<'_> {
type BoxError (line 3020) | type BoxError = Box<dyn std::error::Error + Send + Sync>;
type BoxFuture (line 3021) | type BoxFuture = Pin<Box<dyn Future<Output = Result<Response<ReplyBody>,...
type ReplyBuilder (line 3023) | struct ReplyBuilder<'a> {
function status (line 3028) | fn status(self, status: hyper::StatusCode) -> Self {
function reason_phrase (line 3033) | fn reason_phrase(self, reason: &str) -> Self {
function version (line 3044) | fn version(self, version: hyper::Version) -> Self {
function header (line 3053) | fn header<V: AsRef<str>>(self, name: &str, value: V) -> Self {
function body (line 3064) | fn body<T: AsRef<[u8]>>(self, body: T) {
function body_stream (line 3070) | fn body_stream<S>(self, stream: S)
function body_stream_with_trailers (line 3080) | fn body_stream_with_trailers<S>(self, stream: S, trailers: HeaderMap)
function error (line 3094) | fn error<E: Into<BoxError>>(self, err: E) {
method drop (line 3104) | fn drop(&mut self) {
method drop (line 3112) | fn drop(&mut self) {
type TestService (line 3126) | struct TestService {
type Response (line 3153) | type Response = Response<ReplyBody>;
type Error (line 3154) | type Error = BoxError;
type Future (line 3155) | type Future = BoxFuture;
method call (line 3157) | fn call(&self, mut req: Request<IncomingBody>) -> Self::Future {
method build_reply (line 3189) | fn build_reply(replies: spmc::Receiver<Reply>) -> Result<Response<Repl...
type ReplyBody (line 3132) | type ReplyBody = BoxBody<Bytes, BoxError>;
type Reply (line 3135) | enum Reply {
type Msg (line 3146) | enum Msg {
constant HELLO (line 3218) | const HELLO: &str = "hello";
type HelloWorld (line 3220) | struct HelloWorld;
type Response (line 3223) | type Response = Response<Full<Bytes>>;
type Error (line 3224) | type Error = hyper::Error;
type Future (line 3225) | type Future = future::Ready<Result<Self::Response, Self::Error>>;
method call (line 3227) | fn call(&self, _req: Request<IncomingBody>) -> Self::Future {
function unreachable_service (line 3233) | fn unreachable_service() -> impl Service<
function connect (line 3242) | fn connect(addr: &SocketAddr) -> TcpStream {
function connect_async (line 3249) | async fn connect_async(addr: SocketAddr) -> TkTcpStream {
function serve (line 3253) | fn serve() -> Serve {
function serve_opts (line 3257) | fn serve_opts() -> ServeOptions {
type ServeOptions (line 3262) | struct ServeOptions {
method http2 (line 3279) | fn http2(mut self) -> Self {
method keep_alive (line 3284) | fn keep_alive(mut self, enabled: bool) -> Self {
method pipeline (line 3289) | fn pipeline(mut self, enabled: bool) -> Self {
method serve (line 3294) | fn serve(self) -> Serve {
method default (line 3269) | fn default() -> Self {
function s (line 3374) | fn s(buf: &[u8]) -> &str {
function has_header (line 3378) | fn has_header(msg: &str, name: &str) -> bool {
function tcp_bind (line 3384) | fn tcp_bind(addr: &SocketAddr) -> std::io::Result<TcpListener> {
function read_until (line 3390) | fn read_until<R, F>(io: &mut R, func: F) -> io::Result<Vec<u8>>
type DebugStream (line 3415) | struct DebugStream<T, D> {
method read (line 3423) | fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
method write (line 3429) | fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
method flush (line 3433) | fn flush(&mut self) -> io::Result<()> {
method poll_write (line 3439) | fn poll_write(
method poll_flush (line 3447) | fn poll_flush(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Re...
method poll_shutdown (line 3451) | fn poll_shutdown(
method poll_read (line 3460) | fn poll_read(
type Dropped (line 3470) | struct Dropped(Arc<AtomicBool>);
method new (line 3473) | pub fn new() -> Dropped {
method load (line 3477) | pub fn load(&self) -> bool {
method drop (line 3483) | fn drop(&mut self) {
type TestClient (line 3488) | struct TestClient {
method new (line 3493) | fn new() -> Self {
method http2_only (line 3497) | fn http2_only(mut self) -> Self {
method get (line 3502) | async fn get(&self, uri: Uri) -> Result<Response<IncomingBody>, hyper:...
method request (line 3513) | async fn request(
FILE: tests/support/mod.rs
type __CReq (line 253) | pub struct __CReq {
method default (line 261) | fn default() -> __CReq {
type __CRes (line 272) | pub struct __CRes {
type __SReq (line 279) | pub struct __SReq {
method default (line 287) | fn default() -> __SReq {
type __SRes (line 298) | pub struct __SRes {
type __HeadersEq (line 304) | pub type __HeadersEq = Vec<Arc<dyn Fn(&HeaderMap) + Send + Sync>>;
type __TestConfig (line 306) | pub struct __TestConfig {
function runtime (line 318) | pub fn runtime() -> tokio::runtime::Runtime {
function __run_test (line 325) | pub fn __run_test(cfg: __TestConfig) {
function async_test (line 330) | async fn async_test(cfg: __TestConfig) {
type ProxyConfig (line 491) | struct ProxyConfig {
function naive_proxy (line 497) | async fn naive_proxy(cfg: ProxyConfig) -> (SocketAddr, impl Future<Outpu...
FILE: tests/support/trailers.rs
function new (line 23) | pub fn new(stream: S) -> Self {
function with_trailers (line 30) | pub fn with_trailers(stream: S, trailers: HeaderMap) -> Self {
function set_trailers (line 37) | pub fn set_trailers(&mut self, trailers: HeaderMap) {
type Data (line 47) | type Data = D;
type Error (line 48) | type Error = E;
method poll_frame (line 50) | fn poll_frame(
type Item (line 67) | type Item = S::Item;
method poll_next (line 69) | fn poll_next(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Option<...
method size_hint (line 73) | fn size_hint(&self) -> (usize, Option<usize>) {
Condensed preview — 128 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,373K chars).
[
{
"path": ".github/FUNDING.yml",
"chars": 20,
"preview": "github: seanmonstar\n"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.yml",
"chars": 1645,
"preview": "name: \"Bug report 🐛\"\ndescription: Create a report to help us improve\nlabels: [\"C-bug\"]\nbody:\n - type: input\n id: ver"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.md",
"chars": 615,
"preview": "---\nname: \"Feature request \\U0001F4A1\"\nabout: Suggest an idea for this project\ntitle: ''\nlabels: C-feature\nassignees: ''"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE",
"chars": 0,
"preview": ""
},
{
"path": ".github/workflows/CI.yml",
"chars": 8526,
"preview": "name: CI\non:\n pull_request:\n push:\n branches:\n - master\n\nenv:\n RUST_BACKTRACE: 1\n\npermissions:\n contents: re"
},
{
"path": ".github/workflows/bench.yml",
"chars": 1629,
"preview": "name: Benchmark\non:\n push:\n branches:\n - master\n\njobs:\n benchmark:\n name: Benchmark\n runs-on: ubuntu-lat"
},
{
"path": ".github/workflows/cargo-audit.yml",
"chars": 406,
"preview": "name: cargo-audit\non:\n push:\n paths:\n - '**/Cargo.toml'\n - '**/Cargo.lock'\n schedule:\n - cron: '0 16 *"
},
{
"path": ".github/workflows/external-types.toml",
"chars": 411,
"preview": "allowed_external_types = [\n \"bytes::buf::buf_impl::Buf\",\n \"bytes::bytes::Bytes\",\n \"http::header\",\n \"http::he"
},
{
"path": ".gitignore",
"chars": 18,
"preview": "target\nCargo.lock\n"
},
{
"path": "CHANGELOG.md",
"chars": 179153,
"preview": "### v1.8.1 (2025-11-13)\n\n\n#### Bug Fixes\n\n* **http1:** fix consuming extra CPU from previous change (#3977) ([4492f31e]("
},
{
"path": "CONTRIBUTING.md",
"chars": 2604,
"preview": "# Contributing to Hyper\n\nYou want to contribute? You're awesome!\n\nContributions come in all shapes and sizes. Let's take"
},
{
"path": "Cargo.toml",
"chars": 5409,
"preview": "[package]\nname = \"hyper\"\nversion = \"1.8.1\"\ndescription = \"A protective and efficient HTTP library for all.\"\nreadme = \"RE"
},
{
"path": "LICENSE",
"chars": 1062,
"preview": "Copyright (c) 2014-2026 Sean McArthur\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof t"
},
{
"path": "README.md",
"chars": 1606,
"preview": "# [hyper](https://hyper.rs)\n\n[](https://crates.io/crates/hyper)\n["
},
{
"path": "SECURITY.md",
"chars": 769,
"preview": "# Security Policy\n\nhyper (and related projects in hyperium) take security seriously, and greatly appreciate responsibile"
},
{
"path": "benches/body.rs",
"chars": 2602,
"preview": "#![feature(test)]\n#![deny(warnings)]\n\nextern crate test;\n\nuse bytes::Buf;\nuse futures_util::stream;\nuse futures_util::St"
},
{
"path": "benches/connect.rs",
"chars": 1160,
"preview": "#![feature(test)]\n#![deny(warnings)]\n\nextern crate test;\n\n// TODO: Reimplement http_connector bench using hyper::client:"
},
{
"path": "benches/end_to_end.rs",
"chars": 13170,
"preview": "#![feature(test)]\n#![deny(warnings)]\n\nextern crate test;\nmod support;\n\n// TODO: Reimplement parallel for HTTP/1\n\nuse std"
},
{
"path": "benches/pipeline.rs",
"chars": 2887,
"preview": "#![feature(test)]\n#![deny(warnings)]\n\nextern crate test;\n\nmod support;\n\nuse std::convert::Infallible;\nuse std::io::{Read"
},
{
"path": "benches/server.rs",
"chars": 7007,
"preview": "#![feature(test)]\n#![deny(warnings)]\n\nextern crate test;\n\nmod support;\n\nuse std::io::{Read, Write};\nuse std::net::{Socke"
},
{
"path": "benches/support/mod.rs",
"chars": 85,
"preview": "mod tokiort;\n#[allow(unused)]\npub use tokiort::{TokioExecutor, TokioIo, TokioTimer};\n"
},
{
"path": "benches/support/tokiort.rs",
"chars": 5914,
"preview": "#![allow(dead_code)]\n//! Various runtimes for hyper\nuse std::{\n future::Future,\n pin::Pin,\n task::{Context, Pol"
},
{
"path": "capi/README.md",
"chars": 918,
"preview": "# C API for hyper\n\nThis provides auxiliary pieces for a C API to use the hyper library.\n\n## Unstable\n\nThe C API of hyper"
},
{
"path": "capi/cbindgen.toml",
"chars": 502,
"preview": "# See https://github.com/mozilla/cbindgen/blob/master/docs.md#cbindgentoml for\n# a list of possible configuration values"
},
{
"path": "capi/examples/Makefile",
"chars": 428,
"preview": "#\n# Build the example client\n#\n\nTARGET = client\nTARGET2 = upload\n\nOBJS = client.o\nOBJS2 = upload.o\n\nRPATH=$(PWD)/../../t"
},
{
"path": "capi/examples/client.c",
"chars": 9982,
"preview": "#include <stdlib.h>\n#include <stdio.h>\n#include <unistd.h>\n#include <fcntl.h>\n#include <errno.h>\n#include <sys/select.h>"
},
{
"path": "capi/examples/upload.c",
"chars": 11709,
"preview": "#include <stdlib.h>\n#include <stdio.h>\n#include <unistd.h>\n#include <fcntl.h>\n#include <errno.h>\n#include <sys/select.h>"
},
{
"path": "capi/gen_header.sh",
"chars": 1523,
"preview": "#!/usr/bin/env bash\n#\n# This script regenerates hyper.h.\n# nightly build of Rust.\n#\n# Requirements:\n#\n# cargo install cb"
},
{
"path": "capi/include/hyper.h",
"chars": 13397,
"preview": "/*\n * Copyright 2026 Sean McArthur. MIT License.\n * Generated by gen_header.sh. Do not edit directly.\n *\n * Full docs at"
},
{
"path": "docs/CODE_OF_CONDUCT.md",
"chars": 929,
"preview": "# Code of Conduct\n\n## Be Kind\n\n- Don't be mean.\n- Insulting anyone is prohibited.\n- Harassment of any kind is prohibited"
},
{
"path": "docs/CODE_STYLE.md",
"chars": 652,
"preview": "# Code Style\n\nhyper uses the default configuration of `rustfmt`.\n\n## cargo fmt\n\n`cargo fmt --all` does not work in hyper"
},
{
"path": "docs/COMMITS.md",
"chars": 2043,
"preview": "# Git Commit Guidelines\n\nWe have very precise rules over how our git commit messages can be formatted. This leads to **"
},
{
"path": "docs/GOVERNANCE.md",
"chars": 3683,
"preview": "# Governance\n\n## Making decisions\n\nThere's two main pieces to the way decisions are made in hyper:\n\n1. A decision-making"
},
{
"path": "docs/ISSUES.md",
"chars": 4775,
"preview": "# Issues\n\nThe [issue tracker][issues] for hyper is where we track all features, bugs, and discuss proposals.\n\n## Triagin"
},
{
"path": "docs/MAINTAINERS.md",
"chars": 695,
"preview": "# The People\n\nTo see what these roles do, and how to become one, look at [GOVERNANCE](./GOVERNANCE.md).\n\n## Triagers\n\n- "
},
{
"path": "docs/MSRV.md",
"chars": 398,
"preview": "# Minimum Support Rust Version (MSRV)\n\nhyper's current policy is to always support a Rust version at least 6 months\nold."
},
{
"path": "docs/PULL_REQUESTS.md",
"chars": 2028,
"preview": "# Pull Requests\n\nPull requests are the way to submit changes to the hyper repository.\n\n## Submitting a Pull Request\n\nIn "
},
{
"path": "docs/README.md",
"chars": 174,
"preview": "# Developing hyper\n\nThis is a set of documents outline how hyper is developed, how to contribute or get involved, variou"
},
{
"path": "docs/ROADMAP-1.0.md",
"chars": 16195,
"preview": "# hyper 1.0 Roadmap\n\n> This was the roadmap to arrive at hyper v1.0. It is kept for historical purposes. See [ROADMAP](."
},
{
"path": "docs/ROADMAP.md",
"chars": 3848,
"preview": "# Roadmap\n\n## Goal\n\nAlign current hyper to the [hyper VISION](./VISION.md).\n\nThe VISION outlines a decision-making frame"
},
{
"path": "docs/TENETS.md",
"chars": 3945,
"preview": "# Charter\n\n> hyper is a protective and efficient HTTP library for all.\n\n# Tenets\n\nTenets are guiding principles. They gu"
},
{
"path": "docs/VISION.md",
"chars": 9711,
"preview": "# hyper Vision\n\n## Purpose\n\nThis is an overview of what the shape of hyper looks like, but also somewhat\nzoomed out, so "
},
{
"path": "examples/README.md",
"chars": 2900,
"preview": "# Examples of using hyper\n\nThese examples show how to do common tasks using `hyper`. You may also find the [Guides](http"
},
{
"path": "examples/client.rs",
"chars": 2279,
"preview": "#![deny(warnings)]\n#![warn(rust_2018_idioms)]\nuse std::env;\n\nuse bytes::Bytes;\nuse http_body_util::{BodyExt, Empty};\nuse"
},
{
"path": "examples/client_json.rs",
"chars": 1859,
"preview": "#![deny(warnings)]\n#![warn(rust_2018_idioms)]\n\nuse bytes::Bytes;\nuse http_body_util::{BodyExt, Empty};\nuse hyper::{body:"
},
{
"path": "examples/echo.rs",
"chars": 3836,
"preview": "#![deny(warnings)]\n\nuse std::net::SocketAddr;\n\nuse bytes::Bytes;\nuse http_body_util::{combinators::BoxBody, BodyExt, Emp"
},
{
"path": "examples/gateway.rs",
"chars": 2257,
"preview": "#![deny(warnings)]\n\nuse hyper::{server::conn::http1, service::service_fn};\nuse std::net::SocketAddr;\nuse tokio::net::{Tc"
},
{
"path": "examples/graceful_shutdown.rs",
"chars": 4136,
"preview": "#![deny(warnings)]\n\nuse std::convert::Infallible;\nuse std::net::SocketAddr;\nuse std::time::Duration;\n\nuse bytes::Bytes;\n"
},
{
"path": "examples/hello-http2.rs",
"chars": 3347,
"preview": "#![deny(warnings)]\n#![allow(unused_imports)]\n\nuse http_body_util::Full;\nuse hyper::body::Bytes;\n#[cfg(feature = \"server\""
},
{
"path": "examples/hello.rs",
"chars": 2635,
"preview": "#![deny(warnings)]\n\nuse std::convert::Infallible;\nuse std::net::SocketAddr;\n\nuse bytes::Bytes;\nuse http_body_util::Full;"
},
{
"path": "examples/http_proxy.rs",
"chars": 4694,
"preview": "#![deny(warnings)]\n\nuse std::net::SocketAddr;\n\nuse bytes::Bytes;\nuse http_body_util::{combinators::BoxBody, BodyExt, Emp"
},
{
"path": "examples/multi_server.rs",
"chars": 2201,
"preview": "#![deny(warnings)]\n#![warn(rust_2018_idioms)]\n\nuse std::net::SocketAddr;\n\nuse bytes::Bytes;\nuse futures_util::future::jo"
},
{
"path": "examples/params.rs",
"chars": 5526,
"preview": "// #![deny(warnings)] // FIXME: https://github.com/rust-lang/rust/issues/62411\n#![warn(rust_2018_idioms)]\n\nuse bytes::B"
},
{
"path": "examples/send_file.rs",
"chars": 2762,
"preview": "#![deny(warnings)]\n\nuse std::net::SocketAddr;\n\nuse bytes::Bytes;\nuse futures_util::TryStreamExt;\nuse http_body_util::{co"
},
{
"path": "examples/send_file_index.html",
"chars": 303,
"preview": "<html>\n <head>\n <title>Hyper responding example</title>\n </head>\n <body>\n <h1>Hyper responding example, streame"
},
{
"path": "examples/service_struct_impl.rs",
"chars": 2185,
"preview": "use bytes::Bytes;\nuse http_body_util::Full;\nuse hyper::server::conn::http1;\nuse hyper::service::Service;\nuse hyper::{bod"
},
{
"path": "examples/single_threaded.rs",
"chars": 11774,
"preview": "#![deny(warnings)]\n/// This example shows how to use hyper with a single-threaded runtime.\n/// This example exists also "
},
{
"path": "examples/state.rs",
"chars": 1846,
"preview": "#![deny(warnings)]\n\nuse std::net::SocketAddr;\nuse std::sync::{\n atomic::{AtomicUsize, Ordering},\n Arc,\n};\n\nuse byt"
},
{
"path": "examples/upgrades.rs",
"chars": 6837,
"preview": "#![deny(warnings)]\n\n// Note: `hyper::upgrade` docs link to this upgrade.\nuse std::net::SocketAddr;\nuse std::str;\n\nuse to"
},
{
"path": "examples/web_api.rs",
"chars": 4396,
"preview": "#![deny(warnings)]\n\nuse std::net::SocketAddr;\n\nuse bytes::{Buf, Bytes};\nuse http_body_util::{BodyExt, Full};\nuse hyper::"
},
{
"path": "src/body/incoming.rs",
"chars": 21232,
"preview": "use std::fmt;\n#[cfg(all(feature = \"http1\", any(feature = \"client\", feature = \"server\")))]\nuse std::future::Future;\nuse s"
},
{
"path": "src/body/length.rs",
"chars": 4013,
"preview": "use std::fmt;\n\n#[derive(Clone, Copy, PartialEq, Eq)]\npub(crate) struct DecodedLength(u64);\n\n#[cfg(any(feature = \"http1\","
},
{
"path": "src/body/mod.rs",
"chars": 1666,
"preview": "//! Streaming bodies for Requests and Responses\n//!\n//! For both [Clients](crate::client) and [Servers](crate::server), "
},
{
"path": "src/cfg.rs",
"chars": 864,
"preview": "macro_rules! cfg_feature {\n (\n #![$meta:meta]\n $($item:item)*\n ) => {\n $(\n #[cfg($"
},
{
"path": "src/client/conn/http1.rs",
"chars": 21966,
"preview": "//! HTTP/1 client connections\n\nuse std::error::Error as StdError;\nuse std::fmt;\nuse std::future::Future;\nuse std::pin::P"
},
{
"path": "src/client/conn/http2.rs",
"chars": 22950,
"preview": "//! HTTP/2 client connections\n\nuse std::error::Error;\nuse std::fmt;\nuse std::future::Future;\nuse std::marker::PhantomDat"
},
{
"path": "src/client/conn/mod.rs",
"chars": 843,
"preview": "//! Lower-level client connection API.\n//!\n//! The types in this module are to provide a lower-level API based around a\n"
},
{
"path": "src/client/dispatch.rs",
"chars": 15801,
"preview": "use std::task::{Context, Poll};\n#[cfg(feature = \"http2\")]\nuse std::{future::Future, pin::Pin};\n\n#[cfg(feature = \"http2\")"
},
{
"path": "src/client/mod.rs",
"chars": 757,
"preview": "//! HTTP Client\n//!\n//! hyper provides HTTP over a single connection. See the [`conn`] module.\n//!\n//! ## Examples\n//!\n/"
},
{
"path": "src/client/tests.rs",
"chars": 8715,
"preview": "/*\n// FIXME: re-implement tests with `async/await`\n#[test]\nfn retryable_request() {\n let _ = pretty_env_logger::try_i"
},
{
"path": "src/common/buf.rs",
"chars": 4014,
"preview": "use std::collections::VecDeque;\nuse std::io::IoSlice;\n\nuse bytes::{Buf, BufMut, Bytes, BytesMut};\n\npub(crate) struct Buf"
},
{
"path": "src/common/date.rs",
"chars": 3448,
"preview": "use std::cell::RefCell;\nuse std::fmt::{self, Write};\nuse std::str;\nuse std::time::{Duration, SystemTime, UNIX_EPOCH};\n\n#"
},
{
"path": "src/common/either.rs",
"chars": 959,
"preview": "use pin_project_lite::pin_project;\nuse std::{\n future::Future,\n pin::Pin,\n task::{Context, Poll},\n};\n\npin_proje"
},
{
"path": "src/common/future.rs",
"chars": 559,
"preview": "use std::{\n future::Future,\n pin::Pin,\n task::{Context, Poll},\n};\n\n// TODO: replace with `std::future::poll_fn`"
},
{
"path": "src/common/io/compat.rs",
"chars": 4136,
"preview": "use std::pin::Pin;\nuse std::task::{Context, Poll};\n\n/// This adapts from `hyper` IO traits to the ones in Tokio.\n///\n///"
},
{
"path": "src/common/io/mod.rs",
"chars": 251,
"preview": "#[cfg(all(any(feature = \"client\", feature = \"server\"), feature = \"http2\"))]\nmod compat;\nmod rewind;\n\n#[cfg(all(any(featu"
},
{
"path": "src/common/io/rewind.rs",
"chars": 4632,
"preview": "use std::pin::Pin;\nuse std::task::{Context, Poll};\nuse std::{cmp, io};\n\nuse bytes::{Buf, Bytes};\n\nuse crate::rt::{Read, "
},
{
"path": "src/common/mod.rs",
"chars": 795,
"preview": "#[cfg(all(any(feature = \"client\", feature = \"server\"), feature = \"http1\"))]\npub(crate) mod buf;\n#[cfg(all(feature = \"ser"
},
{
"path": "src/common/task.rs",
"chars": 1724,
"preview": "use std::task::{Context, Poll};\n#[cfg(feature = \"client\")]\nuse std::task::{RawWaker, RawWakerVTable, Waker};\n\n/// A func"
},
{
"path": "src/common/time.rs",
"chars": 2571,
"preview": "#[cfg(any(\n all(any(feature = \"client\", feature = \"server\"), feature = \"http2\"),\n all(feature = \"server\", feature "
},
{
"path": "src/common/watch.rs",
"chars": 1500,
"preview": "//! An SPSC broadcast channel.\n//!\n//! - The value can only be a `usize`.\n//! - The consumer is only notified if the val"
},
{
"path": "src/error.rs",
"chars": 24343,
"preview": "//! Error and Result module.\nuse std::error::Error as StdError;\nuse std::fmt;\n\n/// Result type often returned from metho"
},
{
"path": "src/ext/h1_reason_phrase.rs",
"chars": 6610,
"preview": "use bytes::Bytes;\n\n/// A reason phrase in an HTTP/1 response.\n///\n/// # Clients\n///\n/// For clients, a `ReasonPhrase` wi"
},
{
"path": "src/ext/informational.rs",
"chars": 2311,
"preview": "use std::sync::Arc;\n\n#[derive(Clone)]\npub(crate) struct OnInformational(Arc<dyn OnInformationalCallback + Send + Sync>);"
},
{
"path": "src/ext/mod.rs",
"chars": 10104,
"preview": "//! Extensions for HTTP messages in Hyper.\n//!\n//! This module provides types and utilities that extend the capabilities"
},
{
"path": "src/ffi/body.rs",
"chars": 11312,
"preview": "use std::ffi::{c_int, c_void};\nuse std::mem::ManuallyDrop;\nuse std::ptr;\nuse std::task::{Context, Poll};\n\nuse http_body_"
},
{
"path": "src/ffi/client.rs",
"chars": 10817,
"preview": "use std::ffi::c_int;\nuse std::ptr;\nuse std::sync::Arc;\n\nuse crate::client::conn;\nuse crate::rt::Executor as _;\n\nuse supe"
},
{
"path": "src/ffi/error.rs",
"chars": 3104,
"preview": "use crate::ffi::size_t;\n\n/// A more detailed error object returned by some hyper functions.\n///\n/// Compare with `hyper_"
},
{
"path": "src/ffi/http_types.rs",
"chars": 25090,
"preview": "use std::ffi::{c_int, c_void};\n\nuse bytes::Bytes;\n\nuse super::body::hyper_body;\nuse super::error::hyper_code;\nuse super:"
},
{
"path": "src/ffi/io.rs",
"chars": 6944,
"preview": "use std::ffi::c_void;\nuse std::pin::Pin;\nuse std::task::{Context, Poll};\n\nuse super::task::hyper_context;\nuse crate::ffi"
},
{
"path": "src/ffi/macros.rs",
"chars": 1785,
"preview": "macro_rules! ffi_fn {\n ($(#[$doc:meta])* fn $name:ident($($arg:ident: $arg_ty:ty),*) -> $ret:ty $body:block ?= $defau"
},
{
"path": "src/ffi/mod.rs",
"chars": 3243,
"preview": "// We have a lot of c-types in here, stop warning about their names!\n#![allow(non_camel_case_types)]\n// fmt::Debug isn't"
},
{
"path": "src/ffi/task.rs",
"chars": 18974,
"preview": "use std::ffi::{c_int, c_void};\nuse std::future::Future;\nuse std::pin::Pin;\nuse std::ptr;\nuse std::sync::{\n atomic::{A"
},
{
"path": "src/headers.rs",
"chars": 4906,
"preview": "#[cfg(all(feature = \"client\", feature = \"http1\"))]\nuse bytes::BytesMut;\nuse http::header::HeaderValue;\n#[cfg(all(feature"
},
{
"path": "src/lib.rs",
"chars": 4427,
"preview": "#![deny(missing_docs)]\n#![deny(missing_debug_implementations)]\n#![cfg_attr(test, deny(rust_2018_idioms))]\n#![cfg_attr(al"
},
{
"path": "src/mock.rs",
"chars": 6213,
"preview": "// FIXME: re-implement tests with `async/await`\n/*\n#[cfg(feature = \"runtime\")]\nuse std::collections::HashMap;\nuse std::c"
},
{
"path": "src/proto/h1/conn.rs",
"chars": 52709,
"preview": "use std::fmt;\n#[cfg(feature = \"server\")]\nuse std::future::Future;\nuse std::io;\nuse std::marker::{PhantomData, Unpin};\nus"
},
{
"path": "src/proto/h1/decode.rs",
"chars": 42170,
"preview": "use std::error::Error as StdError;\nuse std::fmt;\nuse std::io;\nuse std::task::{Context, Poll};\n\nuse bytes::{BufMut, Bytes"
},
{
"path": "src/proto/h1/dispatch.rs",
"chars": 29812,
"preview": "use std::{\n error::Error as StdError,\n future::Future,\n marker::Unpin,\n pin::Pin,\n task::{Context, Poll},"
},
{
"path": "src/proto/h1/encode.rs",
"chars": 20754,
"preview": "use std::collections::HashSet;\nuse std::fmt;\nuse std::io::IoSlice;\n\nuse bytes::buf::{Chain, Take};\nuse bytes::{Buf, Byte"
},
{
"path": "src/proto/h1/io.rs",
"chars": 30995,
"preview": "use std::cmp;\nuse std::fmt;\nuse std::io::{self, IoSlice};\nuse std::pin::Pin;\nuse std::task::{Context, Poll};\n\nuse crate:"
},
{
"path": "src/proto/h1/mod.rs",
"chars": 2825,
"preview": "use bytes::BytesMut;\nuse http::{HeaderMap, Method};\nuse httparse::ParserConfig;\n\nuse crate::body::DecodedLength;\nuse cra"
},
{
"path": "src/proto/h1/role.rs",
"chars": 110002,
"preview": "use std::mem::MaybeUninit;\n\n#[cfg(feature = \"client\")]\nuse std::fmt::{self, Write as _};\n\nuse bytes::Bytes;\nuse bytes::B"
},
{
"path": "src/proto/h2/client.rs",
"chars": 24174,
"preview": "use std::{\n convert::Infallible,\n future::Future,\n marker::PhantomData,\n pin::Pin,\n task::{Context, Poll}"
},
{
"path": "src/proto/h2/mod.rs",
"chars": 8304,
"preview": "use std::error::Error as StdError;\nuse std::future::Future;\nuse std::io::{Cursor, IoSlice};\nuse std::pin::Pin;\nuse std::"
},
{
"path": "src/proto/h2/ping.rs",
"chars": 14871,
"preview": "//! HTTP2 Ping usage\n//!\n//! hyper uses HTTP2 pings for two purposes:\n//!\n//! 1. Adaptive flow control using BDP\n//! 2. "
},
{
"path": "src/proto/h2/server.rs",
"chars": 19389,
"preview": "use std::error::Error as StdError;\nuse std::future::Future;\nuse std::pin::Pin;\nuse std::task::{Context, Poll};\nuse std::"
},
{
"path": "src/proto/h2/upgrade.rs",
"chars": 9719,
"preview": "use std::future::Future;\nuse std::io::Cursor;\nuse std::pin::Pin;\nuse std::task::{Context, Poll};\n\nuse bytes::{Buf, Bytes"
},
{
"path": "src/proto/mod.rs",
"chars": 2074,
"preview": "//! Pieces pertaining to the HTTP message protocol.\n\ncfg_feature! {\n #![feature = \"http1\"]\n\n pub(crate) mod h1;\n\n "
},
{
"path": "src/rt/bounds.rs",
"chars": 4344,
"preview": "//! Trait aliases\n//!\n//! Traits in this module ease setting bounds and usually automatically\n//! implemented by impleme"
},
{
"path": "src/rt/io.rs",
"chars": 15840,
"preview": "use std::fmt;\nuse std::mem::MaybeUninit;\nuse std::ops::DerefMut;\nuse std::pin::Pin;\nuse std::task::{Context, Poll};\n\n// "
},
{
"path": "src/rt/mod.rs",
"chars": 1573,
"preview": "//! Runtime components\n//!\n//! This module provides traits and types that allow hyper to be runtime-agnostic.\n//! By abs"
},
{
"path": "src/rt/timer.rs",
"chars": 3591,
"preview": "//! Provides a timer trait with timer-like functions\n//!\n//! Example using tokio timer:\n//! ```rust\n//! use std::{\n//! "
},
{
"path": "src/server/conn/http1.rs",
"chars": 18930,
"preview": "//! HTTP/1 Server Connections\n\nuse std::error::Error as StdError;\nuse std::fmt;\nuse std::future::Future;\nuse std::pin::P"
},
{
"path": "src/server/conn/http2.rs",
"chars": 10447,
"preview": "//! HTTP/2 Server Connections\n\nuse std::error::Error as StdError;\nuse std::fmt;\nuse std::future::Future;\nuse std::pin::P"
},
{
"path": "src/server/conn/mod.rs",
"chars": 942,
"preview": "//! Server connection API.\n//!\n//! The types in this module are to provide a lower-level API based around a\n//! single "
},
{
"path": "src/server/mod.rs",
"chars": 377,
"preview": "//! HTTP Server\n//!\n//! A \"server\" is usually created by listening on a port for new connections,\n//! parse HTTP request"
},
{
"path": "src/service/http.rs",
"chars": 2076,
"preview": "use std::error::Error as StdError;\nuse std::future::Future;\n\nuse crate::body::Body;\nuse crate::service::service::Service"
},
{
"path": "src/service/mod.rs",
"chars": 1062,
"preview": "//! Asynchronous Services\n//!\n//! A [`Service`] is a trait representing an asynchronous\n//! function of a request to a r"
},
{
"path": "src/service/service.rs",
"chars": 3916,
"preview": "use std::future::Future;\n\n/// An asynchronous function from a `Request` to a `Response`.\n///\n/// The `Service` trait is "
},
{
"path": "src/service/util.rs",
"chars": 1953,
"preview": "use std::error::Error as StdError;\nuse std::fmt;\nuse std::future::Future;\nuse std::marker::PhantomData;\n\nuse crate::body"
},
{
"path": "src/trace.rs",
"chars": 2551,
"preview": "// For completeness, wrappers around all of tracing's public logging and span macros are provided,\n// even if they are n"
},
{
"path": "src/upgrade.rs",
"chars": 11791,
"preview": "//! HTTP Upgrades\n//!\n//! This module deals with managing [HTTP Upgrades][mdn] in hyper. Since\n//! several concepts in H"
},
{
"path": "tests/client.rs",
"chars": 85529,
"preview": "#![deny(warnings)]\n#![warn(rust_2018_idioms)]\n\nuse std::convert::Infallible;\nuse std::fmt;\nuse std::future::Future;\nuse "
},
{
"path": "tests/integration.rs",
"chars": 6532,
"preview": "#![deny(warnings)]\n#[macro_use]\nmod support;\nuse self::support::*;\n\nt! {\n get_1,\n client:\n request:\n "
},
{
"path": "tests/server.rs",
"chars": 101037,
"preview": "#![deny(warnings)]\n#![deny(rust_2018_idioms)]\n\nuse std::future::Future;\nuse std::io::{self, Read, Write};\nuse std::net::"
},
{
"path": "tests/support/mod.rs",
"chars": 18203,
"preview": "#![allow(dead_code)]\nuse std::future::Future;\nuse std::pin::Pin;\nuse std::sync::{\n atomic::{AtomicUsize, Ordering},\n "
},
{
"path": "tests/support/trailers.rs",
"chars": 1902,
"preview": "use bytes::Buf;\nuse futures_util::stream::Stream;\nuse http::header::HeaderMap;\nuse http_body::{Body, Frame};\nuse pin_pro"
}
]
About this extraction
This page contains the full source code of the hyperium/hyper GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 128 files (1.3 MB), approximately 333.3k tokens, and a symbol index with 1695 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.