Draft: draft-ietf-quic-qpack

Commentary: I noticed that the QPACK error codes still started with the HTTPQPACK prefix , while the HTTP document has shifted to H3 as the prefix . I shortened the QPACK prefix to simply " QPACK " , though " H3QPACK " could work , too . Along the way , I noticed that backticks were sometimes , but not always , used when referring to the error code names . We have n't been in the HTTP document , so I reconciled them to not . Again , this could go the opposite way . I also noticed that the settings are " SETTINGSQPACK " except in the IANA registration where they 're simply " QPACK " . I did n't touch those , but am open to feedback on whether that 's worth trimming / reconciling . 
 I do n't need your approval , but I kind of do need 
 Well , you did ask :) 
 could you review and potentially merge ? 
 Do it . You do n't need my approval to do something that is so self - evidently a good idea . QPACK _ prefix WFM
Paragraph (version A):
The decoder specifies an upper bound on the number of streams which
can be blocked using the SETTINGS_QPACK_BLOCKED_STREAMS setting; see
configuration.  An encoder MUST limit the number of streams which
could become blocked to the value of SETTINGS_QPACK_BLOCKED_STREAMS
at all times.  If a decoder encounters more blocked streams than it
promised to support, it MUST treat this as a connection error of type
HTTP_QPACK_DECOMPRESSION_FAILED.
Paragraph (version B):
The decoder specifies an upper bound on the number of streams which
can be blocked using the SETTINGS_QPACK_BLOCKED_STREAMS setting; see
configuration.  An encoder MUST limit the number of streams which
could become blocked to the value of SETTINGS_QPACK_BLOCKED_STREAMS
at all times.  If a decoder encounters more blocked streams than it
promised to support, it MUST treat this as a connection error of type
QPACK_DECOMPRESSION_FAILED.
Paragraph (version A):
When processing header blocks, the decoder expects the Required
Insert Count to exactly match the value defined in blocked-streams.
If it encounters a smaller value than expected, it MUST treat this as
a connection error of type HTTP_QPACK_DECOMPRESSION_FAILED; see
invalid-references.  If it encounters a larger value than expected,
it MAY treat this as a connection error of type
HTTP_QPACK_DECOMPRESSION_FAILED.
Paragraph (version B):
When processing header blocks, the decoder expects the Required
Insert Count to exactly match the value defined in blocked-streams.
If it encounters a smaller value than expected, it MUST treat this as
a connection error of type QPACK_DECOMPRESSION_FAILED; see invalid-
references.  If it encounters a larger value than expected, it MAY
treat this as a connection error of type QPACK_DECOMPRESSION_FAILED.
Paragraph (version A):
If the decoder encounters a reference in a header block
representation to a dynamic table entry which has already been
evicted or which has an absolute index greater than or equal to the
declared Required Insert Count (header-prefix), it MUST treat this as
a connection error of type "HTTP_QPACK_DECOMPRESSION_FAILED".
Paragraph (version A):
If the decoder encounters a reference in an encoder instruction to a
dynamic table entry which has already been evicted, it MUST treat
this as a connection error of type "HTTP_QPACK_ENCODER_STREAM_ERROR".
Paragraph (version B):
If the decoder encounters a reference in a header block
representation to a dynamic table entry which has already been
evicted or which has an absolute index greater than or equal to the
declared Required Insert Count (header-prefix), it MUST treat this as
a connection error of type QPACK_DECOMPRESSION_FAILED.
Paragraph (version B):
If the decoder encounters a reference in an encoder instruction to a
dynamic table entry which has already been evicted, it MUST treat
this as a connection error of type QPACK_ENCODER_STREAM_ERROR.
Paragraph (version A):
When the decoder encounters an invalid static table index in a header
block representation it MUST treat this as a connection error of type
"HTTP_QPACK_DECOMPRESSION_FAILED".  If this index is received on the
encoder stream, this MUST be treated as a connection error of type
"HTTP_QPACK_ENCODER_STREAM_ERROR".
Paragraph (version B):
When the decoder encounters an invalid static table index in a header
block representation it MUST treat this as a connection error of type
QPACK_DECOMPRESSION_FAILED.  If this index is received on the encoder
stream, this MUST be treated as a connection error of type
QPACK_ENCODER_STREAM_ERROR.
Paragraph (version A):
Before a new entry is added to the dynamic table, entries are evicted
from the end of the dynamic table until the size of the dynamic table
is less than or equal to (table capacity - size of new entry).  The
encoder MUST NOT cause a dynamic table entry to be evicted unless
that entry is evictable; see blocked-insertion.  The new entry is
then added to the table.  It is an error if the encoder attempts to
add an entry that is larger than the dynamic table capacity; the
decoder MUST treat this as a connection error of type
"HTTP_QPACK_ENCODER_STREAM_ERROR".
Paragraph (version B):
Before a new entry is added to the dynamic table, entries are evicted
from the end of the dynamic table until the size of the dynamic table
is less than or equal to (table capacity - size of new entry).  The
encoder MUST NOT cause a dynamic table entry to be evicted unless
that entry is evictable; see blocked-insertion.  The new entry is
then added to the table.  It is an error if the encoder attempts to
add an entry that is larger than the dynamic table capacity; the
decoder MUST treat this as a connection error of type
QPACK_ENCODER_STREAM_ERROR.
Paragraph (version A):
For clients using 0-RTT data in HTTP/3, the server's maximum table
capacity is the remembered value of the setting, or zero if the value
was not previously sent.  When the client's 0-RTT value of the
SETTING is zero, the server MAY set it to a non-zero value in its
SETTINGS frame.  If the remembered value is non-zero, the server MUST
send the same non-zero value in its SETTINGS frame.  If it specifies
any other value, or omits SETTINGS_QPACK_MAX_TABLE_CAPACITY from
SETTINGS, the encoder must treat this as a connection error of type
"HTTP_QPACK_DECODER_STREAM_ERROR".
Paragraph (version B):
For clients using 0-RTT data in HTTP/3, the server's maximum table
capacity is the remembered value of the setting, or zero if the value
was not previously sent.  When the client's 0-RTT value of the
SETTING is zero, the server MAY set it to a non-zero value in its
SETTINGS frame.  If the remembered value is non-zero, the server MUST
send the same non-zero value in its SETTINGS frame.  If it specifies
any other value, or omits SETTINGS_QPACK_MAX_TABLE_CAPACITY from
SETTINGS, the encoder must treat this as a connection error of type
QPACK_DECODER_STREAM_ERROR.
Paragraph (version A):
The new capacity MUST be lower than or equal to the limit described
in maximum-dynamic-table-capacity.  In HTTP/3, this limit is the
value of the SETTINGS_QPACK_MAX_TABLE_CAPACITY parameter
(configuration) received from the decoder.  The decoder MUST treat a
new dynamic table capacity value that exceeds this limit as a
connection error of type "HTTP_QPACK_ENCODER_STREAM_ERROR".
Paragraph (version B):
The new capacity MUST be lower than or equal to the limit described
in maximum-dynamic-table-capacity.  In HTTP/3, this limit is the
value of the SETTINGS_QPACK_MAX_TABLE_CAPACITY parameter
(configuration) received from the decoder.  The decoder MUST treat a
new dynamic table capacity value that exceeds this limit as a
connection error of type QPACK_ENCODER_STREAM_ERROR.
Paragraph (version A):
If an encoder receives a Header Acknowledgement instruction referring
to a stream on which every header block with a non-zero Required
Insert Count has already been acknowledged, that MUST be treated as a
connection error of type "HTTP_QPACK_DECODER_STREAM_ERROR".
Paragraph (version B):
If an encoder receives a Header Acknowledgement instruction referring
to a stream on which every header block with a non-zero Required
Insert Count has already been acknowledged, that MUST be treated as a
connection error of type QPACK_DECODER_STREAM_ERROR.
Paragraph (version A):
An encoder that receives an Increment field equal to zero, or one
that increases the Known Received Count beyond what the encoder has
sent MUST treat this as a connection error of type
"HTTP_QPACK_DECODER_STREAM_ERROR".
Paragraph (version B):
An encoder that receives an Increment field equal to zero, or one
that increases the Known Received Count beyond what the encoder has
sent MUST treat this as a connection error of type
QPACK_DECODER_STREAM_ERROR.
Paragraph (version A):
The decoder can reconstruct the Required Insert Count using an
algorithm such as the following.  If the decoder encounters a value
of EncodedInsertCount that could not have been produced by a
conformant encoder, it MUST treat this as a connection error of type
"HTTP_QPACK_DECOMPRESSION_FAILED".
Paragraph (version B):
The decoder can reconstruct the Required Insert Count using an
algorithm such as the following.  If the decoder encounters a value
of EncodedInsertCount that could not have been produced by a
conformant encoder, it MUST treat this as a connection error of type
QPACK_DECOMPRESSION_FAILED.