Commit Graph

918 Commits

Author SHA1 Message Date
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
Sean McArthur
316c6fad30 refactor(header): change HttpDate to opaque over SystemTime
This removes the need for someone to use the `time` crate to create a
date compatible with HTTP headers. It now works with the `SystemTime`
type from the standard library.

BREAKING CHANGE: `HttpDate` no longer has public fields. Convert between
  `HttpDate` and `SystemTime` as needed.
2017-04-25 14:30:49 -07:00
Sean McArthur
011f28cb18 fix(headers): remove erronous link-extensions from Link
They can be re-added later, removing now prevents that fix from being a
breaking change.

BREAKING CHANGE: The `link_extensions` methods of the `Link` header are
  removed until fixed.
2017-04-24 13:52:05 -07:00
Sean McArthur
21f547afb2 Merge branch 'http-connector-enforce-scheme' 2017-04-24 12:17:34 -07:00
Sean McArthur
6dd76a6839 perf(uri): inline Uri getters 2017-04-24 12:08:48 -07:00
Sean McArthur
1c34a05a85 feat(client): add HttpConnector.enforce_http
This will make the `HttpConnector` require the `scheme` to be `http`,
and return an error otherwise. This value is enabled by default, so any
requests to URLs that aren't of scheme `http` will now see an error
message stating the failure.

When constructing a connector that wraps an `HttpConnector`, this
enforcement can be disabled to allow connecting over TCP easily even
when the scheme is not `http`. To do, call
`connector.enforce_http(false)`.
2017-04-24 12:08:15 -07:00
Sean McArthur
6f02d43ae0 refactor(header): change Header::fmt_header to take a header::Formatter
The `header::Formatter` ensures that a formatted header is written to a
line, and allows for headers that require multiple lines. The only
header to specifically require this is `Set-Cookie`.

BREAKING CHANGE: 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)`.
2017-04-24 10:56:05 -07:00
Alexander Mielczarek
f1859dfd7a feat(headers): add TE header struct (#1150)
The `TE` header is used by a client to specify which
transfer encodings other than `chunked` it will accept.
It also specifies whether HTTP trailers are acceptable.
This commit also adds a `Trailers` variant to the
`hyper::header::shared::Encoding` enum.

Closes #1109 

BREAKING CHANGE: The `Encoding` enum has an additional
  variant, `Trailers`.
2017-04-24 10:21:06 -07:00
Alexey Zabelin
414859978b feat(headers): support Opaque origin headers (#1147)
Add support for Opaque origin header, serializing it to `null`.
https://html.spec.whatwg.org/multipage/browsers.html#concept-origin

Closes #1065

BREAKING CHANGE: `Origin.scheme` and `Origin.host` now return `Option`s,
  since the `Origin` could be `null`.
2017-04-24 10:05:56 -07:00
James Kay
4e26646aa7 feat(client): add an accessor for the request body
Allow users to access the body of the request.
Useful when one wants to modify the request based
on the data in the body, e.g. to add checksum headers.
2017-04-20 12:17:55 +01:00
Georg Brandl
4c4da4c0e4 docs(quality_item): fix typo 2017-04-18 12:36:13 +02:00
Sean McArthur
9605e860ff Merge pull request #1136 from hannesg/reduce_to_owned_in_origin
refactor(headers): use static "http"/"https" for scheme
2017-04-13 17:40:26 -07:00
hag
040c7d1949 refactor(headers): use static "http"/"https" for scheme
This change removes one common string allocation when parsing the origin
header.
2017-04-14 00:10:55 +02:00