Commit Graph

699 Commits

Author SHA1 Message Date
Sean McArthur
0fad665dda Merge pull request #922 from jwilm/configurable-dns-worker-count
feat(client): DNS worker count is configurable
2016-10-06 15:45:56 -07:00
Joe Wilm
138e1643e8 feat(client): DNS worker count is configurable
When loading up a client suddenly with thousands of connections, the
default DNS worker count of four cannot keep up and many requests
timeout as a result. Most people don't need a large pool, so making this
configurable is a natural choice.
2016-10-06 14:50:30 -07:00
Joe Wilm
15d9da5eb9 fix(client): keep-alive works as intended now
We observed an issue where connection were not ever entering the
keep-alive state due to a bug with `State::update`. The issue is
resolved with resetting the write state to KeepAlive when it arrives as
KeepAlive. Otherwise, it would be marked incorrectly as Closed.

The `trace!` lines in here are useful for debugging keep-alive issues so
I've left them in.
2016-10-06 14:04:01 -07:00
Joe Wilm
b4c65086af fix(client): Spawn DNS threads with name
Resolves #918.
2016-10-01 12:19:06 -07:00
Garrett Squire
3636a3e855 refactor(error): export url::ParseError in hyper's error module
Closes #914
2016-09-22 15:39:36 -07:00
Joe Wilm
27cab3766d fix(client): Evict idle connections when full
In the scenario where a request is started on the `Client`, the client
has a full slab, and sockets for a *different* domain are idling in
keep-alive, the new request would previously cause the client to panic!.

This patch adds a `spawn_error` handler which attempts to evict an idle
connection to make space for the new request. If space cannot be made,
the error handler is run (passed `Error::Full`) and the `Handler` is
dropped.

This is a breaking change because of the new variant of `Error`.

Some inefficient use of `Vec` in the client was replaced with `VecDeque`
to support push/pop from either end.
2016-09-21 17:52:38 -07:00
Simon Smith
69894d1994 feat(headers): add Warning header
Implements Warning header from RFC7234
Closes #883
2016-09-05 14:35:48 -04:00
Ahmed Charles
8b3c120684 feat(server): add path() and query() to Request
Closes #896 
Closes #897

BREAKING CHANGE: `RequestUri::AbsolutePath` variant is changed to a struct variant. Consider using `req.path()` or `req.query()` to get the relevant slice.
2016-08-29 13:45:38 -07:00
Markus Unterwaditzer
9375addba0 feat(headers): Headers::remove returns the Header
Closes #891

BREAKING CHANGE: `Headers.remove()` used to return a `bool`,
  it now returns `Option<H>`. To determine if a a header exists,
  switch to `Headers.has()`.
