package protocol import ( "fmt" ) // A PacketNumber in QUIC type PacketNumber uint64 // PacketNumberLen is the length of the packet number in bytes type PacketNumberLen uint8 const ( // PacketNumberLenInvalid is the default value and not a valid length for a packet number PacketNumberLenInvalid PacketNumberLen = 0 // PacketNumberLen1 is a packet number length of 1 byte PacketNumberLen1 PacketNumberLen = 1 // PacketNumberLen2 is a packet number length of 2 bytes PacketNumberLen2 PacketNumberLen = 2 // PacketNumberLen4 is a packet number length of 4 bytes PacketNumberLen4 PacketNumberLen = 4 // PacketNumberLen6 is a packet number length of 6 bytes PacketNumberLen6 PacketNumberLen = 6 ) // The PacketType is the Long Header Type (only used for the IETF draft header format) type PacketType uint8 const ( // PacketTypeInitial is the packet type of an Initial packet PacketTypeInitial PacketType = 0x7f // PacketTypeRetry is the packet type of a Retry packet PacketTypeRetry PacketType = 0x7e // PacketTypeHandshake is the packet type of a Handshake packet PacketTypeHandshake PacketType = 0x7d // PacketType0RTT is the packet type of a 0-RTT packet PacketType0RTT PacketType = 0x7c ) func (t PacketType) String() string { switch t { case PacketTypeInitial: return "Initial" case PacketTypeRetry: return "Retry" case PacketTypeHandshake: return "Handshake" case PacketType0RTT: return "0-RTT Protected" default: return fmt.Sprintf("unknown packet type: %d", t) } } // A ByteCount in QUIC type ByteCount uint64 // MaxByteCount is the maximum value of a ByteCount const MaxByteCount = ByteCount(1<<62 - 1) // An ApplicationErrorCode is an application-defined error code. type ApplicationErrorCode uint16 // MaxReceivePacketSize maximum packet size of any QUIC packet, based on // ethernet's max size, minus the IP and UDP headers. IPv6 has a 40 byte header, // UDP adds an additional 8 bytes. This is a total overhead of 48 bytes. // Ethernet's max packet size is 1500 bytes, 1500 - 48 = 1452. const MaxReceivePacketSize ByteCount = 1452 // DefaultTCPMSS is the default maximum packet size used in the Linux TCP implementation. // Used in QUIC for congestion window computations in bytes. const DefaultTCPMSS ByteCount = 1460 // MinClientHelloSize is the minimum size the server expects an inchoate CHLO to have (in gQUIC) const MinClientHelloSize = 1024 // MinInitialPacketSize is the minimum size an Initial packet (in IETF QUIC) is required to have. const MinInitialPacketSize = 1200 // MaxClientHellos is the maximum number of times we'll send a client hello // The value 3 accounts for: // * one failure due to an incorrect or missing source-address token // * one failure due the server's certificate chain being unavailable and the server being unwilling to send it without a valid source-address token const MaxClientHellos = 3 // ConnectionIDLenGQUIC is the length of the source Connection ID used on gQUIC QUIC packets. const ConnectionIDLenGQUIC = 8 // MinConnectionIDLenInitial is the minimum length of the destination connection ID on an Initial packet. const MinConnectionIDLenInitial = 8