From 213ccebd917b2da7a2c81cae4f5c5157855c8ac0 Mon Sep 17 00:00:00 2001 From: gVisor bot Date: Tue, 31 Jul 2018 17:53:39 +0800 Subject: [PATCH] Fix: io copy REJECT error --- adapters/remote/reject.go | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/adapters/remote/reject.go b/adapters/remote/reject.go index 7833e004..b4ce4d86 100644 --- a/adapters/remote/reject.go +++ b/adapters/remote/reject.go @@ -3,12 +3,14 @@ package adapters import ( "io" "net" + "time" C "github.com/Dreamacro/clash/constant" ) // RejectAdapter is a reject connected adapter type RejectAdapter struct { + conn net.Conn } // Close is used to close connection @@ -16,7 +18,7 @@ func (r *RejectAdapter) Close() {} // Conn is used to http request func (r *RejectAdapter) Conn() net.Conn { - return nil + return r.conn } type Reject struct { @@ -31,19 +33,37 @@ func (r *Reject) Type() C.AdapterType { } func (r *Reject) Generator(addr *C.Addr) (adapter C.ProxyAdapter, err error) { - return &RejectAdapter{}, nil + return &RejectAdapter{conn: &NopConn{}}, nil } func NewReject() *Reject { return &Reject{} } -type NopRW struct{} +type NopConn struct{} -func (rw *NopRW) Read(b []byte) (int, error) { +func (rw *NopConn) Read(b []byte) (int, error) { return len(b), nil } -func (rw *NopRW) Write(b []byte) (int, error) { +func (rw *NopConn) Write(b []byte) (int, error) { return 0, io.EOF } + +// Close is fake function for net.Conn +func (rw *NopConn) Close() error { return nil } + +// LocalAddr is fake function for net.Conn +func (rw *NopConn) LocalAddr() net.Addr { return nil } + +// RemoteAddr is fake function for net.Conn +func (rw *NopConn) RemoteAddr() net.Addr { return nil } + +// SetDeadline is fake function for net.Conn +func (rw *NopConn) SetDeadline(time.Time) error { return nil } + +// SetReadDeadline is fake function for net.Conn +func (rw *NopConn) SetReadDeadline(time.Time) error { return nil } + +// SetWriteDeadline is fake function for net.Conn +func (rw *NopConn) SetWriteDeadline(time.Time) error { return nil }