Commit Graph

830 Commits

Author SHA1 Message Date
Sean McArthur
f273224f21 feat(mime): upgrade to mime v0.3
The new mime crate has several benefits:

- Faster formatting
- Easier to use. Most common mime types are now just constants, like
  `mime::TEXT_PLAIN`.
- Proper suffix support.
- Extensible without breaking backwards compatiblity. This means we can
  always add new constants, but before we couldn't add new variants to the
  enums.
- It's now impossible for a `Mime` to contain invalid tokens. Before,
  with the `Ext(String)` variants, it was possible to create an illegal
  mime.

Closes #738

BREAKING CHANGE: 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.
2017-06-08 13:00:12 -07:00
Sean McArthur
e2ed6f5868 refactor(chunk): make use of Bytes::extend instead of custom code 2017-06-07 17:48:26 -07:00
Corey Farwell
059f2b8725 chore(net): remove empty net file 2017-06-06 23:54:14 -07:00
Sean McArthur
acd62cda44 feat(lib): add raw_status feature in Cargo.toml
The `RawStatus` types on the `Response` are now gone by default. To make
use of them, the `raw_status` feature must be enabled in `Cargo.toml`.

BREAKING CHANGE: To use `RawStatus`, you must enable the `raw_status`
  crate feature.
2017-06-03 16:23:33 -07:00
Sean McArthur
76fc633613 Merge pull request #1199 from daboross/patch-1
fix(client): remove config requirement for Connect
2017-06-03 14:55:07 -07:00
David Ross
70948a24b0 fix(http,server): Update tests to use non-deprecated futures methods.
These seem mostly to be renames, with the exception of Unpark -> Notify.
2017-06-02 23:33:19 -07:00
David Ross
5391d02c10 fix(client): remove config requirement for Connect
Remove requirement when calling client::Config::connector() that the connector implements Connect.

Removing this requirement allows users to set the connector back to UseDefaultConnector. Previously,
this was not possible.
2017-06-01 23:38:01 -07:00
mayah
edc1c0dd01 fix(header): add Cookie::iter() 2017-05-29 11:16:09 -07:00
Sean McArthur
bdd2e1a3ad perf(server): cache renderings of the Date header
This is actually one of the biggest impacts to benchmark performances at
this point. Caching the rendering of the Date header improves "hello
world" benchmarks by around 10%.
2017-05-26 12:29:26 -07:00
Sean McArthur
78a8eed7f1 test(http): addn a benchmark for encoding a response head 2017-05-25 11:41:56 -07:00
Sean McArthur
2cbf4ef85f refactor(http): reduce complexity of determing an Encoder 2017-05-25 10:38:37 -07:00
Sean McArthur
e69cd1ab3a style(header): clean up extra whitespace in ContentLength file 2017-05-25 10:34:35 -07:00
Sean McArthur
9688c8b8ae perf(header): add #[inline] to header! macros 2017-05-25 10:32:25 -07:00
Sean McArthur
40c575cc59 perf(header): move a branch out of a loop in fmt_comma_delimited 2017-05-25 10:31:20 -07:00
Yazad Daruvala
e134b890ef refactor(http): combine reserve_read_buf into read_from_io 2017-05-22 22:06:03 -07:00
Yazad Daruvala
6c8e6acaff refactor(http): remove the commented out code in http::h1 2017-05-22 22:06:03 -07:00
Yazad Daruvala
2f0470bcf3 refactor(http): delete some indirection around Http1Transaction::parse 2017-05-22 22:06:03 -07:00
Sean McArthur
09fe9e6a80 Merge pull request #1183 from MJDSys/nightly_unused_unimplemented
fix(lib): Remove unused unimplemented! macro.
2017-05-22 10:26:30 -07:00
Sander Maijers
c07872951b docs(server): refer to bind method, not serve
Fixes #1180.
2017-05-20 15:08:41 +02:00
Matthew Dawson
ac40b453ec fix(lib): Remove unused unimplemented! macro.
This macro isn't used anywhere, std now has an unimplemented macro
if we want to use it, and the nightly compiler now warns that this
unused.  This warning is a failure when compiling tests.
2017-05-19 23:51:43 +00:00
Utkarsh Kukreti
559f21a664 fix(uri): fix parse for empty path and '/' or '?' in fragment
Fixes #1176.
2017-05-17 17:09:20 +05:30
Sean McArthur
33eb8f95a3 perf(http): use custom type for ParseEof error instead of string error 2017-05-12 16:54:24 -07:00
Sean McArthur
c036fd6056 test(http): fix conn tests with higher init buffer size 2017-05-12 16:35:27 -07:00
Sean McArthur
917f482e70 Merge pull request #1167 from golem131/dependency_update
feat(headers): update to unicase 2.0 and base64 0.5
2017-05-12 16:10:53 -07:00
Sean McArthur
5caf590c06 perf(http): increase size of initial buffer to 8kb 2017-05-12 15:39:34 -07:00
golem131
ca22eae5ac feat(headers): update to base64 0.5 2017-05-12 13:40:26 +03:00
Sean McArthur
c18d47db2f refactor(status): add allow(deprecated) to StatusClass enum for older rust versions 2017-05-11 14:25:35 -07:00
Sean McArthur
638582fae2 refactor(status): deprecate StatusClass 2017-05-11 12:46:46 -07:00
Sean McArthur
c81edd41d7 refactor(lib): update unicase to 2.0
BREAKING CHANGE: Some headers used `UniCase`, but now use
  `unicase::Ascii`. Upgrade code to `Ascii::new(s)`.
