Skip to content

Commit 7ca5f75

Browse files
committed
TUN-6726: Fix maxDatagramPayloadSize for Windows QUIC datagrams
1 parent 4ac6871 commit 7ca5f75

File tree

2 files changed

+8
-7
lines changed

2 files changed

+8
-7
lines changed

quic/datagramv2.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,15 @@ import (
1414
type datagramV2Type byte
1515

1616
const (
17-
udp datagramV2Type = iota
17+
typeIDLen = 1
18+
udp datagramV2Type = iota
1819
ip
1920
// Same as sessionDemuxChan capacity
2021
packetChanCapacity = 16
2122
)
2223

2324
func suffixType(b []byte, datagramType datagramV2Type) ([]byte, error) {
24-
if len(b)+1 > MaxDatagramFrameSize {
25+
if len(b)+typeIDLen > MaxDatagramFrameSize {
2526
return nil, fmt.Errorf("datagram size %d exceeds max frame size %d", len(b), MaxDatagramFrameSize)
2627
}
2728
b = append(b, byte(datagramType))
@@ -114,11 +115,11 @@ func (dm *DatagramMuxerV2) ReceivePacket(ctx context.Context) (packet.RawPacket,
114115
}
115116

116117
func (dm *DatagramMuxerV2) demux(ctx context.Context, msgWithType []byte) error {
117-
if len(msgWithType) < 1 {
118-
return fmt.Errorf("QUIC datagram should have at least 1 byte")
118+
if len(msgWithType) < typeIDLen {
119+
return fmt.Errorf("QUIC datagram should have at least %d byte", typeIDLen)
119120
}
120-
msgType := datagramV2Type(msgWithType[len(msgWithType)-1])
121-
msg := msgWithType[0 : len(msgWithType)-1]
121+
msgType := datagramV2Type(msgWithType[len(msgWithType)-typeIDLen])
122+
msg := msgWithType[0 : len(msgWithType)-typeIDLen]
122123
switch msgType {
123124
case udp:
124125
return dm.handleSession(ctx, msg)

quic/param_windows.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@ const (
77
// 1220 is the default value https://github.com/lucas-clemente/quic-go/blob/84e03e59760ceee37359688871bb0688fcc4e98f/internal/protocol/params.go#L138
88
MaxDatagramFrameSize = 1220
99
// 3 more bytes are reserved at https://github.com/lucas-clemente/quic-go/blob/v0.24.0/internal/wire/datagram_frame.go#L61
10-
maxDatagramPayloadSize = MaxDatagramFrameSize - 3 - sessionIDLen
10+
maxDatagramPayloadSize = MaxDatagramFrameSize - 3 - sessionIDLen - typeIDLen
1111
)

0 commit comments

Comments
 (0)