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);