2017-05-10 16:14:59 -07:00
Sean McArthur
fed04dfb58 Merge pull request #1159 from dorfsmay/ignore_invalid_cookies
Ignore invalid cookies
2017-05-08 22:46:51 -07:00
Sean McArthur
6655134583 refactor(client): make HttpConnector lazy 2017-05-08 11:51:20 -07:00
Sean McArthur
e6b588b81d docs(client): remove outdated reference to Handler trait 2017-05-08 11:50:54 -07:00
taku0
1a35310273 feat(headers): add ContentType::octet_stream() constructor 2017-05-03 18:16:36 +09:00
Nick Gonzales
864d3e27a4 refactor(http): merge Request and Response from server and client
Request and Response are now visible from:
- hyper::{Request, Response}
- hyper::server::{Request, Response}
- hyper::client::{Request, Response}
They truly exist in the http module, but are re-exported to reduce the number of breaking changes.

request::new and response::new were renamed to ::from_wire to reduce confusion with Request::new
and Response::new. See issue #1126

Request now has an optional Body, because not all requests have bodies.
Use body_ref() to determine if a body exists.
Use body() to take the body, or construct one if no body exists.

Closes #1155

BREAKING CHANGE: Response::body() now consumes the response
2017-05-01 14:22:07 -06:00
Nick Gonzales
0de295670f refactor(http): add status() methods to RawStatus and ResponseHead
This lets us convert RawStatus to StatusCode in Response without having to address the tuple index
directly.
2017-05-01 14:18:22 -06:00
Nick Gonzales
f61708ba81 feat(http): add Default trait to Body
server::Request has a mandatory Body and client::Request has an optional Body.
Having a default for Body makes it easier to merge the two.
2017-05-01 14:18:22 -06:00
Sean McArthur
df1095dfe7 test(http): fix Body.concat test 2017-05-01 12:42:21 -07:00
Sean McArthur
6faa653f0d feat(http): implement Default for Body 2017-05-01 12:29:06 -07:00
Sean McArthur
f5567db4dc feat(http): implement Default for Chunk
This allows using `Stream::concat2` with a `hyper::Body`.
2017-05-01 12:29:06 -07:00
Sean McArthur
154ab29c0d feat(uri): add is_absolute method to Uri
This allows servers to check if an incoming URI is in absolute form.
Especially useful for proxies to determine if the request was meant to
be proxied or aimed directly at the proxy server.
2017-05-01 12:29:06 -07:00
Ran Benita
f382f45e65 refactor(lib): use try_nb! from tokio_io, not tokio_core
tokio_core::io is deprecated, and the try_nb! conceptually belongs to
that module. It is also available in tokio_io, so use that instead.
2017-04-30 14:36:42 +03:00
Yves Dorfsman
310d98d50b fix(header): ignore invalid cookies
In the spirit of Postel's law, ignore invalid cookies rather than
completely discard the entire Cookie header, which is what the current
code does, and which will lead to confusion when dealing with headers
with invalid cookies injected by proxies and intermediate apps servers.
2017-04-29 14:09:24 -06:00
Yves Dorfsman
276170fd1c test(header): test valid corner cases
Test corner cases that are easy to miss when coding such as equal sign
in the cookie value and empty and empty value.
2017-04-29 13:36:55 -06:00
Sean McArthur
dd03e72392 feat(header): change Cookie to be map-like
The `Cookie` header now has 'set' and `get` methods, to treat the list of
cookies as a map.

Closes #1145

BREAKING CHANGE: The `Cookie` header is no longer a wrapper over a
  `Vec<String>`. It must be accessed via its `get` and `append` methods.
2017-04-28 13:56:32 -07:00
Sean McArthur
c3466bedf8 refactor(header): fix more ?Sized for 1.10 2017-04-26 14:52:23 -07:00
Sean McArthur
9ab67b7900 style(header): remove ?Sized from where class to fix 1.10 build 2017-04-26 13:58:56 -07:00
Sean McArthur
5130fa4bad refactor(header): remove unused VecMap.is_empty 2017-04-26 13:46:44 -07:00
Sean McArthur
8d6d9a21af refactor(header): remove some lifetime transmutes for keys in VecMap 2017-04-26 13:19:23 -07:00
Sean McArthur
38e60f7267 docs(header): update ContentType example to use ContentType::json() 2017-04-26 13:18:35 -07:00
Sean McArthur
a4644959b0 refactor(header): make Quality an opaque struct
This makes the `u16` in `Quality` private, since it only has a valid
range of 0-1000, and can't be enforced in public. The `q` function now
allows both `f32`s and `u16`s to construct a `Quality`.

BREAKING CHANGE: Any use of `Quality(num)` should change to `q(num)`.
2017-04-26 11:22:20 -07:00