diff --git a/proxy/dokodemo/dokodemo.go b/proxy/dokodemo/dokodemo.go index 9cb75f3b0..524eda03e 100644 --- a/proxy/dokodemo/dokodemo.go +++ b/proxy/dokodemo/dokodemo.go @@ -118,7 +118,7 @@ func (this *DokodemoDoor) ListenTCP(port v2net.Port) error { return nil } -func (this *DokodemoDoor) HandleTCPConnection(conn hub.Connection) { +func (this *DokodemoDoor) HandleTCPConnection(conn *hub.Connection) { defer conn.Close() ray := this.packetDispatcher.DispatchToOutbound(v2net.TCPDestination(this.address, this.port)) diff --git a/proxy/http/http.go b/proxy/http/http.go index 31bf787f7..177540619 100644 --- a/proxy/http/http.go +++ b/proxy/http/http.go @@ -95,7 +95,7 @@ func parseHost(rawHost string, defaultPort v2net.Port) (v2net.Destination, error return v2net.TCPDestination(v2net.DomainAddress(host), port), nil } -func (this *HttpProxyServer) handleConnection(conn hub.Connection) { +func (this *HttpProxyServer) handleConnection(conn *hub.Connection) { defer conn.Close() reader := bufio.NewReader(conn) diff --git a/proxy/shadowsocks/shadowsocks.go b/proxy/shadowsocks/shadowsocks.go index fed046660..54b3ec383 100644 --- a/proxy/shadowsocks/shadowsocks.go +++ b/proxy/shadowsocks/shadowsocks.go @@ -157,7 +157,7 @@ func (this *Shadowsocks) handlerUDPPayload(payload *alloc.Buffer, source v2net.D }) } -func (this *Shadowsocks) handleConnection(conn hub.Connection) { +func (this *Shadowsocks) handleConnection(conn *hub.Connection) { defer conn.Close() buffer := alloc.NewSmallBuffer() diff --git a/proxy/socks/server.go b/proxy/socks/server.go index 86fc41a98..864efac1e 100644 --- a/proxy/socks/server.go +++ b/proxy/socks/server.go @@ -92,7 +92,7 @@ func (this *Server) Listen(port v2net.Port) error { return nil } -func (this *Server) handleConnection(connection hub.Connection) { +func (this *Server) handleConnection(connection *hub.Connection) { defer connection.Close() timedReader := v2net.NewTimeOutReader(120, connection) diff --git a/proxy/vmess/inbound/inbound.go b/proxy/vmess/inbound/inbound.go index 4314cfc17..073b6d316 100644 --- a/proxy/vmess/inbound/inbound.go +++ b/proxy/vmess/inbound/inbound.go @@ -115,7 +115,7 @@ func (this *VMessInboundHandler) Listen(port v2net.Port) error { return nil } -func (this *VMessInboundHandler) HandleConnection(connection hub.Connection) { +func (this *VMessInboundHandler) HandleConnection(connection *hub.Connection) { defer connection.Close() connReader := v2net.NewTimeOutReader(16, connection) diff --git a/transport/hub/connection.go b/transport/hub/connection.go index 2069b1f63..3426b0999 100644 --- a/transport/hub/connection.go +++ b/transport/hub/connection.go @@ -1,36 +1,18 @@ package hub import ( - "crypto/tls" "net" "time" - - "github.com/v2ray/v2ray-core/common" ) -type ConnectionHandler func(Connection) +type ConnectionHandler func(*Connection) -type Connection interface { - common.Releasable - - Read([]byte) (int, error) - Write([]byte) (int, error) - Close() error - LocalAddr() net.Addr - RemoteAddr() net.Addr - SetDeadline(t time.Time) error - SetReadDeadline(t time.Time) error - SetWriteDeadline(t time.Time) error - CloseRead() error - CloseWrite() error -} - -type TCPConnection struct { - conn *net.TCPConn +type Connection struct { + conn net.Conn listener *TCPHub } -func (this *TCPConnection) Read(b []byte) (int, error) { +func (this *Connection) Read(b []byte) (int, error) { if this == nil || this.conn == nil { return 0, ErrorClosedConnection } @@ -38,14 +20,14 @@ func (this *TCPConnection) Read(b []byte) (int, error) { return this.conn.Read(b) } -func (this *TCPConnection) Write(b []byte) (int, error) { +func (this *Connection) Write(b []byte) (int, error) { if this == nil || this.conn == nil { return 0, ErrorClosedConnection } return this.conn.Write(b) } -func (this *TCPConnection) Close() error { +func (this *Connection) Close() error { if this == nil || this.conn == nil { return ErrorClosedConnection } @@ -53,7 +35,7 @@ func (this *TCPConnection) Close() error { return err } -func (this *TCPConnection) Release() { +func (this *Connection) Release() { if this == nil || this.listener == nil { return } @@ -63,101 +45,22 @@ func (this *TCPConnection) Release() { this.listener = nil } -func (this *TCPConnection) LocalAddr() net.Addr { +func (this *Connection) LocalAddr() net.Addr { return this.conn.LocalAddr() } -func (this *TCPConnection) RemoteAddr() net.Addr { +func (this *Connection) RemoteAddr() net.Addr { return this.conn.RemoteAddr() } -func (this *TCPConnection) SetDeadline(t time.Time) error { +func (this *Connection) SetDeadline(t time.Time) error { return this.conn.SetDeadline(t) } -func (this *TCPConnection) SetReadDeadline(t time.Time) error { +func (this *Connection) SetReadDeadline(t time.Time) error { return this.conn.SetReadDeadline(t) } -func (this *TCPConnection) SetWriteDeadline(t time.Time) error { +func (this *Connection) SetWriteDeadline(t time.Time) error { return this.conn.SetWriteDeadline(t) } - -func (this *TCPConnection) CloseRead() error { - if this == nil || this.conn == nil { - return nil - } - return this.conn.CloseRead() -} - -func (this *TCPConnection) CloseWrite() error { - if this == nil || this.conn == nil { - return nil - } - return this.conn.CloseWrite() -} - -type TLSConnection struct { - conn *tls.Conn - listener *TCPHub -} - -func (this *TLSConnection) Read(b []byte) (int, error) { - if this == nil || this.conn == nil { - return 0, ErrorClosedConnection - } - return this.conn.Read(b) -} - -func (this *TLSConnection) Write(b []byte) (int, error) { - if this == nil || this.conn == nil { - return this.conn.Write(b) - } - return this.conn.Write(b) -} - -func (this *TLSConnection) Close() error { - if this == nil || this.conn == nil { - return ErrorClosedConnection - } - err := this.conn.Close() - return err -} - -func (this *TLSConnection) Release() { - if this == nil || this.listener == nil { - return - } - - this.Close() - this.conn = nil - this.listener = nil -} - -func (this *TLSConnection) LocalAddr() net.Addr { - return this.conn.LocalAddr() -} - -func (this *TLSConnection) RemoteAddr() net.Addr { - return this.conn.RemoteAddr() -} - -func (this *TLSConnection) SetDeadline(t time.Time) error { - return this.conn.SetDeadline(t) -} - -func (this *TLSConnection) SetReadDeadline(t time.Time) error { - return this.conn.SetReadDeadline(t) -} - -func (this *TLSConnection) SetWriteDeadline(t time.Time) error { - return this.conn.SetWriteDeadline(t) -} - -func (this *TLSConnection) CloseRead() error { - return nil -} - -func (this *TLSConnection) CloseWrite() error { - return nil -} diff --git a/transport/hub/tcp.go b/transport/hub/tcp.go index 54cda0e9e..eef64183f 100644 --- a/transport/hub/tcp.go +++ b/transport/hub/tcp.go @@ -51,7 +51,7 @@ func (this *TCPHub) start() { } continue } - go this.connCallback(&TCPConnection{ + go this.connCallback(&Connection{ conn: conn, listener: this, })