Automatically send PING acks by default in OgHttp2Session.

This CL allows OgHttp2Session to automatically enqueue PING ack frames in
response to receiving non-ack PINGs from its peer. Note that OgHttp2Session
already automatically enqueues SETTINGS ack frames:

This PING ack addition aligns OgHttp2Session with default nghttp2 behavior.
This CL also adds an option to OgHttp2Session::Options to disable automatic
PING acks, analogous to nghttp2_option_set_no_auto_ping_ack().

The default automatic PING acks are helpful in Envoy's frame flood detection
tests. With this CL, the following four tests now pass with oghttp2 migration
cl/392724171, as hypothesized/hoped for in http://b/201799377#comment2:
  - Http2FloodMitigationTest.UpstreamFloodDetectionIsOnByDefault
  - Http2FloodMitigationTest.UpstreamPingFlood
  - Http2FloodMitigationTest.UpstreamRstStreamOnStreamIdleTimeout
  - Http2FloodMitigationTest.UpstreamRstStreamOnDownstreamRemoteClose

PiperOrigin-RevId: 405915725
5 files changed
tree: 8207243511fd5b08ee8b98d940e198e239faca13
  1. common/
  2. epoll_server/
  3. http2/
  4. quic/
  5. spdy/


QUICHE stands for QUIC, Http/2, Etc. It is Google‘s production-ready implementation of QUIC, HTTP/2, HTTP/3, and related protocols and tools. It powers Google’s servers, Chromium, Envoy, and other projects. It is actively developed and maintained.

There are two public QUICHE repositories. Either one may be used by embedders, as they are automatically kept in sync:

To embed QUICHE in your project, platform APIs need to be implemented and build files need to be created. Note that it is on the QUICHE team's roadmap to include default implementation for all platform APIs and to open-source build files. In the meanwhile, take a look at open source embedders like Chromium and Envoy to get started:

To contribute to QUICHE, follow instructions at

QUICHE is only supported on little-endian platforms.