Change TlsServerHandshaker::SetTransportParameters to return a SetTransportParametersResult instead of a boolean. SetTransportParametersResult.success is what the function used to return. The newly returned information, quic_transport_params and early_data_context, are not used yet. (Spin off from cl/346995830) PiperOrigin-RevId: 347693477 Change-Id: I82559ca8306028541a2e036879feb07f7d1148f2
diff --git a/quic/core/tls_server_handshaker.cc b/quic/core/tls_server_handshaker.cc index 0ae78a3..ad79bd9 100644 --- a/quic/core/tls_server_handshaker.cc +++ b/quic/core/tls_server_handshaker.cc
@@ -350,7 +350,11 @@ return true; } -bool TlsServerHandshaker::SetTransportParameters() { +TlsServerHandshaker::SetTransportParametersResult +TlsServerHandshaker::SetTransportParameters() { + SetTransportParametersResult result; + DCHECK(!result.success); + TransportParameters server_params; server_params.perspective = Perspective::IS_SERVER; server_params.supported_versions = @@ -359,31 +363,38 @@ CreateQuicVersionLabel(session()->connection()->version()); if (!handshaker_delegate()->FillTransportParameters(&server_params)) { - return false; + return result; } // Notify QuicConnectionDebugVisitor. session()->connection()->OnTransportParametersSent(server_params); - std::vector<uint8_t> server_params_bytes; - if (!SerializeTransportParameters(session()->connection()->version(), - server_params, &server_params_bytes) || - SSL_set_quic_transport_params(ssl(), server_params_bytes.data(), - server_params_bytes.size()) != 1) { - return false; + { // Ensure |server_params_bytes| is not accessed out of the scope. + std::vector<uint8_t> server_params_bytes; + if (!SerializeTransportParameters(session()->connection()->version(), + server_params, &server_params_bytes) || + SSL_set_quic_transport_params(ssl(), server_params_bytes.data(), + server_params_bytes.size()) != 1) { + return result; + } + result.quic_transport_params = std::move(server_params_bytes); } + if (application_state_) { std::vector<uint8_t> early_data_context; if (!SerializeTransportParametersForTicket( server_params, *application_state_, &early_data_context)) { QUIC_BUG << "Failed to serialize Transport Parameters for ticket."; - return false; + result.early_data_context = std::vector<uint8_t>(); + return result; } SSL_set_quic_early_data_context(ssl(), early_data_context.data(), early_data_context.size()); + result.early_data_context = std::move(early_data_context); application_state_.reset(nullptr); } - return true; + result.success = true; + return result; } void TlsServerHandshaker::SetWriteSecret( @@ -608,7 +619,7 @@ OverrideQuicConfigDefaults(session()->config()); session()->OnConfigNegotiated(); - if (!SetTransportParameters()) { + if (!SetTransportParameters().success) { QUIC_LOG(ERROR) << "Failed to set transport parameters"; return ssl_select_cert_error; } @@ -672,7 +683,7 @@ OverrideQuicConfigDefaults(session()->config()); session()->OnConfigNegotiated(); - if (!SetTransportParameters()) { + if (!SetTransportParameters().success) { QUIC_LOG(ERROR) << "Failed to set transport parameters"; return SSL_TLSEXT_ERR_ALERT_FATAL; }
diff --git a/quic/core/tls_server_handshaker.h b/quic/core/tls_server_handshaker.h index 23bbc1b..1c5eaa6 100644 --- a/quic/core/tls_server_handshaker.h +++ b/quic/core/tls_server_handshaker.h
@@ -165,7 +165,16 @@ TlsServerHandshaker* handshaker_; }; - bool SetTransportParameters(); + struct QUIC_NO_EXPORT SetTransportParametersResult { + bool success = false; + // Empty vector if QUIC transport params are not set successfully. + std::vector<uint8_t> quic_transport_params; + // absl::nullopt if there is no application state to begin with. + // Empty vector if application state is not set successfully. + absl::optional<std::vector<uint8_t>> early_data_context; + }; + + SetTransportParametersResult SetTransportParameters(); bool ProcessTransportParameters(const SSL_CLIENT_HELLO* client_hello, std::string* error_details);