|  | // 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 "quiche/quic/core/quic_config.h" | 
|  | #include "quiche/quic/core/quic_types.h" | 
|  | #include "quiche/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 = 1250, | 
|  | kMasqueMaxOuterPacketSize = 1350, | 
|  | }; | 
|  |  | 
|  | // Mode that MASQUE is operating in. | 
|  | enum class MasqueMode : uint8_t { | 
|  | kInvalid = 0,  // Should never be used. | 
|  | kOpen = 2,  // Open mode uses the MASQUE HTTP CONNECT-UDP method as documented | 
|  | // in <https://www.rfc-editor.org/rfc/rfc9298.html>. This mode allows | 
|  | // unauthenticated clients (a more restricted mode will be added to this enum | 
|  | // at a later date). | 
|  | kConnectIp = | 
|  | 1,  // ConnectIp mode uses MASQUE HTTP CONNECT-IP as documented in | 
|  | // <https://datatracker.ietf.org/doc/html/draft-ietf-masque-connect-ip>. This | 
|  | // mode also allows unauthenticated clients. | 
|  | }; | 
|  |  | 
|  | QUIC_NO_EXPORT std::string MasqueModeToString(MasqueMode masque_mode); | 
|  | QUIC_NO_EXPORT std::ostream& operator<<(std::ostream& os, | 
|  | const MasqueMode& masque_mode); | 
|  |  | 
|  | // Create a TUN interface, with the specified `client_address`. Requires root. | 
|  | int CreateTunInterface(const QuicIpAddress& client_address, bool server = true); | 
|  |  | 
|  | }  // namespace quic | 
|  |  | 
|  | #endif  // QUICHE_QUIC_MASQUE_MASQUE_UTILS_H_ |