Commit Graph

99 Commits

Author SHA1 Message Date
Sean McArthur
d19cfed422 Merge pull request #182 from hyperium/client
feat(client): add a new Client struct with super powers
2014-12-14 12:02:13 -08:00
Sean McArthur
8c83a3358e feat(client): add a new Client struct with super powers
- Includes ergonomic traits like IntoUrl and IntoBody, allowing easy
usage.
- Client can have a RedirectPolicy.
- Client can have a SslVerifier.

Updated benchmarks for client. (Disabled rust-http client bench since it
hangs.)
2014-12-14 11:56:39 -08:00
Rohan Prinja
258e739ef8 add vary header, first draft 2014-12-12 19:12:55 +05:30
Sean McArthur
89bedd30ba rustup for clone trait 2014-12-09 16:50:49 -08:00
Kyle Dewey
4febf65a88 Removed now-deprecated Equiv implementation 2014-12-04 14:10:56 -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
Sean McArthur
fec030a21e rust upgrade 2014-12-02 13:12:04 -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
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
Till Hoeppner
8bb5f0420b Fix for ASCII_LOWER_MAP visibility and deprecation warnings 2014-11-24 21:19:46 +01: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
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
Jonathan Reem
dbfcd1ecfc (fix) Replace find_equiv with a lifetime transmute. 2014-11-19 14:52:49 -08:00
Sean McArthur
14d3209a72 make Headers implement Clone 2014-11-17 11:19:07 -08:00
Jakob Gillich
125e1f7d63 std::from_str has been moved to std::str 2014-11-17 20:09:53 +01:00
Sean McArthur
bb45ac509d some more logging 2014-11-10 16:10:52 -08:00
Jakob Gillich
02e72bb2be hash_map find has been renamed to get, remove returns an option 2014-11-07 17:45:48 +01:00
Michael Hart
1acf567061 Update hash_map and fmt usages
Depends on https://github.com/carllerche/curl-rust/pull/24 and
https://github.com/chris-morgan/rust-http/pull/167
2014-11-04 12:34:35 -05:00
Jamie Turner
f88837f172 Add len() test with redundant header. 2014-11-03 21:08:55 -08:00
Jamie Turner
14687ad6d2 Re-add len() and clear() as inherent Headers methods. 2014-11-03 21:06:30 -08:00
Jamie Turner
bef7da153c Remove collections trait implementations.
Rust has removed them due to collections reform RFC:

RFC: https://github.com/rust-lang/rfcs/pull/235/files
Commit:
21ac985af4
2014-11-03 18:30:16 -08:00
Sean McArthur
3cd7d72b07 split NetworkStream::connect to NetworkConnector 2014-10-31 15:49:26 -07:00
Jonathan Reem
00bc001e59 Split Header into Header and HeaderFormat
Header contains all of the trait-object unsafe methods
including the name of the header and parsing. HeaderFormat
contains fmt_header, which is the only trait-object safe
method.
2014-10-31 15:09:42 -07:00
Sean McArthur
8cf8d5ac03 add Headers.set_raw, remove unsafe from .get_raw
Internal representation was changed from an enum back to a Struct again.
The raw representation *has* to stick around, even if parsed as a proper
typed header. The reason is that internally, hyper will access some
headers to know which parts of the http protocol to follow (such as if
the response has a length or is chunked). The raw value may still be
needed afterwards, such as for a DOM binding of
.getAllResponseHeaders().

Since the raw is kept around, the unsafety of get_raw is no longer true,
and so that is removed.

It's still more ergonomic to access the types, and safer as well, so
that is recommended when possible.
2014-10-27 17:58:21 -07:00
Sean McArthur
19045a2376 change Host header to have hostname and port 2014-10-22 18:29:49 -07:00
Sean McArthur
2f755a5694 move rendering of headers to the Headers object 2014-10-13 14:32:48 -07:00
Sean McArthur
50a2112caf adjust RawHeaderLine to be (String, Vec<u8>) 2014-10-07 15:30:02 -07:00
Stanislav Panferov
2995923505 Fix review comments 2014-10-06 22:27:08 +04:00
Stanislav Panferov
f6ac243c85 Implement the basic parsing for Accept header. 2014-10-06 19:56:32 +04:00
Jonathan Reem
d3a62fa0d5 Add get_mut for modifying the typed representation of Headers.
Also adds an associated test and updates code to use it instead
of cloning and setting when possible.
2014-09-27 00:17:59 -04:00
Jonathan Reem
858a09304a Remove get and rename get_ref to get
Since `get_ref` (now `get`) takes `&self` there is no need
for a special cloning method.
2014-09-27 00:17:59 -04:00
Jonathan Reem
91cc29e0aa Fixed a race condition in get_ref
If two threads attempted to `get_ref` the same Header under two
representations, then it was possible that the second thread would
overwrite the work of the first thread, causing the first thread
to do an unchecked downcast to the wrong type.

In the case where they were the same Header representation, then the
only damage would be that it would be parsed twice and would possibly
return a false negative in one thread.

The new code checks that it was not a queued lock and will not override
the work of another thread, but will accept it if the other thread parsed
the header as the same type. This also prevents duplicate parsing.
2014-09-27 00:17:58 -04:00
Jonathan Reem
90dbef1d03 Add tests for double-reads for Header to ensure safety. 2014-09-27 00:17:58 -04:00
Jonathan Reem
d00fc14765 Store Header Items behind an RWLock
This removes the need to receive `&mut self` in `get_ref` and `get.`

Since the interior mutability of the RWLock is needed only once,
it is safe to change the lifetime of the pointer given by read locks
as by then all mutation has been done.

Since `set` still requires `&mut self` there is no way to use the interior
mutability of the RWLock to modify an existing `&`-reference. However,
the use of interior mutability in `get_ref` means that `get_raw` is now
actually an unsafe operation because the (now `*const`) pointer could be
invalidated by a subsequent call to `get_ref.`

Fixes #47
2014-09-27 00:17:58 -04:00
Jonathan Reem
8f35a03f51 Use the entry API instead of find_or_insert. 2014-09-26 22:59:13 -04:00
Sean McArthur
0191bff43a property treat header names as case insensitive 2014-09-23 09:02:58 -07:00
Jonathan Reem
7065a3f946 Disallow parsing as multiple types to prevent transient errors. 2014-09-16 16:31:05 -07:00
Jonathan Reem
fdcd25356d Refactor Header representation to not store the raw representation
This disallows reparsing, but since that can be a significant source
of errors I think this is actually beneficial.

This also refactors to avoid storing the TypeId, though that is less
of a gain.
2014-09-15 19:21:21 -07:00
Sean McArthur
a0c4edb6e5 adjust representation of internal Items 2014-09-14 10:26:47 -07:00
Jonathan Reem
2aabf1b8e6 Rename rfc7230 to http to more clearly indicate its purpose. 2014-09-09 17:37:01 -07:00
Jonathan Reem
f2c09c5743 Split common headers into a submodule and into their own files
This is a more extensible place to put them and doesn't clutter up
header/mod.rs as much as the old scheme did.

Fixes #8
2014-09-08 16:20:50 -07:00