73 lines
2.6 KiB
Go
73 lines
2.6 KiB
Go
package protocol
|
|
|
|
import (
|
|
"math"
|
|
"time"
|
|
)
|
|
|
|
// 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
|
|
)
|
|
|
|
// A ConnectionID in QUIC
|
|
type ConnectionID uint64
|
|
|
|
// A StreamID in QUIC
|
|
type StreamID uint32
|
|
|
|
// A ByteCount in QUIC
|
|
type ByteCount uint64
|
|
|
|
// MaxByteCount is the maximum value of a ByteCount
|
|
const MaxByteCount = math.MaxUint64
|
|
|
|
// MaxPacketSize is the maximum packet size, including the public header
|
|
// This is the value used by Chromium for a QUIC packet sent using IPv6 (for IPv4 it would be 1370)
|
|
const MaxPacketSize ByteCount = 1350
|
|
|
|
// MaxFrameAndPublicHeaderSize is the maximum size of a QUIC frame plus PublicHeader
|
|
const MaxFrameAndPublicHeaderSize = MaxPacketSize - 12 /*crypto signature*/
|
|
|
|
// 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
|
|
|
|
// InitialStreamFlowControlWindow is the initial stream-level flow control window for sending
|
|
const InitialStreamFlowControlWindow ByteCount = (1 << 14) // 16 kB
|
|
|
|
// InitialConnectionFlowControlWindow is the initial connection-level flow control window for sending
|
|
const InitialConnectionFlowControlWindow ByteCount = (1 << 14) // 16 kB
|
|
|
|
// DefaultRetransmissionTime is the RTO time on new connections
|
|
const DefaultRetransmissionTime = 500 * time.Millisecond
|
|
|
|
// MinRetransmissionTime is the minimum RTO time
|
|
const MinRetransmissionTime = 200 * time.Millisecond
|
|
|
|
// MaxRetransmissionTime is the maximum RTO time
|
|
const MaxRetransmissionTime = 60 * time.Second
|
|
|
|
// ClientHelloMinimumSize is the minimum size the server expects an inchoate CHLO to have.
|
|
const ClientHelloMinimumSize = 1024
|
|
|
|
// 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 unavailible and the server being unwilling to send it without a valid source-address token
|
|
const MaxClientHellos = 3
|