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