fix: kcp 协议内部日志细节

This commit is contained in:
2026-03-25 15:09:32 +08:00
parent be013b701b
commit 665a908421
15 changed files with 1117 additions and 42 deletions

View File

@@ -0,0 +1,55 @@
package transport
import "encoding/binary"
const kcpPacketHeaderSize = 24
func parseKCPPacketMetadata(packet []byte) (*uint32, []KCPPacketDebugSegment) {
conv := parseKCPConversationID(packet)
segments, ok := parseKCPPacketSegments(packet)
if !ok {
return conv, nil
}
return conv, segments
}
func parseKCPConversationID(packet []byte) *uint32 {
if len(packet) < 4 {
return nil
}
conv := binary.LittleEndian.Uint32(packet[:4])
return &conv
}
func parseKCPPacketSegments(packet []byte) ([]KCPPacketDebugSegment, bool) {
if len(packet) == 0 {
return nil, false
}
data := packet
segments := make([]KCPPacketDebugSegment, 0, 1)
for len(data) > 0 {
if len(data) < kcpPacketHeaderSize {
return nil, false
}
segmentLen := binary.LittleEndian.Uint32(data[20:])
totalLen := kcpPacketHeaderSize + int(segmentLen)
if len(data) < totalLen {
return nil, false
}
segments = append(segments, KCPPacketDebugSegment{
Cmd: data[4],
Frg: data[5],
Wnd: binary.LittleEndian.Uint16(data[6:8]),
SN: binary.LittleEndian.Uint32(data[12:16]),
UNA: binary.LittleEndian.Uint32(data[16:20]),
Len: segmentLen,
})
data = data[totalLen:]
}
return segments, true
}