Source File
packet_number.go
Belonging Package
github.com/quic-go/quic-go/internal/protocol
package protocol// A PacketNumber in QUICtype PacketNumber int64// InvalidPacketNumber is a packet number that is never sent.// In QUIC, 0 is a valid packet number.const InvalidPacketNumber PacketNumber = -1// PacketNumberLen is the length of the packet number in bytestype PacketNumberLen uint8const (// PacketNumberLen1 is a packet number length of 1 bytePacketNumberLen1 PacketNumberLen = 1// PacketNumberLen2 is a packet number length of 2 bytesPacketNumberLen2 PacketNumberLen = 2// PacketNumberLen3 is a packet number length of 3 bytesPacketNumberLen3 PacketNumberLen = 3// PacketNumberLen4 is a packet number length of 4 bytesPacketNumberLen4 PacketNumberLen = 4)// DecodePacketNumber calculates the packet number based its length and the last seen packet number// This function is taken from https://www.rfc-editor.org/rfc/rfc9000.html#section-a.3.func ( PacketNumberLen, PacketNumber, PacketNumber) PacketNumber {:= + 1:= PacketNumber(1 << ( * 8)):= / 2:= - 1:= ( & ^) |if <= - && < 1<<62- {return +}if > + && >= {return -}return}// PacketNumberLengthForHeader gets the length of the packet number for the public header// it never chooses a PacketNumberLen of 1 byte, since this is too short under certain circumstancesfunc (, PacketNumber) PacketNumberLen {var PacketNumberif == InvalidPacketNumber {= + 1} else {= -}if < 1<<(16-1) {return PacketNumberLen2}if < 1<<(24-1) {return PacketNumberLen3}return PacketNumberLen4}
![]() |
The pages are generated with Golds v0.8.2. (GOOS=linux GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds. |