#include "quiche/quic/core/quic_versions.h"
#include <algorithm>
#include <ostream>
#include <string>
#include <vector>
#include "absl/base/macros.h"
#include "absl/strings/numbers.h"
#include "absl/strings/str_cat.h"
#include "absl/strings/str_split.h"
#include "quiche/quic/core/crypto/quic_random.h"
#include "quiche/quic/core/quic_tag.h"
#include "quiche/quic/core/quic_types.h"
#include "quiche/quic/platform/api/quic_bug_tracker.h"
#include "quiche/quic/platform/api/quic_flag_utils.h"
#include "quiche/quic/platform/api/quic_flags.h"
#include "quiche/quic/platform/api/quic_logging.h"
#include "quiche/common/quiche_endian.h"
#include "quiche/common/quiche_text_utils.h"
namespace quic {
namespace {
QuicVersionLabel CreateRandomVersionLabelForNegotiation() { … }
void SetVersionFlag(const ParsedQuicVersion& version, bool should_enable) { … }
}
bool ParsedQuicVersion::IsKnown() const { … }
bool ParsedQuicVersion::KnowsWhichDecrypterToUse() const { … }
bool ParsedQuicVersion::UsesInitialObfuscators() const { … }
bool ParsedQuicVersion::AllowsLowFlowControlLimits() const { … }
bool ParsedQuicVersion::HasHeaderProtection() const { … }
bool ParsedQuicVersion::SupportsRetry() const { … }
bool ParsedQuicVersion::SendsVariableLengthPacketNumberInLongHeader() const { … }
bool ParsedQuicVersion::AllowsVariableLengthConnectionIds() const { … }
bool ParsedQuicVersion::SupportsClientConnectionIds() const { … }
bool ParsedQuicVersion::HasLengthPrefixedConnectionIds() const { … }
bool ParsedQuicVersion::SupportsAntiAmplificationLimit() const { … }
bool ParsedQuicVersion::CanSendCoalescedPackets() const { … }
bool ParsedQuicVersion::SupportsGoogleAltSvcFormat() const { … }
bool ParsedQuicVersion::UsesHttp3() const { … }
bool ParsedQuicVersion::HasLongHeaderLengths() const { … }
bool ParsedQuicVersion::UsesCryptoFrames() const { … }
bool ParsedQuicVersion::HasIetfQuicFrames() const { … }
bool ParsedQuicVersion::UsesLegacyTlsExtension() const { … }
bool ParsedQuicVersion::UsesTls() const { … }
bool ParsedQuicVersion::UsesQuicCrypto() const { … }
bool ParsedQuicVersion::UsesV2PacketTypes() const { … }
bool ParsedQuicVersion::AlpnDeferToRFCv1() const { … }
bool VersionHasLengthPrefixedConnectionIds(
QuicTransportVersion transport_version) { … }
std::ostream& operator<<(std::ostream& os, const ParsedQuicVersion& version) { … }
std::ostream& operator<<(std::ostream& os,
const ParsedQuicVersionVector& versions) { … }
QuicVersionLabel MakeVersionLabel(uint8_t a, uint8_t b, uint8_t c, uint8_t d) { … }
std::ostream& operator<<(std::ostream& os,
const QuicVersionLabelVector& version_labels) { … }
std::ostream& operator<<(std::ostream& os,
const QuicTransportVersionVector& transport_versions) { … }
QuicVersionLabel CreateQuicVersionLabel(ParsedQuicVersion parsed_version) { … }
QuicVersionLabelVector CreateQuicVersionLabelVector(
const ParsedQuicVersionVector& versions) { … }
ParsedQuicVersionVector AllSupportedVersionsWithQuicCrypto() { … }
ParsedQuicVersionVector CurrentSupportedVersionsWithQuicCrypto() { … }
ParsedQuicVersionVector AllSupportedVersionsWithTls() { … }
ParsedQuicVersionVector CurrentSupportedVersionsWithTls() { … }
ParsedQuicVersionVector ObsoleteSupportedVersions() { … }
bool IsObsoleteSupportedVersion(ParsedQuicVersion version) { … }
ParsedQuicVersionVector CurrentSupportedVersionsForClients() { … }
ParsedQuicVersionVector CurrentSupportedHttp3Versions() { … }
ParsedQuicVersion ParseQuicVersionLabel(QuicVersionLabel version_label) { … }
ParsedQuicVersionVector ParseQuicVersionLabelVector(
const QuicVersionLabelVector& version_labels) { … }
ParsedQuicVersion ParseQuicVersionString(absl::string_view version_string) { … }
ParsedQuicVersionVector ParseQuicVersionVectorString(
absl::string_view versions_string) { … }
QuicTransportVersionVector AllSupportedTransportVersions() { … }
ParsedQuicVersionVector AllSupportedVersions() { … }
ParsedQuicVersionVector CurrentSupportedVersions() { … }
ParsedQuicVersionVector FilterSupportedVersions(
ParsedQuicVersionVector versions) { … }
ParsedQuicVersionVector ParsedVersionOfIndex(
const ParsedQuicVersionVector& versions, int index) { … }
std::string QuicVersionLabelToString(QuicVersionLabel version_label) { … }
ParsedQuicVersion ParseQuicVersionLabelString(
absl::string_view version_label_string) { … }
std::string QuicVersionLabelVectorToString(
const QuicVersionLabelVector& version_labels, const std::string& separator,
size_t skip_after_nth_version) { … }
#define RETURN_STRING_LITERAL …
std::string QuicVersionToString(QuicTransportVersion transport_version) { … }
std::string HandshakeProtocolToString(HandshakeProtocol handshake_protocol) { … }
std::string ParsedQuicVersionToString(ParsedQuicVersion version) { … }
std::string QuicTransportVersionVectorToString(
const QuicTransportVersionVector& versions) { … }
std::string ParsedQuicVersionVectorToString(
const ParsedQuicVersionVector& versions, const std::string& separator,
size_t skip_after_nth_version) { … }
bool VersionSupportsGoogleAltSvcFormat(QuicTransportVersion transport_version) { … }
bool VersionAllowsVariableLengthConnectionIds(
QuicTransportVersion transport_version) { … }
bool QuicVersionLabelUses4BitConnectionIdLength(
QuicVersionLabel version_label) { … }
ParsedQuicVersion UnsupportedQuicVersion() { … }
ParsedQuicVersion QuicVersionReservedForNegotiation() { … }
std::string AlpnForVersion(ParsedQuicVersion parsed_version) { … }
void QuicEnableVersion(const ParsedQuicVersion& version) { … }
void QuicDisableVersion(const ParsedQuicVersion& version) { … }
bool QuicVersionIsEnabled(const ParsedQuicVersion& version) { … }
#undef RETURN_STRING_LITERAL
}