Print non-printable QUIC tags as hex. This is particularly useful when displaying IETF QUIC draft versions that contain 0xff. gfe-relnote: Print non-printable QUIC tags as hex. Protected by gfe2_reloadable_flag_quic_print_tag_hex. PiperOrigin-RevId: 243859884 Change-Id: I8d48edc219ecd6329acf89d4f627cfbd6bf54f74
diff --git a/quic/core/quic_tag.cc b/quic/core/quic_tag.cc index a85f546..109803d 100644 --- a/quic/core/quic_tag.cc +++ b/quic/core/quic_tag.cc
@@ -8,6 +8,8 @@ #include <string> #include "net/third_party/quiche/src/quic/platform/api/quic_arraysize.h" +#include "net/third_party/quiche/src/quic/platform/api/quic_flag_utils.h" +#include "net/third_party/quiche/src/quic/platform/api/quic_flags.h" #include "net/third_party/quiche/src/quic/platform/api/quic_text_utils.h" namespace quic { @@ -34,6 +36,9 @@ } std::string QuicTagToString(QuicTag tag) { + if (GetQuicReloadableFlag(quic_print_tag_hex) && tag == 0) { + return "0"; + } char chars[sizeof tag]; bool ascii = true; const QuicTag orig_tag = tag; @@ -55,7 +60,14 @@ return std::string(chars, sizeof(chars)); } - return QuicTextUtils::Uint64ToString(orig_tag); + if (!GetQuicReloadableFlag(quic_print_tag_hex)) { + return QuicTextUtils::Uint64ToString(orig_tag); + } + + QUIC_RELOADABLE_FLAG_COUNT(quic_print_tag_hex); + + return QuicTextUtils::HexEncode(reinterpret_cast<const char*>(&orig_tag), + sizeof(orig_tag)); } uint32_t MakeQuicTag(char a, char b, char c, char d) {
diff --git a/quic/core/quic_tag_test.cc b/quic/core/quic_tag_test.cc index 88e636a..20af4ee 100644 --- a/quic/core/quic_tag_test.cc +++ b/quic/core/quic_tag_test.cc
@@ -5,6 +5,7 @@ #include "net/third_party/quiche/src/quic/core/quic_tag.h" #include "net/third_party/quiche/src/quic/core/crypto/crypto_protocol.h" +#include "net/third_party/quiche/src/quic/platform/api/quic_flags.h" #include "net/third_party/quiche/src/quic/platform/api/quic_test.h" namespace quic { @@ -18,9 +19,12 @@ EXPECT_EQ("SNO ", QuicTagToString(kServerNonceTag)); EXPECT_EQ("CRT ", QuicTagToString(kCertificateTag)); EXPECT_EQ("CHLO", QuicTagToString(MakeQuicTag('C', 'H', 'L', 'O'))); - // A tag that contains a non-printing character will be printed as a decimal - // number. - EXPECT_EQ("525092931", QuicTagToString(MakeQuicTag('C', 'H', 'L', '\x1f'))); + if (!GetQuicReloadableFlag(quic_print_tag_hex)) { + EXPECT_EQ("525092931", QuicTagToString(MakeQuicTag('C', 'H', 'L', '\x1f'))); + return; + } + // A tag that contains a non-printing character will be printed as hex. + EXPECT_EQ("43484c1f", QuicTagToString(MakeQuicTag('C', 'H', 'L', '\x1f'))); } TEST_F(QuicTagTest, MakeQuicTag) {
diff --git a/quic/core/quic_versions.cc b/quic/core/quic_versions.cc index ef2657c..4f1b29c 100644 --- a/quic/core/quic_versions.cc +++ b/quic/core/quic_versions.cc
@@ -408,6 +408,7 @@ SetQuicReloadableFlag(quic_use_uber_loss_algorithm, true); SetQuicReloadableFlag(quic_use_uber_received_packet_manager, true); SetQuicReloadableFlag(quic_validate_packet_number_post_decryption, true); + SetQuicReloadableFlag(quic_print_tag_hex, true); SetQuicRestartFlag(quic_enable_accept_random_ipn, true); }