blob: 45b9ef41c0bf4d89b4301834c90ec12ab3a2a282 [file] [log] [blame]
// Copyright (c) 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef QUICHE_QUIC_QUIC_TRANSPORT_QUIC_TRANSPORT_PROTOCOL_H_
#define QUICHE_QUIC_QUIC_TRANSPORT_QUIC_TRANSPORT_PROTOCOL_H_
#include "net/third_party/quiche/src/quic/core/quic_types.h"
#include "net/third_party/quiche/src/quic/core/quic_versions.h"
#include "net/third_party/quiche/src/quic/platform/api/quic_export.h"
#include "net/third_party/quiche/src/quic/platform/api/quic_logging.h"
namespace quic {
// The ALPN used by QuicTransport.
QUIC_EXPORT_PRIVATE inline const char* QuicTransportAlpn() {
return "wq-vvv-01";
}
// The stream ID on which the client indication is sent.
QUIC_EXPORT_PRIVATE constexpr QuicStreamId ClientIndicationStream() {
return 2;
}
// The maximum allowed size of the client indication.
QUIC_EXPORT_PRIVATE constexpr QuicByteCount ClientIndicationMaxSize() {
return 65536;
}
// The keys of the fields in the client indication.
enum class QuicTransportClientIndicationKeys : uint16_t {
kOrigin = 0x0000,
kPath = 0x0001,
};
// Returns if the specified QUIC version can be used by QuicTransport.
QUIC_EXPORT_PRIVATE constexpr bool IsVersionValidForQuicTransport(
const ParsedQuicVersion& version) {
return VersionSupportsMessageFrames(version.transport_version) &&
VersionHasIetfQuicFrames(version.transport_version) &&
version.handshake_protocol == PROTOCOL_TLS1_3;
}
// Returns default QUIC version used for QuicTransport.
QUIC_EXPORT_PRIVATE inline ParsedQuicVersion DefaultVersionForQuicTransport() {
constexpr ParsedQuicVersion version = ParsedQuicVersion::Draft29();
static_assert(IsVersionValidForQuicTransport(version),
"Default QUIC version used by QuicTransport is invalid");
return version;
}
} // namespace quic
#endif // QUICHE_QUIC_QUIC_TRANSPORT_QUIC_TRANSPORT_PROTOCOL_H_