Commit Graph

62 Commits

Author SHA1 Message Date
Sean McArthur
f8efb053b9 split Client into (Client, Connection) (#107)
The Connection type is a `Future` that drives all of the IO of the
client connection.

The Client type is separate, and is used to send requests into the
connection.
2017-09-28 16:55:12 -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
38bbf30b2f Fix bug in prioritization (#63)
The stream buffered data counter was never decremented.
2017-09-07 14:12:21 -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
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
14f35f1be6 Handle malformed HEADERS 2017-08-30 18:16:21 -04:00
Carl Lerche
b0e6867877 Fix warnings 2017-08-24 15:52:01 -07:00
Carl Lerche
807d2b7317 Wire in recv flow control (#26) 2017-08-23 11:22:24 -07:00
Carl Lerche
8a15663ed2 Progress towards allowing large writes 2017-08-11 16:57:51 -07:00
Carl Lerche
32d4c2d5a9 Many more changes 2017-08-11 12:00:22 -07:00
Carl Lerche
c439232ed2 Handle more H2 details 2017-08-10 21:08:57 -07:00
Carl Lerche
71acfe3961 Start hooking up data receiving 2017-08-07 12:17:52 -07:00
Carl Lerche
dd8412d660 Much work 2017-08-03 15:50:13 -07:00
Carl Lerche
7a804601c5 A lot of structural work 2017-08-03 11:40:50 -07:00
Carl Lerche
e810b30999 Track http crate changes 2017-08-03 10:00:50 -07:00
Carl Lerche
9f9bf85168 More restructuring 2017-08-02 14:48:10 -07:00
Carl Lerche
22ebf186c6 Move state into proto::streams 2017-08-02 12:57:49 -07:00
Carl Lerche
33bdc057d6 Restructure proto
The existing code has been moved out and is being copied back piece / by
piece while restructuring the code to (hopefully) be more manageable.
2017-08-02 09:42:10 -07:00
Carl Lerche
13d6866ee8 Simplify control streams (#8) 2017-07-26 16:53:31 -07:00
Oliver Gould
596b758d4f Update transport documentation
Now laid out with all send modules over all recv modules
2017-07-24 22:59:09 +00:00
Oliver Gould
1dbbac2c00 split FlowControl into FlowControlRecv and FlowControlSend 2017-07-24 22:01:16 +00:00
Oliver Gould
40b57cb7fa touchup 2017-07-24 16:57:44 +00:00
Oliver Gould
9a95fc5eef add stream and sink proxy macros 2017-07-24 16:40:29 +00:00
Oliver Gould
9e4464e385 update proxy macro to support additional type params 2017-07-24 15:57:10 +00:00
Oliver Gould
275b835023 unify file/type naming 2017-07-24 15:42:16 +00:00
Oliver Gould
1069629aef put each interface in its own file 2017-07-24 15:33:48 +00:00
Oliver Gould
5b3f27c5fa Use macros for proxying internal interfaces. 2017-07-23 19:18:14 +00:00
Oliver Gould
df5f31a63c narrow the surface area of the ControlSettings api to expose only a few remote settings 2017-07-23 18:34:50 +00:00
Oliver Gould
82ba0dde71 update comments 2017-07-23 18:01:02 +00:00
Oliver Gould
ab4f85ea2f wip: stream state management seems good, but tests fail 2017-07-22 17:30:40 +00:00
Oliver Gould
d7042097c4 wip: stream open 2017-07-21 16:35:00 +00:00
Oliver Gould
44edd6a4d4 clear some warnings 2017-07-20 18:29:36 +00:00
Oliver Gould
a62d3dda54 wip: refactor, compiles 2017-07-20 14:51:27 +00:00
Oliver Gould
0d84c98c89 wip 2017-07-19 19:53:33 +00:00
Oliver Gould
df589f2fde Address feedback on ControlFlow and FlowControl
ControlFlow::poll_window_update now exposes, effectively, a Stream of
WindowUpdates.  Callers no longer poll on invidual stream IDs. To
accomplish this, FlowControl maintains a queue of pending remote stream
ids.

Improve/shorten naming throughout FlowControl.

FlowControlState::check_window has been added so that FlowControl is now
consistent in the face of stream-level flow control errors.

Connection now exposes the ControlFlow functions without exposing the
ControlFlow interface publicly.
2017-07-18 22:36:41 +00:00
Oliver Gould
79d3aee1dc refuse streams that would violate max concurrency settings.
improve ping control API
2017-07-17 22:18:03 +00:00
Oliver Gould
fb4f0bc5af resets too 2017-07-17 08:18:38 +00:00
Oliver Gould
76cb8e15fd move streammap to state.rs 2017-07-17 05:02:11 +00:00
Oliver Gould
d448c53472 expose a ControlPing api
document transports

properly handle connection flow control tracking.
2017-07-16 23:37:31 +00:00
Oliver Gould
b0fd2bfac0 test flow control state 2017-07-16 20:11:36 +00:00
Oliver Gould
06d9978c53 nit on naming 2017-07-16 17:08:39 +00:00
Oliver Gould
76dbb5d285 wire up flow control polling through connection 2017-07-16 16:10:01 +00:00
Oliver Gould
85626f5a79 reintroduce state tracking, separate from flow tracking 2017-07-16 02:15:37 +00:00
Oliver Gould
e90a6e9250 wip: start splitting out stream management 2017-07-15 22:50:13 +00:00
Oliver Gould
59c92e1089 wire up remote settings application 2017-07-15 21:07:21 +00:00
Oliver Gould
1ed4b7e56a wip: Sketch out stream state refactor
introduce the StreamTransporter trait, which exposes a map containing
all active stream states.

add skeletons for StreamTracker and FlowControl.  StreamTracker drives
all state changes
2017-07-15 18:39:45 +00:00
Oliver Gould
cbd3e17283 ok, starting to look good 2017-07-13 02:24:36 +00:00
Oliver Gould
41ffd1d44f closer to flow control 2017-07-12 21:04:58 +00:00
Oliver Gould
b9f3556070 Merge branch 'master' into ver/flowio 2017-07-10 01:15:36 +00:00