643 Commits

Author SHA1 Message Date
Sean McArthur
dd6cac62e8 Merge pull request #79 from seanmonstar/client-config
Intial Client Configuration
2017-09-13 14:55:36 -07:00
Sean McArthur
3ec0e85e56 add test when stream window overflows before conn window 2017-09-13 14:32:27 -07:00
Sean McArthur
e2cda1860b fix Body to return errors when there is recv error 2017-09-13 14:32:27 -07:00
Sean McArthur
ed472f109c add client::Builder to configure Clients 2017-09-13 14:32:27 -07:00
Sean McArthur
d0afe30ab3 fix recv connection flow should always use default initial window size 2017-09-13 14:32:27 -07:00
Carl Lerche
b01e3dff12 Annotate unstable API fns with cfg 2017-09-13 14:14:41 -07:00
Sean McArthur
f7d14861e5 rustfmt: add trailing commas in match arms, set fn call to block stle (#85) 2017-09-12 19:29:06 -07:00
Oliver Gould
de1edf4873 Merge pull request #71 from carllerche/ver/rustfmt
Use rustfmt to enforce consistent formatting
2017-09-12 16:00:06 -07:00
Oliver Gould
897bf84163 Use rustfmt to enforce consistent formatting
This change adds a .rustfmt.toml that includes ALL supported settings,
12 of which we have overridden to attempt to cater to our own
proclivities.

rustfmt is checked in the rust-nightly CI job.
2017-09-12 22:29:35 +00:00
Carl Lerche
93925e6d1f Limit send flow control bug to window_size (#78)
Senders could set the available capacity greater than the current
`window_size`.  This caused a panic when the sender attempted
to send more than the receiver could accept.
2017-09-12 10:48:11 -07:00
Eliza Weisman
9448a19408 Factor out reset on RecvError::Stream (#76) 2017-09-11 13:07:37 -07:00
Eliza Weisman
11de86b34e Make Codec max frame length configurable (#57) 2017-09-11 12:56:40 -07:00
Sean McArthur
460afa41c8 Add connection window overflow test (#72) 2017-09-11 10:17:43 -07:00
Carl Lerche
5c0efcf8c4 Ref count stream state and release when final (#73)
Previously, stream state was never released so that long-lived connections
leaked memory.

Now, stream states are reference-counted and freed from the stream slab
when complete.  Locally reset streams are retained so that received frames
may be ignored.
2017-09-10 16:01:19 -07:00
Carl Lerche
daa54b9512 Rewrite a flow test 2017-09-08 13:42:14 -07:00
Carl Lerche
16f0345c16 Update README to reflect progress 2017-09-08 12:50:22 -07:00
Oliver Gould
17bebe719a Increment stream window capacity when sending window update (#67) 2017-09-08 12:24:06 -07:00
Carl Lerche
c47717204c Flow control bug fix (#70)
The requested capacity was not decreased as data is written.
2017-09-08 12:15:46 -07:00
Sean McArthur
14f3f87da6 Merge pull request #66 from carllerche/flow-control-bugs
Fix some flow control bugs
2017-09-07 21:02:33 -07:00
Sean McArthur
b9e9fc64a7 Merge pull request #64 from seanmonstar/tests-ergo-frames
add ergonomics to testing with frames
2017-09-07 20:16:39 -07:00
Sean McArthur
018f00b8db update flow control tests to use frame builders 2017-09-07 17:06:09 -07:00
Sean McArthur
aef11623ac add recv_frame and send_frame extensions for Handle Futures 2017-09-07 17:05:43 -07:00
Sean McArthur
cc70ac1ef2 fix style to match crate 2017-09-07 17:05:07 -07:00
Carl Lerche
ae6bad6cef Fix some flow control bugs
When a stream is closed, connection level capacity should be released
back to the connection and then assigned to other streams waiting for
capacity.
2017-09-07 16:45:20 -07:00
Carl Lerche
9b42dafd24 Extract drive combinator to test support 2017-09-07 15:36:54 -07:00
Carl Lerche
38bbf30b2f Fix bug in prioritization (#63)
The stream buffered data counter was never decremented.
2017-09-07 14:12:21 -07:00
Sean McArthur
342d283cc5 add ergonomics to testing with frames 2017-09-07 13:09:57 -07:00
Sean McArthur
09744f38ef add a ReleaseCapacityTooBig variant to UserError 2017-09-07 08:20:03 -07:00
Sean McArthur
452e49dc3e aggregate WINDOW_UPDATE frames until change is over 50% available 2017-09-07 08:20:03 -07:00
Eliza Weisman
b040ca1478 Add codecov.io coverage reporting (#58) 2017-09-06 16:08:51 -07:00
Carl Lerche
cd76aca6d4 Add test infrastructure to work directly with frames (#56)
This adds a `Codec` based testing API. This is a bit less annoying than writing
at the raw H2 wire protocol level...
2017-09-06 14:18:37 -07:00
Oliver Gould
711086c184 cache cargo dependencies (#54) 2017-09-05 20:17:48 -07:00
Oliver Gould
8b07a4298c Remove the AsyncRead + AsyncWrite type constraint from h2::client::Client (#53) 2017-09-05 20:17:32 -07:00
Carl Lerche
0cc611df35 Add Codec::set_max_send_frame_size 2017-09-05 14:01:32 -07:00
Carl Lerche
c2e6eb35d8 Track HTTP crate 2017-09-05 10:21:31 -07:00
Carl Lerche
b4fa5134f9 Data frame (#50)
* Rename DataFlag -> DataFlags
* Polish Data frame API
2017-09-05 10:00:05 -07:00
eyelash
bbcfffee46 Fix hyper link in README (#51) 2017-09-04 08:55:52 -07:00
Carl Lerche
88d1de2da0 Expose Codec via an unstable flag (#49)
Exposes `Codec` using an unstable flag. This is useful for testing.
2017-09-03 16:17:05 -07:00
Carl Lerche
c122e97127 Refactor errors (#46)
This patch does a bunch of refactoring, mostly around error types, but it also
paves the way to allow `Codec` to be used standalone.

* `Codec` (and `FramedRead` / `FramedWrite`) is broken out into a codec module.
* An h2-codec crate is created that re-exports the frame and codec modules.
* New error types are introduced in the internals:
  * `RecvError` represents errors caused by trying to receive a frame.
  * `SendError` represents errors caused by trying to send a frame.
  * `UserError` is an enum of potential errors caused by invalid usage
    by the user of the lib.
  * `ProtoError` is either a `Reason` or an `io::Error`. However it doesn't
    specify connection or stream level.
  * `h2::Error` is an opaque error type and is the only error type exposed
    by the public API (used to be `ConnectionError`).

There are misc code changes to enable this as well. The biggest is a new "sink"
API for `Codec`. It provides buffer which queues up a frame followed by flush
which writes everything that is queued. This departs from the `Sink` trait in
order to provide more accurate error values. For example, buffer can never fail
(but it will panic if `poll_ready` is not called first).
2017-09-02 11:12:50 -07:00
Carl Lerche
6fd9674759 Validate received content-length header (#43)
If a content-length header is provided, the value should match the sum
of all data frame lengths. If there is a mismatch, then the stream is
reset.
2017-08-31 12:40:02 -04:00
Carl Lerche
0b1fbc4b39 Exclude possibly sensitive data from logs
Header fields and data frames can potentially contain sensitive data.
This change omits these from Debug output which reduces the chance that
this ends up in logs.
2017-08-30 18:23:23 -04:00
Eliza Weisman
a466646e19 Unbox client handshake future (#42) 2017-08-30 18:17:09 -04:00
Carl Lerche
2452cc4423 Validate & convert messages before buffering
Malformed requests and responses should immediately result in a
RST_STREAM. To support this, received header frames are validated and
converted to Request / Response values immediately on receipt and before
buffering.
2017-08-30 18:16:21 -04:00
Carl Lerche
9bb34d907a Thread P generic through all 2017-08-30 18:16:21 -04:00
Carl Lerche
88a7d56a60 PRIORITY frames with id 0 are invalid 2017-08-30 18:16:21 -04:00
Carl Lerche
15f6dfd2c1 Handle invalid stream deps with RST_STREAM 2017-08-30 18:16:21 -04:00
Carl Lerche
14f35f1be6 Handle malformed HEADERS 2017-08-30 18:16:21 -04:00
Carl Lerche
9d45255c75 H2 headers must be lower case 2017-08-30 18:16:21 -04:00
Carl Lerche
91aa1db2ff Misc protocol fixes
* Verify contiuation frame stream ID
* Fix sending RST_STREAM in certain cases.
2017-08-30 18:16:21 -04:00
Carl Lerche
0c8a94aa11 Fix send flow control bug
The send stream state is transitioned before data is buffered. As such,
the stream state could be closed while there is still data to be sent.
2017-08-30 18:16:21 -04:00