From 6833ba54454413c4f04b26ece65d8fe63654d365 Mon Sep 17 00:00:00 2001 From: yuhan6665 <1588741+yuhan6665@users.noreply.github.com> Date: Sun, 15 Jun 2025 17:11:51 -0400 Subject: [PATCH] Fix a bug when multiple inbounds defined with same sni --- record_detect.go | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/record_detect.go b/record_detect.go index a826c61..32ab88c 100644 --- a/record_detect.go +++ b/record_detect.go @@ -82,24 +82,26 @@ func (c *DetectConn) Write(b []byte) (n int, err error) { } func (c *DetectConn) Read(b []byte) (n int, err error) { + c.Conn.SetReadDeadline(time.Now().Add(2 * time.Second)) if !c.CcsSent { - c.Conn.SetReadDeadline(time.Now().Add(2 * time.Second)) return c.Conn.Read(b) } - c.Conn.SetReadDeadline(time.Now().Add(2 * time.Second)) data, _ := io.ReadAll(c.Conn) - GlobalPostHandshakeRecordsLock.Lock() + var newLength []int for { if len(data) >= 5 && bytes.Equal(data[:3], []byte{23, 3, 3}) { length := int(binary.BigEndian.Uint16(data[3:5])) + 5 - c.PostHandshakeRecordsLens[c.Sni] = append(c.PostHandshakeRecordsLens[c.Sni], length) + newLength = append(newLength, length) data = data[length:] } else { break } } - if len(c.PostHandshakeRecordsLens[c.Sni]) == 0 { + GlobalPostHandshakeRecordsLock.Lock() + if len(newLength) == 0 { c.PostHandshakeRecordsLens[c.Sni] = append(c.PostHandshakeRecordsLens[c.Sni], 0) + } else { + c.PostHandshakeRecordsLens[c.Sni] = newLength } GlobalPostHandshakeRecordsLock.Unlock() fmt.Printf("REALITY fingerprint probe: %v\tSni: %v\tlen(postHandshakeRecord): %v\n", c.Fingerprint, c.Sni, c.PostHandshakeRecordsLens[c.Sni])