2016-08-23 16:46:07 -04:00
Sean McArthur
0ce83dfbb3 Merge pull request #878 from nox/serde
Update serde to 0.8
2016-08-07 10:29:22 -07:00
Sean McArthur
a3a815c09c perf(http): reduce server loops when headers and body are ready 2016-08-06 00:11:45 -07:00
Sean McArthur
523b890a19 fix(server): support HTTP/1.1 pipelining 2016-08-06 00:10:46 -07:00
Sean McArthur
12dac9bdba perf(http): encoder headers with a faster fmt::Write 2016-08-06 00:09:00 -07:00
Anthony Ramine
de921d08fe chore(version): Update serde to 0.8 2016-08-02 09:39:10 +02:00
Sean McArthur
81e7bf4155 refactor(http): call on_error for more error cases 2016-07-29 14:25:12 -07:00
Joonas Koivunen
13c5bf66c3 feat(headers): add Content-Location header
Closes #870
2016-07-28 09:59:33 -07:00
leonardo.yvens
211b408b92 style(http): Rustfmt State.update 2016-07-27 10:46:04 -03:00
leonardo.yvens
9f249bbee8 refactor(http): Dedup code in connection state update. 2016-07-27 10:45:57 -03:00
leonardo.yvens
c6eea3761b refactor(http): Remove new_state and use nested match for http1 in connection state update. 2016-07-27 10:45:51 -03:00
Sean McArthur
e5841365dd Merge pull request #874 from hyperium/guide
docs(guide): adjust styles of the guides
2016-07-26 09:45:51 -07:00
Sean McArthur
81e6e98d80 docs(guide): adjust styles of the guides 2016-07-26 08:55:08 -07:00
Sean McArthur
6f0921ed94 Merge pull request #873 from hyperium/guide
docs(guide): add meat to the Server Guide
2016-07-26 00:27:51 -07:00
Sean McArthur
12c69b5dd0 docs(guide): add meat to the Server Guide
Closes #806
2016-07-25 20:23:44 -07:00
Sean McArthur
50ccdaa7e7 feat(header): introduce header::Raw (#869)
The Raw type repesents the raw bytes of a header-value.

Having a special type allows a couple of benefits:

- The exact representation has become private, allowing "uglier"
internals. Specifically, since the common case is for a header to only
have 1 line of bytes, an enum is used to skip allocating a Vec for only
1 line. Additionally, a Cow<'static, [u8]> is used, so static bytes
don't require a copy. Finally, since we can use static bytes, when
parsing, we can compare the incoming bytes against a couple of the most
common header-values, and possibly remove another copy.

- As its own type, the `Headers.set_raw` method can be generic over
`Into<Raw>`, which allows for more ergnomic method calls.

BREAKING CHANGE: `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.
2016-07-23 12:54:16 -07:00
Ed Barnard
d67dbc6028 feat(server): Server::new can take one or more listeners
Closes #859
2016-07-18 15:32:38 -07:00
Michael
e1542a609f feat(headers): add last-event-id header
Add a Last-Event-ID header to properly work with Server-Sent Events

Addresses # 723
2016-07-14 20:38:46 -07:00
Sean McArthur
e2264530e7 Merge pull request #864 from hyperium/less-deps
refactor(header): internalize traitobject and typeable
2016-07-14 20:36:43 -07:00
Sean McArthur
976218badc feat(client): add keep_alive_timeout to Client 2016-07-14 19:55:55 -07:00
Sean McArthur
3e66377979 refactor(header): internalize traitobject and typeable 2016-07-14 17:27:59 -07:00
Sean McArthur
02cb96ac2d feat(server): add idle_timeout to Server
Closes #790
2016-07-14 17:23:13 -07:00
Sean McArthur
85894bc123 feat(http): add Decoder.try_read and Encoder.try_write 2016-07-14 10:01:57 -07:00
Sean McArthur
40745c5671 refactor(lib): moved LanguageTag export to header
BREAKING CHANGE: LanguageTag used to be at the crate root, but it is now
  in the `hyper::header` module.
2016-07-14 09:59:47 -07:00
Sean McArthur
6d54a4dfdc Merge pull request #857 from hyperium/client-timeout-panic
fix(client): handle when DNS resolves after a timeout triggers
2016-07-13 17:19:45 -07:00
Michael
01843f8822 feat(headers): add origin header
Add an Origin header so users may properly send CORS requests

Closes #651
2016-07-13 14:50:52 -07:00
Sean McArthur
006f66f34a fix(client): handle when DNS resolves after a timeout triggers
Closes #848
2016-07-13 14:48:11 -07:00
Sean McArthur
220d09fc3a Merge pull request #856 from hyperium/keep-alive
feat(client): implement connection pooling for Client
2016-07-08 11:16:48 -07:00
Sean McArthur
2904668105 feat(client): implement connection pooling for Client
Closes #830
Closes #848
2016-07-08 10:07:02 -07:00
Aravind Gollakota
3a86b3a2b2 feat(headers): Add Referrer-Policy header 2016-07-01 22:17:11 -07:00
Tshepang Lekhonkhobe
c77e868408 docs(error): improve Error::Incomplete description (#846) 2016-06-30 11:52:42 -07:00
Robin Stocker
61346207aa docs(server): Fix some typos in server module 2016-06-30 11:52:12 -07:00
Sean McArthur
2fbd80ce69 feat(server): add Transport to on_request 2016-06-23 15:29:30 -07:00
Sean McArthur
d02eb474e1 Merge pull request #841 from hyperium/pr/833
fix(headers): Remove raw part when getting mutable reference to typed header
2016-06-20 16:22:20 -07:00
Andre Silva
f38717e422 fix(headers): Remove raw part when getting mutable reference to typed header
If you get a mutable reference to a typed header it is possible to make
the two representations be out of sync. To avoid this, after parsing the
raw part it should be removed.

Fixes #821.
2016-06-20 15:12:30 -07:00
Darin Minamoto
49e196db1c feat(error): Display for Error shows better info
Displays the inner error for Error types with inner errors instead of
just displaying the description.

Closes #694
2016-06-18 14:10:27 -07:00
Sean McArthur
c856de0428 feat(client): add method to end a chunked body for a Request
Closes #831
2016-06-17 07:01:42 -07:00
Sean McArthur
1b4f857997 fix(headers): only add chunked to TransferEncoding if not present 2016-06-17 03:52:01 -07:00
Sean McArthur
43ac0dd095 Merge pull request #828 from hyperium/pub-control-error
fix(lib): make ControlError public
2016-06-15 09:52:09 +01:00
Tom Burdick
13a6a59d9d perf(http): reduce memcpy calls using boxed pimpl
All of the move semantics remain the same for http::Conn while
the self consumption and move semantics only require a pointer copy
now rather than copying larger amounts of data. This greatly improves
the performance of hyper, by my measurements about 125% faster when
benchmarking using wrk.
2016-06-14 11:28:09 -07:00
Sean McArthur
ad9c580e9a fix(lib): make ControlError public 2016-06-14 11:24:28 -07:00
Sean McArthur
dabe3ac0b1 Merge pull request #827 from hyperium/enc-dec-get-ref
add get_ref methods to Encoder and Decoder
2016-06-14 20:18:28 +02:00