Add trace messages for QuicCryptoServerConfig::ProcessClientHelloContext.
This allows us to tell if a gQUIC connection trace is 0RTT or not.
PiperOrigin-RevId: 432245164
diff --git a/quic/core/crypto/quic_crypto_server_config.cc b/quic/core/crypto/quic_crypto_server_config.cc
index ee0ed33..ec4c038 100644
--- a/quic/core/crypto/quic_crypto_server_config.cc
+++ b/quic/core/crypto/quic_crypto_server_config.cc
@@ -12,6 +12,7 @@
#include "absl/base/attributes.h"
#include "absl/strings/escaping.h"
+#include "absl/strings/str_format.h"
#include "absl/strings/string_view.h"
#include "absl/types/optional.h"
#include "third_party/boringssl/src/include/openssl/sha.h"
@@ -37,6 +38,7 @@
#include "quic/core/proto/crypto_server_config_proto.h"
#include "quic/core/proto/source_address_token_proto.h"
#include "quic/core/quic_clock.h"
+#include "quic/core/quic_connection_context.h"
#include "quic/core/quic_packets.h"
#include "quic/core/quic_socket_address_coder.h"
#include "quic/core/quic_types.h"
@@ -116,6 +118,40 @@
return false;
}
+std::string FormatCryptoHandshakeMessageForTrace(
+ const CryptoHandshakeMessage* message) {
+ if (message == nullptr) {
+ return "<null message>";
+ }
+
+ std::string s = QuicTagToString(message->tag());
+
+ // Append the reasons for REJ.
+ if (const auto it = message->tag_value_map().find(kRREJ);
+ it != message->tag_value_map().end()) {
+ const std::string& value = it->second;
+ // The value is a vector of uint32_t(s).
+ if (value.size() % sizeof(uint32_t) == 0) {
+ absl::StrAppend(&s, " RREJ:[");
+ // Append comma-separated list of reasons to |s|.
+ for (size_t j = 0; j < value.size(); j += sizeof(uint32_t)) {
+ uint32_t reason;
+ memcpy(&reason, value.data() + j, sizeof(reason));
+ if (j > 0) {
+ absl::StrAppend(&s, ",");
+ }
+ absl::StrAppend(&s, CryptoUtils::HandshakeFailureReasonToString(
+ static_cast<HandshakeFailureReason>(reason)));
+ }
+ absl::StrAppend(&s, "]");
+ } else {
+ absl::StrAppendFormat(&s, " RREJ:[unexpected length:%u]", value.size());
+ }
+ }
+
+ return s;
+}
+
} // namespace
// static
@@ -217,6 +253,8 @@
void QuicCryptoServerConfig::ProcessClientHelloContext::Fail(
QuicErrorCode error,
const std::string& error_details) {
+ QUIC_TRACEPRINTF("ProcessClientHello failed: error=%s, details=%s",
+ QuicErrorCodeToString(error), error_details);
done_cb_->Run(error, error_details, nullptr, nullptr, nullptr);
done_cb_ = nullptr;
}
@@ -225,6 +263,9 @@
std::unique_ptr<CryptoHandshakeMessage> message,
std::unique_ptr<DiversificationNonce> diversification_nonce,
std::unique_ptr<ProofSource::Details> proof_source_details) {
+ QUIC_TRACEPRINTF("ProcessClientHello succeeded: %s",
+ FormatCryptoHandshakeMessageForTrace(message.get()));
+
done_cb_->Run(QUIC_NO_ERROR, std::string(), std::move(message),
std::move(diversification_nonce),
std::move(proof_source_details));