From 098a00b0257cbb8721870a6f5d7d1dd990f07a12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=96=E7=95=8C?= Date: Wed, 4 Jun 2025 23:23:36 +0800 Subject: [PATCH] Fix v2ray websocket transport --- transport/v2raywebsocket/conn.go | 21 +++++++++++---------- transport/v2raywebsocket/deadline.go | 22 ---------------------- transport/v2raywebsocket/writer.go | 2 +- 3 files changed, 12 insertions(+), 33 deletions(-) delete mode 100644 transport/v2raywebsocket/deadline.go diff --git a/transport/v2raywebsocket/conn.go b/transport/v2raywebsocket/conn.go index a796e612..7f347dc9 100644 --- a/transport/v2raywebsocket/conn.go +++ b/transport/v2raywebsocket/conn.go @@ -62,15 +62,16 @@ func (c *WebsocketConn) Close() error { func (c *WebsocketConn) Read(b []byte) (n int, err error) { var header ws.Header for { - n, err = wrapWsError0(c.reader.Read(b)) + n, err = c.reader.Read(b) if n > 0 { err = nil return } if !E.IsMulti(err, io.EOF, wsutil.ErrNoFrameAdvance) { + err = wrapWsError(err) return } - header, err = c.reader.NextFrame() + header, err = wrapWsError0(c.reader.NextFrame()) if err != nil { return } @@ -79,14 +80,14 @@ func (c *WebsocketConn) Read(b []byte) (n int, err error) { err = wsutil.ErrFrameTooLarge return } - err = c.controlHandler(header, c.reader) + err = wrapWsError(c.controlHandler(header, c.reader)) if err != nil { return } continue } if header.OpCode&ws.OpBinary == 0 { - err = c.reader.Discard() + err = wrapWsError(c.reader.Discard()) if err != nil { return } @@ -178,12 +179,12 @@ func (c *EarlyWebsocketConn) writeRequest(content []byte) error { conn, err = c.dialContext(c.ctx, &c.requestURL, c.headers) } if err != nil { - return wrapWsError(err) + return err } if len(lateData) > 0 { _, err = conn.Write(lateData) if err != nil { - return wrapWsError(err) + return err } } c.conn = conn @@ -202,7 +203,7 @@ func (c *EarlyWebsocketConn) Write(b []byte) (n int, err error) { if c.conn != nil { return wrapWsError0(c.conn.Write(b)) } - err = wrapWsError(c.writeRequest(b)) + err = c.writeRequest(b) c.err = err close(c.create) if err != nil { @@ -223,7 +224,7 @@ func (c *EarlyWebsocketConn) WriteBuffer(buffer *buf.Buffer) error { if c.err != nil { return c.err } - err := wrapWsError(c.writeRequest(buffer.Bytes())) + err := c.writeRequest(buffer.Bytes()) c.err = err close(c.create) return err @@ -278,7 +279,7 @@ func wrapWsError(err error) error { if err == nil { return nil } - var closedErr *wsutil.ClosedError + var closedErr wsutil.ClosedError if errors.As(err, &closedErr) { if closedErr.Code == ws.StatusNormalClosure { err = io.EOF @@ -291,5 +292,5 @@ func wrapWsError0[T any](value T, err error) (T, error) { if err == nil { return value, nil } - return common.DefaultValue[T](), wrapWsError(err) + return value, wrapWsError(err) } diff --git a/transport/v2raywebsocket/deadline.go b/transport/v2raywebsocket/deadline.go deleted file mode 100644 index 195565aa..00000000 --- a/transport/v2raywebsocket/deadline.go +++ /dev/null @@ -1,22 +0,0 @@ -package v2raywebsocket - -import ( - "net" - "time" -) - -type deadConn struct { - net.Conn -} - -func (c *deadConn) SetDeadline(t time.Time) error { - return nil -} - -func (c *deadConn) SetReadDeadline(t time.Time) error { - return nil -} - -func (c *deadConn) SetWriteDeadline(t time.Time) error { - return nil -} diff --git a/transport/v2raywebsocket/writer.go b/transport/v2raywebsocket/writer.go index 5bd0d0a1..c08a654f 100644 --- a/transport/v2raywebsocket/writer.go +++ b/transport/v2raywebsocket/writer.go @@ -66,7 +66,7 @@ func (w *Writer) WriteBuffer(buffer *buf.Buffer) error { ws.Cipher(data, *(*[4]byte)(header[1+payloadBitLength:]), 0) } - return w.writer.WriteBuffer(buffer) + return wrapWsError(w.writer.WriteBuffer(buffer)) } func (w *Writer) FrontHeadroom() int {