From 64288b690416a68961c79ee0f37b67181e3abc65 Mon Sep 17 00:00:00 2001 From: Martin Thomson Date: Fri, 21 Apr 2017 09:53:37 +1000 Subject: [PATCH] Allow STREAM_BLOCKED on unopenable streams There's a problem I discovered here. We don't actually describe a transition from idle to half-closed or closed (see discussion about half-closing and unidirectional streams for more on this problem). The text mentions that RST_STREAM on an idle stream is permitted, but doesn't actually define any transitions. I have removed the allowance for RST_STREAM, but I believe that we need that transition. A new issue will be opened. --- draft-ietf-quic-transport.md | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/draft-ietf-quic-transport.md b/draft-ietf-quic-transport.md index cdb7d6fceb..e58f9598b1 100644 --- a/draft-ietf-quic-transport.md +++ b/draft-ietf-quic-transport.md @@ -1785,6 +1785,11 @@ Stream ID: : A 32-bit unsigned number indicating the stream which is flow control blocked. +An endpoint MAY send a STREAM_BLOCKED frame for a stream that exceeds the +maximum stream ID set by its peer (see {{frame-max-stream-id}}). This does not +open the stream, but informs the peer that a new stream was needed, but the +stream limit prevented the creation of the stream. + ## RST_STREAM Frame {#frame-rst-stream} @@ -2151,9 +2156,10 @@ All streams start in the "idle" state. The following transitions are valid from this state: -Sending or receiving a STREAM frame causes the stream to become "open". The -stream identifier is selected as described in {{stream-identifiers}}. The same -STREAM frame can also cause a stream to immediately become "half-closed". +Sending or receiving a STREAM frame causes the identified stream to become +"open". The stream identifier for a new stream is selected as described in +{{stream-identifiers}}. The same STREAM frame can also cause a stream to +immediately become "half-closed" if the FIN flag is set. Receiving a STREAM frame on a peer-initiated stream (that is, a packet sent by a server on an even-numbered stream or a client packet on an odd-numbered stream) @@ -2167,8 +2173,9 @@ A RST_STREAM frame on an "idle" stream causes the stream to become "half-closed (local)"; receiving RST_STREAM causes the stream to become "half-closed (remote)". -Receiving any frame other than STREAM or RST_STREAM on a stream in this state -MUST be treated as a connection error ({{error-handling}}) of type YYYY. +Receiving any frame other than STREAM, MAX_STREAM_DATA, STREAM_BLOCKED, or +RST_STREAM on a stream in this state MUST be treated as a connection error +({{error-handling}}) of type YYYY. An endpoint MUST NOT send a STREAM of RST_STREAM frame for a stream ID that is higher than the peers advertised maximum stream ID (see