|
@@ -49,32 +49,50 @@ func WrapConn(c net.Conn) Conn {
|
|
type WrapReadWriteCloserConn struct {
|
|
type WrapReadWriteCloserConn struct {
|
|
io.ReadWriteCloser
|
|
io.ReadWriteCloser
|
|
log.Logger
|
|
log.Logger
|
|
|
|
+
|
|
|
|
+ underConn net.Conn
|
|
}
|
|
}
|
|
|
|
|
|
-func WrapReadWriteCloserToConn(rwc io.ReadWriteCloser) Conn {
|
|
|
|
|
|
+func WrapReadWriteCloserToConn(rwc io.ReadWriteCloser, underConn net.Conn) Conn {
|
|
return &WrapReadWriteCloserConn{
|
|
return &WrapReadWriteCloserConn{
|
|
ReadWriteCloser: rwc,
|
|
ReadWriteCloser: rwc,
|
|
Logger: log.NewPrefixLogger(""),
|
|
Logger: log.NewPrefixLogger(""),
|
|
|
|
+ underConn: underConn,
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
func (conn *WrapReadWriteCloserConn) LocalAddr() net.Addr {
|
|
func (conn *WrapReadWriteCloserConn) LocalAddr() net.Addr {
|
|
|
|
+ if conn.underConn != nil {
|
|
|
|
+ return conn.underConn.LocalAddr()
|
|
|
|
+ }
|
|
return (*net.TCPAddr)(nil)
|
|
return (*net.TCPAddr)(nil)
|
|
}
|
|
}
|
|
|
|
|
|
func (conn *WrapReadWriteCloserConn) RemoteAddr() net.Addr {
|
|
func (conn *WrapReadWriteCloserConn) RemoteAddr() net.Addr {
|
|
|
|
+ if conn.underConn != nil {
|
|
|
|
+ return conn.underConn.RemoteAddr()
|
|
|
|
+ }
|
|
return (*net.TCPAddr)(nil)
|
|
return (*net.TCPAddr)(nil)
|
|
}
|
|
}
|
|
|
|
|
|
func (conn *WrapReadWriteCloserConn) SetDeadline(t time.Time) error {
|
|
func (conn *WrapReadWriteCloserConn) SetDeadline(t time.Time) error {
|
|
|
|
+ if conn.underConn != nil {
|
|
|
|
+ return conn.underConn.SetDeadline(t)
|
|
|
|
+ }
|
|
return &net.OpError{Op: "set", Net: "wrap", Source: nil, Addr: nil, Err: errors.New("deadline not supported")}
|
|
return &net.OpError{Op: "set", Net: "wrap", Source: nil, Addr: nil, Err: errors.New("deadline not supported")}
|
|
}
|
|
}
|
|
|
|
|
|
func (conn *WrapReadWriteCloserConn) SetReadDeadline(t time.Time) error {
|
|
func (conn *WrapReadWriteCloserConn) SetReadDeadline(t time.Time) error {
|
|
|
|
+ if conn.underConn != nil {
|
|
|
|
+ return conn.underConn.SetReadDeadline(t)
|
|
|
|
+ }
|
|
return &net.OpError{Op: "set", Net: "wrap", Source: nil, Addr: nil, Err: errors.New("deadline not supported")}
|
|
return &net.OpError{Op: "set", Net: "wrap", Source: nil, Addr: nil, Err: errors.New("deadline not supported")}
|
|
}
|
|
}
|
|
|
|
|
|
func (conn *WrapReadWriteCloserConn) SetWriteDeadline(t time.Time) error {
|
|
func (conn *WrapReadWriteCloserConn) SetWriteDeadline(t time.Time) error {
|
|
|
|
+ if conn.underConn != nil {
|
|
|
|
+ return conn.underConn.SetWriteDeadline(t)
|
|
|
|
+ }
|
|
return &net.OpError{Op: "set", Net: "wrap", Source: nil, Addr: nil, Err: errors.New("deadline not supported")}
|
|
return &net.OpError{Op: "set", Net: "wrap", Source: nil, Addr: nil, Err: errors.New("deadline not supported")}
|
|
}
|
|
}
|
|
|
|
|