From f22705be2c7189635ad1606f966296b587e25261 Mon Sep 17 00:00:00 2001 From: Brian Ma <312.dumas@163.com> Date: Thu, 1 Sep 2022 17:46:19 +0800 Subject: [PATCH] Fix wechat protocol is not working if no obfs string is configured --- pkg/conns/wechat/obfs.go | 7 +++++-- pkg/obfs/dummy.go | 21 +++++++++++++++++++++ pkg/transport/client.go | 8 ++------ pkg/transport/server.go | 8 ++------ 4 files changed, 30 insertions(+), 14 deletions(-) create mode 100644 pkg/obfs/dummy.go diff --git a/pkg/conns/wechat/obfs.go b/pkg/conns/wechat/obfs.go index 99aa4a8..d601cd1 100644 --- a/pkg/conns/wechat/obfs.go +++ b/pkg/conns/wechat/obfs.go @@ -25,10 +25,13 @@ type ObfsWeChatUDPConn struct { sn uint32 } -func NewObfsWeChatUDPConn(orig *net.UDPConn, obfs obfs.Obfuscator) *ObfsWeChatUDPConn { +func NewObfsWeChatUDPConn(orig *net.UDPConn, obfs_ obfs.Obfuscator) *ObfsWeChatUDPConn { + if obfs_ == nil { + obfs_ = obfs.NewDummyObfuscator() + } return &ObfsWeChatUDPConn{ orig: orig, - obfs: obfs, + obfs: obfs_, readBuf: make([]byte, udpBufferSize), writeBuf: make([]byte, udpBufferSize), sn: rand.Uint32() & 0xFFFF, diff --git a/pkg/obfs/dummy.go b/pkg/obfs/dummy.go new file mode 100644 index 0000000..6899f3a --- /dev/null +++ b/pkg/obfs/dummy.go @@ -0,0 +1,21 @@ +package obfs + +type DummyObfuscator struct{} + +func NewDummyObfuscator() *DummyObfuscator { + return &DummyObfuscator{} +} + +func (x *DummyObfuscator) Deobfuscate(in []byte, out []byte) int { + pLen := len(in) + if pLen <= 0 || len(out) < pLen { + // Invalid + return 0 + } + copy(out, in) + return pLen +} + +func (x *DummyObfuscator) Obfuscate(in []byte, out []byte) int { + return copy(out, in) +} diff --git a/pkg/transport/client.go b/pkg/transport/client.go index 6746ab9..4c03614 100644 --- a/pkg/transport/client.go +++ b/pkg/transport/client.go @@ -42,12 +42,8 @@ func (ct *ClientTransport) quicPacketConn(proto string, server string, obfs obfs if err != nil { return nil, err } - if obfs != nil { - oc := wechat.NewObfsWeChatUDPConn(conn, obfs) - return oc, nil - } else { - return conn, nil - } + oc := wechat.NewObfsWeChatUDPConn(conn, obfs) + return oc, nil } else if proto == "faketcp" { var conn *faketcp.TCPConn conn, err := faketcp.Dial("tcp", server) diff --git a/pkg/transport/server.go b/pkg/transport/server.go index 6c297ef..5685e81 100644 --- a/pkg/transport/server.go +++ b/pkg/transport/server.go @@ -101,12 +101,8 @@ func (st *ServerTransport) quicPacketConn(proto string, laddr string, obfs obfs. if err != nil { return nil, err } - if obfs != nil { - oc := wechat.NewObfsWeChatUDPConn(conn, obfs) - return oc, nil - } else { - return conn, nil - } + oc := wechat.NewObfsWeChatUDPConn(conn, obfs) + return oc, nil } else if proto == "faketcp" { conn, err := faketcp.Listen("tcp", laddr) if err != nil {