mirror of
https://github.com/XTLS/REALITY.git
synced 2025-08-23 06:58:39 +00:00
Fix a bug when multiple inbounds defined with same sni
This commit is contained in:
parent
f13edcc98b
commit
6833ba5445
@ -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) {
|
||||||
if !c.CcsSent {
|
|
||||||
c.Conn.SetReadDeadline(time.Now().Add(2 * time.Second))
|
c.Conn.SetReadDeadline(time.Now().Add(2 * time.Second))
|
||||||
|
if !c.CcsSent {
|
||||||
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])
|
||||||
|
Loading…
Reference in New Issue
Block a user