Change QuartcClientEndpoint to handle client-side version negotiation.

This allows Quartc to stop forcing the "no connection version negotiation" flags
to false, as QuartcEndpoint can now handle version negotiation properly in
either case.  (QuartcServerEndpoint already handles server-side version
negotiation through the QuartcDispatcher.)  In-connection version negotiation is
not fully reliable anyway, as some features of new QUIC versions cannot be
enabled or disabled in-place within a QuicConnection object (for example,
changes to how stream ids are allocated).

This only requires three changes:
 - QuartcEndpoint::Delegate extends QuartcSession::Delegate
 - QuartcClientEndpoint sits between the session and the final delegate
 - When QuartcClientEndpoint sees a QUIC_INVALID_VERSION error, it picks another
   version and tries again

This change is mostly cleanup to combine Endpoint and Session delegates and add
required overrides to existing delegates.

The only other minor change required is that QuartcMediaTransport must now
accept more than one call to OnSessionCreated().  All we have to do is remove
the DCHECK to allow this--nothing else assumes it will only happen once.

gfe-relnote: n/a (Quartc only)
PiperOrigin-RevId: 248378366
Change-Id: I442bd69e45f5d65e43d3e99118159f11dc595169
10 files changed
tree: f4df908d970924652f122bf777a15486bedad31c
  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.

The code is currently in process of being moved from https://cs.chromium.org/chromium/src/net/third_party/ into this repository. Please excuse our appearance while we're under construction.