This commit is contained in:
gospider
2025-06-11 20:03:51 +08:00
parent 8883fd2cac
commit fae0d3a8d0
5 changed files with 29 additions and 15 deletions

View File

@@ -110,7 +110,7 @@ func formWrite(writer *multipart.Writer, key string, val any) (err error) {
case string:
_, err = wp.Write(tools.StringToBytes(content))
case io.Reader:
_, err = io.Copy(wp, content)
_, err = tools.Copy(wp, content)
default:
con, err := gson.Encode(content)
if err != nil {

View File

@@ -12,10 +12,11 @@ import (
)
type CompressionConn struct {
conn net.Conn
w io.WriteCloser
r io.ReadCloser
f interface{ Flush() error }
conn net.Conn
oneFunc func()
w io.WriteCloser
r io.ReadCloser
f interface{ Flush() error }
}
type Compression interface {
OpenReader(r io.Reader) (io.ReadCloser, error)
@@ -93,7 +94,7 @@ func NewCompression(decode string, leval CompressionLevel) (Compression, error)
if n != 1 {
return nil, errors.New("invalid response")
}
return flate.NewWriter(w, flate.BestCompression)
return flate.NewWriter(w, flate.DefaultCompression)
},
}
default:
@@ -111,7 +112,16 @@ func NewCompressionConn(conn net.Conn, arch Compression) (net.Conn, error) {
if err != nil {
return nil, err
}
ccon := &CompressionConn{conn: conn, r: r, w: w}
ccon := &CompressionConn{
conn: conn,
r: r,
w: w,
// oneFunc: sync.OnceFunc(func() {
// defer recover()
// w.Close()
// }),
}
if f, ok := w.(interface{ Flush() error }); ok {
ccon.f = f
}
@@ -132,7 +142,11 @@ func (obj *CompressionConn) Write(b []byte) (n int, err error) {
return
}
func (obj *CompressionConn) Close() error {
return obj.conn.Close()
err := obj.conn.Close()
if obj.oneFunc != nil {
obj.oneFunc()
}
return err
}
func (obj *CompressionConn) LocalAddr() net.Addr {
return obj.conn.LocalAddr()

View File

@@ -392,7 +392,7 @@ func (obj *Dialer) verifyUDPSocks5(ctx *Response, conn net.Conn, proxyAddr Addre
udpCtx, cnl := context.WithCancel(context.TODO())
wrapConn = NewUDPConn(udpCtx, wrapConn, &net.UDPAddr{IP: proxyAddress.IP, Port: proxyAddress.Port}, remoteAddr)
go func() {
io.Copy(io.Discard, conn)
tools.Copy(io.Discard, conn)
cnl()
}()
return

View File

@@ -52,7 +52,7 @@ func NewClientConn(con net.Conn, closeFunc func(error)) *clientConn {
w: bufio.NewWriter(con),
}
go func() {
_, err := io.Copy(writer, con)
_, err := tools.Copy(writer, con)
writer.CloseWithError(err)
c.CloseWithError(err)
}()
@@ -83,7 +83,7 @@ func (obj *clientConn) send(req *http.Request, orderHeaders []interface {
obj.readWriteCtx.readCnl(readErr)
}()
if res.Body != nil {
_, readErr = io.Copy(pw, rawBody)
_, readErr = tools.Copy(pw, rawBody)
}
if readErr != nil && readErr != io.EOF && readErr != io.ErrUnexpectedEOF {
err = tools.WrapError(readErr, "failed to read response body")
@@ -255,14 +255,14 @@ func (obj *clientConn) httpWrite(req *http.Request, rawHeaders http.Header, orde
}
if chunked {
chunkedWriter := newChunkedWriter(obj.w)
if _, err = io.Copy(chunkedWriter, req.Body); err != nil {
if _, err = tools.Copy(chunkedWriter, req.Body); err != nil {
return
}
if err = chunkedWriter.Close(); err != nil {
return
}
} else {
if _, err = io.Copy(obj.w, req.Body); err != nil {
if _, err = tools.Copy(obj.w, req.Body); err != nil {
return
}
}

View File

@@ -329,12 +329,12 @@ func (obj *Response) ReadBody() (err error) {
go func() {
defer close(done)
if obj.option.Bar && obj.ContentLength() > 0 {
_, readErr = io.Copy(&barBody{
_, readErr = tools.Copy(&barBody{
bar: bar.NewClient(obj.response.ContentLength),
body: bBody,
}, obj.Body())
} else {
_, readErr = io.Copy(bBody, obj.Body())
_, readErr = tools.Copy(bBody, obj.Body())
}
if readErr == io.ErrUnexpectedEOF {
readErr = nil