// 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 "quic/core/quic_types.h"
#include "quic/core/quic_versions.h"
#include "quic/platform/api/quic_export.h"
#include "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_
