0
0
mirror of https://github.com/XTLS/REALITY.git synced 2025-08-22 22:48:36 +00:00

Fix a bug when multiple inbounds defined with same sni

This commit is contained in:
yuhan6665 2025-06-15 17:11:51 -04:00
parent f13edcc98b
commit 6833ba5445

View File

@ -82,24 +82,26 @@ func (c *DetectConn) Write(b []byte) (n int, err error) {
} }
func (c *DetectConn) Read(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 { if !c.CcsSent {
c.Conn.SetReadDeadline(time.Now().Add(2 * time.Second))
return c.Conn.Read(b) return c.Conn.Read(b)
} }
c.Conn.SetReadDeadline(time.Now().Add(2 * time.Second))
data, _ := io.ReadAll(c.Conn) data, _ := io.ReadAll(c.Conn)
GlobalPostHandshakeRecordsLock.Lock() var newLength []int
for { for {
if len(data) >= 5 && bytes.Equal(data[:3], []byte{23, 3, 3}) { if len(data) >= 5 && bytes.Equal(data[:3], []byte{23, 3, 3}) {
length := int(binary.BigEndian.Uint16(data[3:5])) + 5 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:] data = data[length:]
} else { } else {
break break
} }
} }
if len(c.PostHandshakeRecordsLens[c.Sni]) == 0 { GlobalPostHandshakeRecordsLock.Lock()
if len(newLength) == 0 {
c.PostHandshakeRecordsLens[c.Sni] = append(c.PostHandshakeRecordsLens[c.Sni], 0) c.PostHandshakeRecordsLens[c.Sni] = append(c.PostHandshakeRecordsLens[c.Sni], 0)
} else {
c.PostHandshakeRecordsLens[c.Sni] = newLength
} }
GlobalPostHandshakeRecordsLock.Unlock() GlobalPostHandshakeRecordsLock.Unlock()
fmt.Printf("REALITY fingerprint probe: %v\tSni: %v\tlen(postHandshakeRecord): %v\n", c.Fingerprint, c.Sni, c.PostHandshakeRecordsLens[c.Sni]) fmt.Printf("REALITY fingerprint probe: %v\tSni: %v\tlen(postHandshakeRecord): %v\n", c.Fingerprint, c.Sni, c.PostHandshakeRecordsLens[c.Sni])