Commit Graph

529 Commits

Author SHA1 Message Date
Sean McArthur
e9c62ccbab Merge pull request #648 from mlalic/h1-msg-keep-calm
[WIP] Add a stream state enum that makes it impossible to lose a stream
2015-09-09 10:50:37 -07:00
Mike Dilger
9b2998bddc fix(server): use EmptyWriter for status codes that have no body
Previously, hyper was defaulting to Chunked which adds a Transfer-Encoding
header, whenever there was no Content-Length header. RFC 7230 section 3.3.1
reads:

   ...
   A server MUST NOT send a Transfer-Encoding header field in any
   response with a status code of 1xx (Informational) or 204 (No
   Content). A server MUST NOT send a Transfer-Encoding header field in
   any 2xx (Successful) response to a CONNECT request
   ...

This commit fixes the cases of 1xx (Informational), 204 (No Content) by
using the EmptyWriter. It also uses EmptyWriter for 304 (NotModified) which
should not have a body.

It does NOT address the case of responses to CONNECT requests, or to HEAD
requests which do not send a body.  These cases cannot be determined using
the data available in the response, and are left for future work.
2015-09-08 09:36:35 +12:00
Marko Lalic
be4e718145 fix(http): Add a stream enum that makes it impossible to lose a stream
This removes a number of possible panics...
2015-09-07 11:05:41 +02:00
Marko Lalic
a36e44af7d fix(http): Make sure not to lose the stream when CL is invalid
When the Content-Length header is invalid, the Http11Message ends up
dropping the stream before returning the error. This causes a panic when
the `close_connection` method of the message is used later. This commit
fixes this by saving the stream onto the message instance before
returning the error. A regression test is also included.
2015-09-05 01:12:03 +02:00
Sean McArthur
32e09a0429 fix(client): EofReader by nature means the connection is closed 2015-09-02 09:26:46 -07:00
Sean McArthur
1ddb59418e Merge pull request #642 from mikedilger/thread_hooks
feat(server): Add Handler per-connection hooks
2015-09-01 18:10:18 -07:00
Sean McArthur
8b593691c6 Merge pull request #645 from hyperium/640-invalid-response
fix(client): be resilient to invalid response bodies
2015-09-01 18:09:26 -07:00
Sean McArthur
75c7117020 fix(client): be resilient to invalid response bodies
When an Http11Message knows that the previous response should not
have included a body per RFC7230, and fails to parse the following
response, the bytes are shuffled along, checking for the start of the
next response.

Closes #640
2015-09-01 16:58:51 -07:00
Mike Dilger
6b6182e8c4 feat(server): Add Handler per-connection hooks 2015-09-02 08:45:37 +12:00
Erick Tryzelaar
3a3c8b69a7 refactor(serde): Minor serde micro-optimizations 2015-08-31 21:49:05 -07:00
Sean McArthur
5c7195ab4a fix(http): fix several cases in HttpReader
- reading 0 bytes when SizedReader.remaining is more than 0 returns
"early eof" error
- reading 0 bytes when ChunkedReader.remaining is more than 0 returns
"early eof" error
- if SizedReader.remaining is less than buf.len(), the buf is sliced to
the remaining size
2015-08-31 19:30:52 -07:00
Sean McArthur
93e6d29a5e refactor(buffer): use vec macro in constructor, change trace logs 2015-08-31 19:30:41 -07:00
Sean McArthur
0af7abf62e refactor(mock): derive Debug for MockStream 2015-08-27 15:47:51 -07:00
Sean McArthur
ef15257b73 fix(client): fix panics when some errors occured inside HttpMessage
BREAKING CHANGE: This changes the signature of HttpWriter.end(),
  returning a `EndError` that is similar to std::io::IntoInnerError,
  allowing HttpMessage to retrieve the broken connections and not panic.

  The breaking change isn't exposed in any usage of the `Client` API,
  but for anyone using `HttpWriter` directly, since this was technically
  a public method, that change is breaking.
