From ee2139bfb289e67ef8ded524056ee0604d7d8620 Mon Sep 17 00:00:00 2001 From: Alessandro Ghedini Date: Tue, 19 Mar 2019 11:54:09 +0000 Subject: [PATCH 1/3] Allow not creating QPACK codec streams As discussed in Tokyo, we should allow endpoints to avoid creating the QPACK control streams if they are unnecessary, but endpoints should be allowed to create them either way. Fixes #2100 --- draft-ietf-quic-qpack.md | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/draft-ietf-quic-qpack.md b/draft-ietf-quic-qpack.md index 64a87e5a74..94b4f22d4f 100644 --- a/draft-ietf-quic-qpack.md +++ b/draft-ietf-quic-qpack.md @@ -619,14 +619,22 @@ QPACK defines two unidirectional stream types: It carries an unframed sequence of decoder instructions from decoder to encoder. - HTTP/3 endpoints contain a QPACK encoder and decoder. Each endpoint MUST -initiate a single encoder stream and decoder stream. Receipt of a second -instance of either stream type be MUST treated as a connection error of type +initiate at most one encoder stream and one decoder stream. Receipt of a second +instance of either stream type MUST be treated as a connection error of type HTTP_WRONG_STREAM_COUNT. These streams MUST NOT be closed. Closure of either unidirectional stream type MUST be treated as a connection error of type HTTP_CLOSED_CRITICAL_STREAM. +An endpoint MAY avoid creating its own encoder stream if the maximum size of +the dynamic table permitted by the peer is zero. + +An endpoint MAY avoid creating its own decoder stream if the maximum size of +its own dynamic table is zero. + +An endpoint MUST allow its peer to create both encoder and decoder streams +even if the connection's settings prevent their use. + ## Encoder Instructions {#encoder-instructions} Table updates can add a table entry, possibly using existing entries to avoid From a50228af7563e8acd2931f60454e928936b8fcef Mon Sep 17 00:00:00 2001 From: Alessandro Ghedini Date: Tue, 2 Apr 2019 22:21:44 +0100 Subject: [PATCH 2/3] Make avoidance of encoder stream creation more explicitly permissive --- draft-ietf-quic-qpack.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/draft-ietf-quic-qpack.md b/draft-ietf-quic-qpack.md index 94b4f22d4f..86edc8e8c1 100644 --- a/draft-ietf-quic-qpack.md +++ b/draft-ietf-quic-qpack.md @@ -626,8 +626,9 @@ HTTP_WRONG_STREAM_COUNT. These streams MUST NOT be closed. Closure of either unidirectional stream type MUST be treated as a connection error of type HTTP_CLOSED_CRITICAL_STREAM. -An endpoint MAY avoid creating its own encoder stream if the maximum size of -the dynamic table permitted by the peer is zero. +An endpoint MAY avoid creating its own encoder stream if it's not going to be +used (for example if the endpoint doesn't wish to use the dynamic table, or if +the maximum size of the dynamic table permitted by the peer is zero). An endpoint MAY avoid creating its own decoder stream if the maximum size of its own dynamic table is zero. From fa082225736a5145d339a7314cb413a30071a996 Mon Sep 17 00:00:00 2001 From: Alessandro Ghedini Date: Fri, 31 May 2019 21:23:23 +0100 Subject: [PATCH 3/3] Use 'at most' language for both encoder and decoder --- draft-ietf-quic-qpack.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/draft-ietf-quic-qpack.md b/draft-ietf-quic-qpack.md index 86edc8e8c1..e78ce5f4f2 100644 --- a/draft-ietf-quic-qpack.md +++ b/draft-ietf-quic-qpack.md @@ -620,10 +620,10 @@ QPACK defines two unidirectional stream types: to encoder. HTTP/3 endpoints contain a QPACK encoder and decoder. Each endpoint MUST -initiate at most one encoder stream and one decoder stream. Receipt of a second -instance of either stream type MUST be treated as a connection error of type -HTTP_WRONG_STREAM_COUNT. These streams MUST NOT be closed. Closure of either -unidirectional stream type MUST be treated as a connection error of type +initiate at most one encoder stream and at most one decoder stream. Receipt of a +second instance of either stream type MUST be treated as a connection error of +type HTTP_WRONG_STREAM_COUNT. These streams MUST NOT be closed. Closure of +either unidirectional stream type MUST be treated as a connection error of type HTTP_CLOSED_CRITICAL_STREAM. An endpoint MAY avoid creating its own encoder stream if it's not going to be