From d68e54c1df59f2a927482bb7c454e071b4c0565e Mon Sep 17 00:00:00 2001 From: Alex Denes Date: Tue, 5 Apr 2022 05:08:46 +0000 Subject: [PATCH] Single connection, parallel goroutines for RX/TX, error handling --- ws/wsclient.go | 23 +++++------------------ 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/ws/wsclient.go b/ws/wsclient.go index da4a424..411bf51 100644 --- a/ws/wsclient.go +++ b/ws/wsclient.go @@ -12,7 +12,7 @@ import ( "github.com/net-byte/vtun/common/netutil" "github.com/net-byte/vtun/tun" "github.com/songgao/water" - "github.com/songgao/water/waterutil" + //"github.com/songgao/water/waterutil" ) // Start websocket client @@ -34,45 +34,32 @@ func StartClient(config config.Config) { func wsToTun(wg *sync.WaitGroup, config config.Config, wsconn net.Conn, iface *water.Interface) { defer wg.Done() for { - var packet []byte - var err error wsconn.SetReadDeadline(time.Now().Add(time.Duration(config.Timeout) * time.Second)) - packet, err = wsutil.ReadServerBinary(wsconn) + packet, err := wsutil.ReadServerBinary(wsconn) if err != nil { break } if config.Obfs { packet = cipher.XOR(packet) } - if !waterutil.IsIPv4(packet) { - continue - } iface.Write(packet) } } func tunToWs(wg *sync.WaitGroup, config config.Config, wsconn net.Conn, iface *water.Interface) { defer wg.Done() - packet := make([]byte, 0, config.MTU) + packet := make([]byte, config.MTU) for { n, err := iface.Read(packet) if err != nil || n == 0 { break } - packet = packet[:n] - if !waterutil.IsIPv4(packet) { - continue - } - srcIPv4, dstIPv4 := netutil.GetIPv4(packet) - if srcIPv4 == "" || dstIPv4 == "" { - continue - } + b := packet[:n] if config.Obfs { packet = cipher.XOR(packet) } wsconn.SetWriteDeadline(time.Now().Add(time.Duration(config.Timeout) * time.Second)) - err = wsutil.WriteClientBinary(wsconn, packet) - if err != nil { + if err = wsutil.WriteClientBinary(wsconn, b); err != nil { break } }