This commit is contained in:
H1JK 2023-01-28 10:50:27 +08:00
parent 34d7ba04c7
commit d13a546149
2 changed files with 5 additions and 6 deletions

View File

@ -21,8 +21,7 @@ var (
type FakeTLSConn struct { type FakeTLSConn struct {
net.Conn net.Conn
remain int remain int
writeLock sync.Mutex
clientEncryptor cipher.Stream clientEncryptor cipher.Stream
clientDecryptor cipher.Stream clientDecryptor cipher.Stream
@ -31,7 +30,7 @@ type FakeTLSConn struct {
serverDecryptor cipher.Stream serverDecryptor cipher.Stream
unreadServerHandshake []byte unreadServerHandshake []byte
serverHandshakeMutex sync.Locker serverHandshakeMutex *sync.Mutex
} }
func (c *FakeTLSConn) SetupObfs2(en, de cipher.Stream) { func (c *FakeTLSConn) SetupObfs2(en, de cipher.Stream) {
@ -67,9 +66,7 @@ func (c *FakeTLSConn) Write(p []byte) (n int, err error) {
if c.clientEncryptor != nil { if c.clientEncryptor != nil {
c.clientEncryptor.XORKeyStream(frame[5:], frame[5:5+lenP]) c.clientEncryptor.XORKeyStream(frame[5:], frame[5:5+lenP])
} }
c.writeLock.Lock()
_, err = c.Conn.Write(frame) _, err = c.Conn.Write(frame)
c.writeLock.Unlock()
buf.Put(frame) buf.Put(frame)
if err != nil { if err != nil {
return 0, err return 0, err
@ -123,9 +120,11 @@ func (c *FakeTLSConn) Read(p []byte) (n int, err error) {
if lenH := len(c.unreadServerHandshake); lenH > 0 { if lenH := len(c.unreadServerHandshake); lenH > 0 {
if lenH < lenP { if lenH < lenP {
copy(p, c.unreadServerHandshake) copy(p, c.unreadServerHandshake)
c.unreadServerHandshake = nil
p = p[lenH:] p = p[lenH:]
} else if lenH == lenP { } else if lenH == lenP {
copy(p, c.unreadServerHandshake) copy(p, c.unreadServerHandshake)
c.unreadServerHandshake = nil
return lenH, nil return lenH, nil
} else { // lenH > lenP } else { // lenH > lenP
copy(p, c.unreadServerHandshake) copy(p, c.unreadServerHandshake)

View File

@ -11,7 +11,7 @@ import (
const ( const (
secretFakeTLSFirstByte byte = 0xEE secretFakeTLSFirstByte byte = 0xEE
secretKeyLength = 16 secretKeyLength int = 16
) )
// Secret is a data structure that presents a secret. // Secret is a data structure that presents a secret.