Commit Graph

216 Commits

Author SHA1 Message Date
Jonathan Reem
b1ab03f7f8 (fix) Harden header parsing against memory exhaustion attacks.
Adds new limits on the lengths of header names and fields.

Fixes #187
2014-12-11 17:08:57 -08:00
Rohan Prinja
4bae6b7e0e add allow header 2014-12-11 00:18:32 +05:30
Sean McArthur
89bedd30ba rustup for clone trait 2014-12-09 16:50:49 -08:00
Sean McArthur
514f96e9eb Merge pull request #180 from wenderen/etag-header
add etag header
2014-12-07 23:48:10 -08:00
Rohan Prinja
c4efa80fb5 add etag header 2014-12-08 13:08:53 +05:30
Corey Richardson
6d91693a41 Add missing reexport 2014-12-07 18:51:50 -05:00
Corey Richardson
e2d387d118 header: add If-Modified-Since support 2014-12-07 18:48:05 -05:00
Sean McArthur
debebe8fbe rustup 2014-12-06 10:52:00 -08:00
Sean McArthur
ae88092587 Merge pull request #168 from hyperium/ssl-verify
r=reem
2014-12-04 17:41:42 -08:00
Sean McArthur
36429ab50c refactor(net): NetworkConnecter no longer is for static usage
Instead, you can use an instance of a NetworkConnector with
`Request::with_connector`. This allows overloading of the NetworkStream
constructors, so that it is easy to modify how an `HttpStream` is
created, while still relying on the rest of the stream implementation.

BREAKING CHANGE
2014-12-04 17:39:38 -08:00
Kyle Dewey
4febf65a88 Removed now-deprecated Equiv implementation 2014-12-04 14:10:56 -08:00
Sean McArthur
9a2605a138 Merge pull request #165 from hyperium/expires
Adds CacheControl, Expires, and LastModified headers
2014-12-02 21:22:32 -08:00
Sean McArthur
e19330326d Merge pull request #161 from hyperium/mucell
refactor(headers): changed from rwlock to mucell underneath
2014-12-02 21:20:52 -08:00
Stanislav Panferov
6a8864cc27 Add more functions for client to work with cookies. Fixes #155. 2014-12-03 00:33:25 +03:00
Sean McArthur
fec030a21e rust upgrade 2014-12-02 13:12:04 -08:00
Sean McArthur
f182f53210 feat(headers): add CacheControl header 2014-12-01 19:58:07 -08:00
Sean McArthur
1ed4ea5a27 Merge pull request #164 from dpc/issue-163
Fix Issue 163
2014-12-01 09:38:44 -08:00
Dawid Ciężarkiewicz
f5a7d7cfa1 Tests for "Fix handling long Reason Phrase"
Issue #163
2014-11-30 18:37:21 -08:00
Dawid Ciężarkiewicz
f3a5c0124a Fix handling long Reason Phrase
rfc2616 does not specify the maximum length of *Reason Phrase* so it's
a good practice to handle even unreasonably long input.

16 char. buffer is not enough to correctly handle even the common `304
Moved Permanently`. Increase buffer size to more realistic 32. Also, up
to 128 more characters will be read and ignored, providing even greater
versatility without increasing memory usage.

Issue #163
2014-11-30 18:37:14 -08:00
Sean McArthur
0297147dd1 feat(headers): add LastModified header 2014-11-30 15:59:40 -08:00
Sean McArthur
e255f88dd2 feat(headers): add Expires header 2014-11-30 15:47:02 -08:00
Sean McArthur
d71d6549f7 refactor(headers): changed from rwlock to mucell underneath 2014-11-29 22:06:48 -08:00
Sean McArthur
8071cfa8bf feat(headers): header ergonomics
- Reexports all common::* as header::*
- Most headers implement Deref where it makes sense.

Closes #156
2014-11-29 13:55:50 -08:00
Sean McArthur
07cf414e17 fix(logging): adjust several logging messages
Closes #148
2014-11-28 18:03:37 -08:00
Sean McArthur
ed6faceec3 Merge pull request #154 from retep998/master
Update to latest Rust
2014-11-28 16:02:22 -08:00
Dawid Ciężarkiewicz
db72cb5187 Fix HeaderFormatter.
Issue #157
2014-11-28 03:49:40 -08:00
Peter Atashian
00a76cee03 Update to latest Rust
Signed-off-by: Peter Atashian <retep998@gmail.com>
2014-11-28 02:22:21 -05:00
Sean McArthur
4263a01f1c convert to using Cow 2014-11-27 12:13:07 -08:00
Evgeny Rozaliev
c77cd3d3da (fix) unwrap() => into_inner() 2014-11-27 16:05:19 +03:00
Sean McArthur
ba758ecde1 Merge pull request #146 from hyperium/iter
improve Headers.iter
2014-11-25 18:45:09 -08:00
Sean McArthur
febf7d16ef feat(headers): headers.iter() is more powerful
Previously, iter() returned (&str, HeaderView), which wasn't too useful
other than to write out to a stream. Checking for a certain header is
painful since header names are case-insensitive, but &str isn't. And
once found, you still couldn't do anything with a HeaderView other
format it.