2015-08-27 15:47:51 -07:00
Mike Dilger
341f8eae6e fix(headers): case insensitive values for Connection header
Closes #635
2015-08-28 10:36:54 +12:00
Sean McArthur
44a4010537 docs(server): fix request.ssl() example to use SslStream<HttpStream>
Closes #633
2015-08-24 09:59:21 -07:00
Sean McArthur
d32d35bbea fix(client): close connection when there is an Error 2015-08-19 14:37:47 -07:00
Manuel Woelker
80931cf4c3 feat(uri): implement fmt::Display for RequestUri (resolves #629) 2015-08-18 22:28:23 +02:00
Sean McArthur
e1307b0d2f Merge pull request #631 from hyperium/server-request-ssl
add ssl() method to server Requests
2015-08-12 14:40:59 -07:00
Sean McArthur
0455663a98 fix(nightly): remove feature flag for duration 2015-08-12 14:39:37 -07:00
Sean McArthur
7909829f98 feat(server): add Request.ssl() to get underlying ssl stream
Closes #627
2015-08-12 14:13:14 -07:00
Sean McArthur
1a91835aba feat(net): impl downcast methods for NetworkStream (without + Send)
Closes #521
2015-08-12 14:12:16 -07:00
Sean McArthur
67c284a96a fix(client): improve keep-alive of bodyless Responses 2015-08-05 16:45:54 -07:00
Sean McArthur
31f117ea08 fix(client): improve HttpReader selection for client Responses
Closes #436
2015-08-05 16:42:48 -07:00
ealasu
af062ac954 feat(headers): Content-Range header 2015-08-05 11:33:38 -07:00
Armin Ronacher
664bde58d8 feat(raw-fd): implement FromRawFd/FromRawSocket
This allows HttpStream and HttpListener to be created from raw
sockets similar to their Tcp counterparts.  It also fixes up the
signature from i32 to RawFd for the AsRawFd method.
2015-08-01 23:11:26 +02:00
Sean McArthur
0a59d7377c Merge pull request #621 from hyperium/timeout
feat(net): add socket timeouts to Server and Client
2015-07-29 10:56:39 -07:00
Danyel Bayraktar
abdd4c5d63 feat(net): Implement NetworkConnector for closure to be more flexible 2015-07-28 23:02:16 +02:00
Sean McArthur
7d1f154cb7 feat(net): add socket timeouts to Server and Client
While these methods are marked unstable in libstd, this is behind a
feature flag, `timeouts`. The Client and Server both have
`set_read_timeout` and `set_write_timeout` methods, that will affect all
connections with that entity.

BREAKING CHANGE: Any custom implementation of NetworkStream must now
  implement `set_read_timeout` and `set_write_timeout`, so those will
  break. Most users who only use the provided streams should work with
  no changes needed.

Closes #315
2015-07-27 09:57:59 -07:00
Patrick Walton
f5f5e1cb2d fix(headers): fix broken deserialization of headers
Sorry about that!
2015-07-23 20:58:35 -07:00
Sean McArthur
71db6a46c0 refactor(ssl): use openssl::DirectStreams 2015-07-23 13:13:43 -07:00
Sean McArthur
da817ba8bf test(header): change test_headers_show to use str.contains 2015-07-23 12:09:55 -07:00
Sean McArthur
a0739e6c96 test(headers): fix test_headers_show() 2015-07-23 11:53:46 -07:00
Sean McArthur
74021a24fe test(headers): remove usage of iter.join() 2015-07-23 11:38:26 -07:00
Sean McArthur
d2e8b5dc3d fix(tests): iter.connect() is now iter.join() 2015-07-22 19:01:33 -07:00
Sean McArthur
3bd0635d28 Merge pull request #611 from batisteo/patch-1
docs(headers): move blank line in right place.
2015-07-22 17:58:45 -07:00
Håvar Nøvik
d84f291abc feat(status): implement Hash for StatusCode
Change hash implementation to just use `derive(Hash)`
2015-07-22 10:50:26 +02:00
Håvar Nøvik
aa85f609b5 feat(status): implement Hash for StatusCode
Implment the `Hash` trait for the `StatusCode` enum.
2015-07-21 21:10:47 +02:00
Baptiste Darthenay
65ba136f02 Doc: moved blank line in right place.
http://ironframework.io/doc/iron/headers/struct.ContentType.html#examples
2015-07-15 10:39:18 +02:00
Patrick Walton
87de1b77bc feat(http): add optional serialization of common types via serde
This is behind a Cargo feature to avoid forcing downstream users to
depend on `serde`. It is needed for Servo IPC to work.
2015-07-10 17:45:08 -07:00
Sean McArthur
9bf60b65a0 docs(http): document consts CR, LR, and LINE_ENDING 2015-07-08 10:31:31 -07:00
Sean McArthur
5994a6f8b4 fix(lint): change deny(missing_docs) to only apply for tests
Closes #600
2015-07-08 10:23:37 -07:00
Sean McArthur
0e7db69d6d perf(buffer): zero out buffers using memset instead of iter().take() 2015-07-07 18:09:05 -07:00
Sean McArthur
ddecb262b3 fix(http): no longer keep alive for Http1.0 if no Connection header
Closes #596
2015-07-06 12:55:25 -07:00
Sam Gibson
7c2e5124e6 feat(headers): add strict-transport-security header
Strict-Transport-Security allows servers to inform user-agents that
they'd like them to always contact the secure host (https) instead of
the insecure one (http).

Closes #589
2015-07-06 12:35:45 -07:00
Sean McArthur
9a85ea553f Merge pull request #595 from pyfisch/originstring
refactor(headers): use String in Access-Control-Allow-Origin header
2015-07-06 11:00:49 -07:00
Pyfisch
ed458628e5 refactor(headers): use String in Access-Control-Allow-Origin header
Access-Control-Allow-Origin origins are URLs but they do not need to
be valid, they should just be compared as strings. So to support
invalid URLs hyper should use a string instead.

closes #526

BREAKING CHANGE: Access-Control-Allow-Origin does no longer use Url
2015-07-04 17:26:06 +02:00
Sean McArthur
82ed9092e3 feat(client): add url property Response
This will always be the last URL that was used by the Request, which is
useful for determining what the final URL was after redirection.

BREAKING CHANGE: Technically a break, since `Response::new()` takes an
  additional argument. In practice, the only place that should have been
  creating Responses directly is inside the Client, so it shouldn't
  break anyone. If you were creating Responses manually, you'll need to
  pass a Url argument.
2015-07-01 10:45:07 -07:00
Pyfisch
db93ca0697 style(rustfmt): run rustfmt on hyper correct overlong lines 2015-06-29 20:22:22 +02:00
Sean McArthur
31e5a91350 Merge pull request #582 from mlalic/issue-580
refactor(http2): move to solicit v0.4
2015-06-26 21:18:22 -07:00