Add CurrentSupportHttp3Versions() to return all IETF QUIC versions.
This interface will be used in Envoy.
PiperOrigin-RevId: 382803566
diff --git a/quic/core/quic_versions.cc b/quic/core/quic_versions.cc
index ba2ec7e..b0fd99b 100644
--- a/quic/core/quic_versions.cc
+++ b/quic/core/quic_versions.cc
@@ -297,6 +297,18 @@
return versions;
}
+ParsedQuicVersionVector CurrentSupportedHttp3Versions() {
+ ParsedQuicVersionVector versions;
+ for (const ParsedQuicVersion& version : CurrentSupportedVersions()) {
+ if (version.UsesHttp3()) {
+ versions.push_back(version);
+ }
+ }
+ QUIC_BUG_IF(no_version_uses_http3, versions.empty())
+ << "No version speaking Http3 found.";
+ return versions;
+}
+
ParsedQuicVersion ParseQuicVersionLabel(QuicVersionLabel version_label) {
for (const ParsedQuicVersion& version : AllSupportedVersions()) {
if (version_label == CreateQuicVersionLabel(version)) {
diff --git a/quic/core/quic_versions.h b/quic/core/quic_versions.h
index 75a6826..52e829c 100644
--- a/quic/core/quic_versions.h
+++ b/quic/core/quic_versions.h
@@ -446,6 +446,10 @@
// PROTOCOL_TLS1_3.
QUIC_EXPORT_PRIVATE ParsedQuicVersionVector CurrentSupportedVersionsWithTls();
+// Returns a subset of CurrentSupportedVersions() using HTTP/3 at the HTTP
+// layer.
+QUIC_EXPORT_PRIVATE ParsedQuicVersionVector CurrentSupportedHttp3Versions();
+
// Returns QUIC version of |index| in result of |versions|. Returns
// UnsupportedQuicVersion() if |index| is out of bounds.
QUIC_EXPORT_PRIVATE ParsedQuicVersionVector
diff --git a/quic/core/quic_versions_test.cc b/quic/core/quic_versions_test.cc
index c9bc8b3..31e365e 100644
--- a/quic/core/quic_versions_test.cc
+++ b/quic/core/quic_versions_test.cc
@@ -445,6 +445,25 @@
}
}
+TEST_F(QuicVersionsTest, CurrentSupportedHttp3Versions) {
+ ParsedQuicVersionVector h3_versions = CurrentSupportedHttp3Versions();
+ ParsedQuicVersionVector all_current_supported_versions =
+ CurrentSupportedVersions();
+ for (auto& version : all_current_supported_versions) {
+ bool version_is_h3 = false;
+ for (auto& h3_version : h3_versions) {
+ if (version == h3_version) {
+ EXPECT_TRUE(version.UsesHttp3());
+ version_is_h3 = true;
+ break;
+ }
+ }
+ if (!version_is_h3) {
+ EXPECT_FALSE(version.UsesHttp3());
+ }
+ }
+}
+
} // namespace
} // namespace test
} // namespace quic