Improve packet loss on old TUTK proto

This commit is contained in:
Alex X
2026-01-20 14:19:18 +03:00
parent 7793a55853
commit 75bd1f1b2b
2 changed files with 16 additions and 13 deletions
+13 -10
View File
@@ -50,7 +50,8 @@ type Session16 struct {
seqSendCmd1 uint16
seqSendAud uint16
waitSeq uint16
waitFSeq uint16
waitCSeq uint16
waitSize int
waitData []byte
}
@@ -183,7 +184,7 @@ func (s *Session16) SessionRead(chID byte, cmd []byte) int {
}
// 0 01030800 command + version
// 4 00000000 frame num
// 4 00000000 frame seq
// 8 ac880100 total size
// 12 6200 chunk seq
// 14 2000 tail (pkt header) size
@@ -197,25 +198,27 @@ func (s *Session16) SessionRead(chID byte, cmd []byte) int {
switch cmd[1] {
case 0x03:
seq := binary.LittleEndian.Uint16(cmd[12:])
if seq != s.waitSeq {
s.waitSeq = 0
return msgMediaLost
}
if seq == 0 {
frameSeq := binary.LittleEndian.Uint16(cmd[4:])
chunkSeq := binary.LittleEndian.Uint16(cmd[12:])
if chunkSeq == 0 {
s.waitFSeq = frameSeq
s.waitCSeq = 0
s.waitData = s.waitData[:0]
payloadSize := binary.LittleEndian.Uint32(cmd[8:])
hdrSize := binary.LittleEndian.Uint16(cmd[14:])
s.waitSize = int(hdrSize) + int(payloadSize)
} else if frameSeq != s.waitFSeq || chunkSeq != s.waitCSeq {
s.waitCSeq = 0
return msgMediaLost
}
s.waitData = append(s.waitData, cmd[24:]...)
if n := len(s.waitData); n < s.waitSize {
s.waitSeq++
s.waitCSeq++
return msgMediaChunk
}
s.waitSeq = 0
s.waitCSeq = 0
payloadSize := binary.LittleEndian.Uint32(cmd[8:])
packetData[0] = bytes.Clone(s.waitData[payloadSize:])
+3 -3
View File
@@ -171,15 +171,15 @@ func (s *Session25) handleChunk(cmd []byte, checkSeq bool) int {
// "0x20 chunk seq for first chunk if only one chunk".
if binary.LittleEndian.Uint16(cmd2[6:]) == 0 || binary.LittleEndian.Uint16(cmd2[4:]) == 1 {
s.waitData = s.waitData[:0]
s.waitSeq = seq
} else if seq != s.waitSeq {
s.waitCSeq = seq
} else if seq != s.waitCSeq {
return msgMediaLost
}
s.waitData = append(s.waitData, cmd2[20:]...)
if flags&0b0001 == 0 {
s.waitSeq++
s.waitCSeq++
return msgMediaChunk
}