If graceful shutdown is initiated, a GOAWAY of the max stream ID - 1 is
sent, followed by a PING frame, to measure RTT. When the PING is ACKed,
the connection sends a new GOAWAY with the proper last processed stream
ID. From there, once all active streams have completely, the connection
will finally close.
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.
* comments
* wip
* wip
* Sketch out pingpong and keepalive stack modules
PingPong responds to ping requests with acknowledgements.
KeepAlive issues ping requests on idle connections.
* remove keepalive for now
* commentary
* prettify ping_pong's poll
* test ping pong and passthrough
* add buffering test
* Use a fixed-size slice for ping payloads
* Improve pong dispatch
pong messages should be buffered until Stream::poll returns
Async::NotReady or Async::Ready(None) (i.e. such that it is not expected
to be polled again). pong messages are now dispatched when no more data
may be polled or the Sink half is activated.
* revert name change
* touchup
* wip
* Simplify Stream::poll
Now PingPong only holds at most one pending pong and the stream will not
produce additional frames unti the ping has been sent.
Furthermore, we shouldn't have to call inner.poll_complete quite so
frequently.
* avoid Bytes::split_to
* only use buf internally to Ping::load