Add ALPN to QUIC when using TLS This CL makes our client send ALPN when using QUIC with TLS, makes the server echo the first ALPN value, and allows quic_client to override the ALPN for IETF interop events. gfe-relnote: protected by disabled flag quic_supports_tls_handshake PiperOrigin-RevId: 242682444 Change-Id: I7e60fb61c0afe02283e38598de29df9018b71ee8
diff --git a/quic/core/tls_server_handshaker.h b/quic/core/tls_server_handshaker.h index 1e9b497..e27d896 100644 --- a/quic/core/tls_server_handshaker.h +++ b/quic/core/tls_server_handshaker.h
@@ -61,6 +61,14 @@ // |ssl|. static int SelectCertificateCallback(SSL* ssl, int* out_alert, void* arg); + // Calls SelectAlpn after looking up the TlsServerHandshaker from |ssl|. + static int SelectAlpnCallback(SSL* ssl, + const uint8_t** out, + uint8_t* out_len, + const uint8_t* in, + unsigned in_len, + void* arg); + private: class SignatureCallback : public ProofSource::SignatureCallback { public: @@ -148,6 +156,12 @@ // |*out_alert| the TLS alert value that the server will send. int SelectCertificate(int* out_alert); + // Selects which ALPN to use based on the list sent by the client. + int SelectAlpn(const uint8_t** out, + uint8_t* out_len, + const uint8_t* in, + unsigned in_len); + static TlsServerHandshaker* HandshakerFromSsl(SSL* ssl); State state_ = STATE_LISTENING;