diff options
author | root <sina@snix.ir> | 2022-02-04 21:05:37 +0000 |
---|---|---|
committer | root <sina@snix.ir> | 2022-02-04 21:05:37 +0000 |
commit | 572f2a3dfb2fa94cdd0846b1b132a6761bbce4ac (patch) | |
tree | b35b1e86c45458aa43da9788d56f16c702cb08c8 | |
parent | 4039849464722c1ddadcacd136ae7e2f59835d63 (diff) |
-rw-r--r-- | ntcp/ntcp.go | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/ntcp/ntcp.go b/ntcp/ntcp.go index 9defe4a..57f99b6 100644 --- a/ntcp/ntcp.go +++ b/ntcp/ntcp.go @@ -81,17 +81,12 @@ func (rc *httpHostRead) setIoWriter(wr io.Writer) { rc.te = io.TeeReader(rc.re, func (rc *sniTLSLoadHs) setIoWriter(wr io.Writer) { rc.te = io.TeeReader(rc.re, wr) } type forgeReader struct { - reader io.Reader - missing []byte + reader io.Reader + missig io.Reader } func (p *forgeReader) Read(b []byte) (int, error) { - n, err := p.reader.Read(b) - if err != nil { - return n, err - } - copy(b, append(p.missing, b...)) - return n + len(p.missing), err + return io.MultiReader(p.missig, p.reader).Read(b) } func NewProxy() *proxyTLS { @@ -153,7 +148,8 @@ func (str *proxyTLS) handleTLSConn(inConn net.Conn, miss []byte) { } header, fread, err := peekClientHost( - &sniTLSLoadHs{re: &forgeReader{reader: inConn, missing: miss}}) + &sniTLSLoadHs{re: &forgeReader{ + reader: inConn, missig: bytes.NewReader(miss)}}) if err != nil { opts.CONNEC(err, inConn.RemoteAddr().String()) return @@ -218,7 +214,9 @@ func (str *proxyTLS) handleHTTPConn(inConn net.Conn, miss []byte) { } header, fread, err := peekClientHost( - &httpHostRead{re: &forgeReader{reader: inConn, missing: miss}}) + &httpHostRead{re: &forgeReader{ + reader: inConn, missig: bytes.NewReader(miss), + }}) if err != nil { opts.CONNEC(err, inConn.RemoteAddr().String()) return |