Now, iter() returns a HeaderView, with methods is(), name(), and
value(). You can do `view.is::<ContentType>()` to check what header it
is. And you get the typed value out by calling
`view.value::<ContentType>()`, which will return an
`Option<ContentType>`, similar to `headers.get()`.

Headers also now implement Extend and FromIterator, so it's easier to
build new Headers objects by filtering out a few headers.

Because this changes .iter() to return HeaderView instead of a tuple,
this is a:

[breaking-change]
2014-11-24 22:25:06 -08:00
Sean McArthur
a60a67cd1e feat(server): properly handle requests that shouldn't have bodies 2014-11-24 21:27:59 -08:00
Sean McArthur
486080b044 feat(client): add a status_raw value 2014-11-24 19:49:12 -08:00
Sean McArthur
de17901adb Merge pull request #144 from emk/method-eq
Allow hyper::method::Method to be put in HashMap
2014-11-24 17:38:55 -08:00
Eric Kidd
ccef7953f8 Add some basic tests for hyper::method::Method
This test case does not attempt to test all the methods exhaustively,
but it does at least test all the methods in the APIs.  There's also a
check to make sure that Method can be used as part of a hash-table key.
2014-11-24 20:23:37 -05:00
Eric Kidd
91112516fc Allow hyper::method::Method to be put in HashMap
This is needed for porting iron/router to hyper.
2014-11-24 20:23:37 -05:00
Till Hoeppner
8bb5f0420b Fix for ASCII_LOWER_MAP visibility and deprecation warnings 2014-11-24 21:19:46 +01:00
Austin Bonander
ff76e1c837 Fuse ChunkedReader after end
Remove debug
2014-11-24 02:27:06 -08:00
Austin Bonander
34203aa608 Fix compile error 2014-11-24 02:13:35 -08:00
Jonathan Reem
c79e6f0aa5 feat(headers): Added a HeaderFormatter for getting the HTTP representation of a header. 2014-11-23 22:30:26 -08:00
Barosl Lee
c1c0103225 Accept any token to be a valid request method
- Rename read_until_space() to read_token_until_space()
- Check if the byte is part of the token in read_token_until_space()
- Return HttpMethodError if the token is empty
- Remove the unnecessary is_valid_method() function
2014-11-23 09:17:45 +09:00
Chris Morgan
8e2255430c Drop the unnecessary dependency on typeable.
See also https://github.com/reem/rust-typeable/issues/3.
2014-11-22 17:20:44 +11:00
Jonathan Reem
368e46d3d9 Merge pull request #118 from hyperium/headers-clone
make Headers implement Clone
2014-11-21 05:16:38 -08:00
Sean McArthur
3cd9b10bcb feat(server): keep-alive!
Internals have been shuffled around such that Request and Reponse are
now given only a mutable reference to the stream, instead of being
allowed to consume it. This allows the server to re-use the streams if
keep-alive is true.

A task pool is used, and the number of the threads can currently be
adjusted by using the `listen_threads()` method on Server.

[breaking-change]
2014-11-20 21:40:55 -08:00
Sean McArthur
97c8276134 adjust doc comment about Unsigned 2014-11-20 16:25:33 -08:00
Sean McArthur
626fe9d91e rustup: fmt changes 2014-11-20 10:28:09 -08:00
Jonathan Reem
eaee849972 refactor(response): made deconstruct available on all response types. 2014-11-19 16:27:41 -08:00
Jonathan Reem
dbfcd1ecfc (fix) Replace find_equiv with a lifetime transmute. 2014-11-19 14:52:49 -08:00
Jakob Gillich
f3e1baea9f fix(http): is_valid_method expects &-ptr 2014-11-19 22:07:11 +01:00
Jakob Gillich
35b7ec132e refactor(status): replace glob with namespaced variants 2014-11-19 22:07:04 +01:00