Introduce granular QPACK encoder/decoder stream error codes.

Add new error codes to QpackInstructionDecoder.  This class is used by
QpackEncoderStreamReceived to decode the encoder stream, by
QpackDecoderStreamReceived to decode the decoder stream, and by
QpackProgressiveDecoder to decode header blocks.  Ignore error codes in
QpackProgressiveDecoder because header block decoding errors are stream errors,
not connection close errors, and unlike CONNECTION_CLOSE frames, RESET_STREAM
frames are not able to convey any extra information other than the mandatory
generic error code.  Convert QpackInstructionDecoder::ErrorCode error codes to
newly added QuicErrorCodes in
QpackEncoderStreamReceiver::OnInstructionDecodingError() and
QpackDecoderStreamReceiver::OnInstructionDecodingError().

QPACK encoder stream errors are detected in QpackEncoderStreamReceiver and in
QpackDecoder.  Swap all QuicErrorCodes to the new ones, and gate them by the
flag in a single place, in QpackDecoder::OnErrorDetected().  Do the same thing
for QPACK decoder stream errors in QpackDecoderStreamReceiver and QpackEncoder.

Protected by FLAGS_quic_reloadable_flag_quic_granular_qpack_error_codes.

PiperOrigin-RevId: 338170616
Change-Id: I40fbf1c04869d74984e20f48c317daa995b6e99d
18 files changed
tree: 94c487bdf6c4e4f193a1fca312e1d737c61b0670
  1. common/
  2. epoll_server/
  3. http2/
  4. quic/
  5. spdy/
  6. CONTRIBUTING.md
  7. LICENSE
  8. README.md
README.md

QUICHE

QUICHE (QUIC, Http/2, Etc) is Google‘s implementation of QUIC and related protocols. It powers Chromium as well as Google’s QUIC servers and some other projects. QUICHE is only supported on little-endian platforms.