blob: abaeda7fa4348ea437c21261ec9b50f669011d66 [file] [log] [blame]
// Copyright 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_MASQUE_MASQUE_UTILS_H_
#define QUICHE_QUIC_MASQUE_MASQUE_UTILS_H_
#include "quic/core/quic_config.h"
#include "quic/core/quic_types.h"
#include "quic/core/quic_versions.h"
namespace quic {
// List of QUIC versions that support MASQUE. Currently restricted to IETF QUIC.
QUIC_NO_EXPORT ParsedQuicVersionVector MasqueSupportedVersions();
// Default QuicConfig for use with MASQUE. Sets a custom max_packet_size.
QUIC_NO_EXPORT QuicConfig MasqueEncapsulatedConfig();
// Maximum packet size for encapsulated connections.
enum : QuicByteCount {
kMasqueMaxEncapsulatedPacketSize = 1300,
kMasqueMaxOuterPacketSize = 1350,
};
// Mode that MASQUE is operating in.
enum class MasqueMode : uint8_t {
kInvalid = 0, // Should never be used.
kLegacy = 1, // Legacy mode uses the legacy MASQUE protocol as documented in
// <https://tools.ietf.org/html/draft-schinazi-masque-protocol>. That version
// of MASQUE uses a custom application-protocol over HTTP/3, and also allows
// unauthenticated clients.
kOpen = 2, // Open mode uses the MASQUE HTTP CONNECT-UDP method as documented
// in <https://tools.ietf.org/html/draft-ietf-masque-connect-udp>. This mode
// allows unauthenticated clients (a more restricted mode will be added to
// this enum at a later date).
};
QUIC_NO_EXPORT std::string MasqueModeToString(MasqueMode masque_mode);
QUIC_NO_EXPORT std::ostream& operator<<(std::ostream& os,
const MasqueMode& masque_mode);
} // namespace quic
#endif // QUICHE_QUIC_MASQUE_MASQUE_UTILS_H_