Signal error on PUSH_PROMISE and CANCEL_PUSH frames.

Since HttpEncoder is not capable of sending MAX_PUSH_ID frames, receiving these
frames is a violation of the spec.

For simplicity, use the error code H3_FRAME_ERROR.  This is incorrect, because
receiving a PUSH_PROMISE frame by the client on the control stream, or
receiving a CANCEL_PUSH frame either by the client or by the server on the control
stream should trigger an H3_ID_ERROR, and these frames in other cases should
trigger a H3_FRAME_UNEXPECTED error.  However, it is expected to be exceedingly
rare for any endpoint to send such frames without receiving a MAX_PUSH_ID frame,
so the error code does not matter as much as actually closing the connection.

Protected by FLAGS_quic_reloadable_flag_quic_error_on_http3_push.

PiperOrigin-RevId: 370762371
Change-Id: I18d4d29e95faf9919858bada73ef0b5912afbd8b
9 files changed
tree: 565c5fbd21c26f1d194b745525a9f42c0b206140
  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.