diff --git a/pkg/obfs/dummy.go b/pkg/obfs/dummy.go new file mode 100644 index 0000000..3edff10 --- /dev/null +++ b/pkg/obfs/dummy.go @@ -0,0 +1,18 @@ +package obfs + +type DummyObfuscator struct{} + +func NewDummyObfuscator() *DummyObfuscator { + return &DummyObfuscator{} +} + +func (x *DummyObfuscator) Deobfuscate(in []byte, out []byte) int { + if len(out) < len(in) { + return 0 + } + return copy(out, in) +} + +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..bfd0340 100644 --- a/pkg/transport/client.go +++ b/pkg/transport/client.go @@ -9,7 +9,7 @@ import ( "github.com/HyNetwork/hysteria/pkg/conns/faketcp" "github.com/HyNetwork/hysteria/pkg/conns/udp" "github.com/HyNetwork/hysteria/pkg/conns/wechat" - "github.com/HyNetwork/hysteria/pkg/obfs" + obfsPkg "github.com/HyNetwork/hysteria/pkg/obfs" "github.com/lucas-clemente/quic-go" ) @@ -25,7 +25,7 @@ var DefaultClientTransport = &ClientTransport{ ResolvePreference: ResolvePreferenceDefault, } -func (ct *ClientTransport) quicPacketConn(proto string, server string, obfs obfs.Obfuscator) (net.PacketConn, error) { +func (ct *ClientTransport) quicPacketConn(proto string, server string, obfs obfsPkg.Obfuscator) (net.PacketConn, error) { if len(proto) == 0 || proto == "udp" { conn, err := net.ListenUDP("udp", nil) if err != nil { @@ -42,12 +42,10 @@ 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 + if obfs == nil { + obfs = obfsPkg.NewDummyObfuscator() } + return wechat.NewObfsWeChatUDPConn(conn, obfs), nil } else if proto == "faketcp" { var conn *faketcp.TCPConn conn, err := faketcp.Dial("tcp", server) @@ -65,7 +63,7 @@ func (ct *ClientTransport) quicPacketConn(proto string, server string, obfs obfs } } -func (ct *ClientTransport) QUICDial(proto string, server string, tlsConfig *tls.Config, quicConfig *quic.Config, obfs obfs.Obfuscator) (quic.Connection, error) { +func (ct *ClientTransport) QUICDial(proto string, server string, tlsConfig *tls.Config, quicConfig *quic.Config, obfs obfsPkg.Obfuscator) (quic.Connection, error) { serverUDPAddr, err := net.ResolveUDPAddr("udp", server) if err != nil { return nil, err diff --git a/pkg/transport/server.go b/pkg/transport/server.go index 6c297ef..24b3ffa 100644 --- a/pkg/transport/server.go +++ b/pkg/transport/server.go @@ -10,7 +10,7 @@ import ( "github.com/HyNetwork/hysteria/pkg/conns/faketcp" "github.com/HyNetwork/hysteria/pkg/conns/udp" "github.com/HyNetwork/hysteria/pkg/conns/wechat" - "github.com/HyNetwork/hysteria/pkg/obfs" + obfsPkg "github.com/HyNetwork/hysteria/pkg/obfs" "github.com/HyNetwork/hysteria/pkg/sockopt" "github.com/HyNetwork/hysteria/pkg/utils" "github.com/lucas-clemente/quic-go" @@ -76,7 +76,7 @@ var DefaultServerTransport = &ServerTransport{ ResolvePreference: ResolvePreferenceDefault, } -func (st *ServerTransport) quicPacketConn(proto string, laddr string, obfs obfs.Obfuscator) (net.PacketConn, error) { +func (st *ServerTransport) quicPacketConn(proto string, laddr string, obfs obfsPkg.Obfuscator) (net.PacketConn, error) { if len(proto) == 0 || proto == "udp" { laddrU, err := net.ResolveUDPAddr("udp", laddr) if err != nil { @@ -101,12 +101,10 @@ 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 + if obfs == nil { + obfs = obfsPkg.NewDummyObfuscator() } + return wechat.NewObfsWeChatUDPConn(conn, obfs), nil } else if proto == "faketcp" { conn, err := faketcp.Listen("tcp", laddr) if err != nil { @@ -123,7 +121,7 @@ func (st *ServerTransport) quicPacketConn(proto string, laddr string, obfs obfs. } } -func (st *ServerTransport) QUICListen(proto string, listen string, tlsConfig *tls.Config, quicConfig *quic.Config, obfs obfs.Obfuscator) (quic.Listener, error) { +func (st *ServerTransport) QUICListen(proto string, listen string, tlsConfig *tls.Config, quicConfig *quic.Config, obfs obfsPkg.Obfuscator) (quic.Listener, error) { pktConn, err := st.quicPacketConn(proto, listen, obfs) if err != nil { return nil, err