Unify and refactor frame type logic in receiving control stream.

An error is signalled under exactly the same conditions, but the error code and
message might change.  In particular, a MAX_PUSH_ID or ACCEPT_CH frame received
by the wrong endpoint as the first frame resulted in a
QUIC_HTTP_MISSING_SETTINGS_FRAME, while a DATA or HEADERS as the first frame
resulted in a QUIC_HTTP_FRAME_UNEXPECTED_ON_CONTROL_STREAM before this CL.
After this CL, any forbidden frame type (for the endpoint) results in
QUIC_HTTP_FRAME_UNEXPECTED_ON_CONTROL_STREAM.

Error messages are also changed to make the code simpler.

OnUnrecoverableError() (used 2 times) is exactly the same as
stream_delegate()->OnStreamError() (used 9 times), this CL changes both
occurrences of the former into the latter for consistency.

HttpDecoder::Visitor methods for frame processing other than *Start() cannot be
called for disallowed frames, this CL adds QUICHE_NOTREACHED() to document that.

The motivation is to prepare for changing the SETTINGS frame logic to accomodate
a SETTINGS frame in ALPS, see
https://vasilvv.github.io/httpbis-alps/draft-vvv-httpbis-alps.html#name-use-of-alps-in-http-3.

PiperOrigin-RevId: 358846826
Change-Id: I0f361fa9899f1bd558603b804a6aad6f4f38b218
3 files changed
tree: e522302b59a20106c3bc8d4e4bf8bea5fba48b3b
  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.

Code can be viewed in CodeSearch in Quiche and is imported into Chromium.