From a4baa44fbd131e30341aa0b75a9ceccbf3459079 Mon Sep 17 00:00:00 2001 From: gospider <2216403312@qq.com> Date: Thu, 12 Jun 2025 22:26:55 +0800 Subject: [PATCH] sync --- compressConn.go | 47 +++++++++++++++++++++++++++-------------------- dial.go | 11 +++++++++++ go.mod | 13 +++++-------- go.sum | 16 ++++++++-------- roundTripper.go | 3 +-- 5 files changed, 52 insertions(+), 38 deletions(-) diff --git a/compressConn.go b/compressConn.go index 83a8c30..15a038c 100644 --- a/compressConn.go +++ b/compressConn.go @@ -6,9 +6,11 @@ import ( "io" "net" "strings" + "sync" "time" "github.com/klauspost/compress/zstd" + "github.com/mholt/archives" ) type CompressionConn struct { @@ -41,32 +43,37 @@ const ( CompressionLevelBest CompressionLevel = 2 ) -func NewCompression(decode string, leval CompressionLevel) (Compression, error) { +func NewCompression(decode string) (Compression, error) { var arch Compression switch strings.ToLower(decode) { - case "zstd": - options := []zstd.EOption{} - options2 := []zstd.DOption{} - switch leval { - case CompressionLevelFast: - options = append(options, zstd.WithEncoderLevel(zstd.SpeedFastest), zstd.WithZeroFrames(true), zstd.WithLowerEncoderMem(true)) - options2 = append(options2, zstd.WithDecoderLowmem(true)) - case CompressionLevelBest: - options = append(options, zstd.WithEncoderLevel(zstd.SpeedBetterCompression)) - default: - options = append(options, zstd.WithEncoderLevel(zstd.SpeedDefault), zstd.WithZeroFrames(true), zstd.WithLowerEncoderMem(true)) - options2 = append(options2, zstd.WithDecoderLowmem(true)) - } + case "s2": arch = compression{ openReader: func(r io.Reader) (io.ReadCloser, error) { - decoder, err := zstd.NewReader(r, options2...) + return archives.Sz{ + S2: archives.S2{ + Compression: archives.S2LevelBetter, + }, + }.OpenReader(r) + }, + openWriter: func(w io.Writer) (io.WriteCloser, error) { + return archives.Sz{ + S2: archives.S2{ + Compression: archives.S2LevelBetter, + }, + }.OpenWriter(w) + }, + } + case "zstd": + arch = compression{ + openReader: func(r io.Reader) (io.ReadCloser, error) { + decoder, err := zstd.NewReader(r) if err != nil { return nil, err } return decoder.IOReadCloser(), nil }, openWriter: func(w io.Writer) (io.WriteCloser, error) { - encoder, err := zstd.NewWriter(w, options...) + encoder, err := zstd.NewWriter(nil, zstd.WithEncoderLevel(zstd.SpeedDefault)) if err != nil { return nil, err } @@ -117,10 +124,10 @@ func NewCompressionConn(conn net.Conn, arch Compression) (net.Conn, error) { conn: conn, r: r, w: w, - // oneFunc: sync.OnceFunc(func() { - // defer recover() - // w.Close() - // }), + oneFunc: sync.OnceFunc(func() { + defer recover() + w.Close() + }), } if f, ok := w.(interface{ Flush() error }); ok { ccon.f = f diff --git a/dial.go b/dial.go index bbfd0b9..8fd85ef 100644 --- a/dial.go +++ b/dial.go @@ -169,6 +169,17 @@ func (obj *Dialer) DialProxyContext(ctx *Response, network string, proxyTlsConfi } } packCon, conn, err = obj.verifyProxyToRemote(ctx, conn, proxyTlsConfig, oneProxy, remoteUrl, index == proxyLen-2, true) + if err != nil { + break + } + } + if err != nil { + if conn != nil { + conn.Close() + } + if packCon != nil { + packCon.Close() + } } return packCon, conn, err } diff --git a/go.mod b/go.mod index e1da772..d525141 100644 --- a/go.mod +++ b/go.mod @@ -5,15 +5,16 @@ go 1.24.0 require ( github.com/gospider007/bar v0.0.0-20250217074946-47896d8de2ba github.com/gospider007/bs4 v0.0.0-20250413121342-fed910fb00c9 - github.com/gospider007/gson v0.0.0-20250530002642-aee7c1b761df + github.com/gospider007/gson v0.0.0-20250611163241-fa021e9c5531 github.com/gospider007/gtls v0.0.0-20250610060422-446e017b9858 - github.com/gospider007/http2 v0.0.0-20250427082905-4aed0707e580 - github.com/gospider007/http3 v0.0.0-20250416085920-b642f3f91f47 + github.com/gospider007/http2 v0.0.0-20250611163252-ee5823d0f04a + github.com/gospider007/http3 v0.0.0-20250611163115-77b77de7a3f9 github.com/gospider007/ja3 v0.0.0-20250427082442-f7dc5fb959e6 github.com/gospider007/re v0.0.0-20250217075352-bcb79f285d6c - github.com/gospider007/tools v0.0.0-20250610060552-2e45eaa25022 + github.com/gospider007/tools v0.0.0-20250611120310-b7d5692a72bf github.com/gospider007/websocket v0.0.0-20250429035144-b1cf6819063a github.com/klauspost/compress v1.18.0 + github.com/mholt/archives v0.1.2 github.com/quic-go/quic-go v0.52.0 github.com/refraction-networking/uquic v0.0.6 github.com/refraction-networking/utls v1.7.3 @@ -37,7 +38,6 @@ require ( github.com/dsnet/compress v0.0.2-0.20230904184137-39efe44ab707 // indirect github.com/gaukas/clienthellod v0.4.2 // indirect github.com/gaukas/godicttls v0.0.4 // indirect - github.com/go-logr/logr v1.4.3 // indirect github.com/go-task/slim-sprig/v3 v3.0.0 // indirect github.com/gobwas/httphead v0.1.0 // indirect github.com/gobwas/pool v0.2.1 // indirect @@ -53,7 +53,6 @@ require ( github.com/kr/pretty v0.3.1 // indirect github.com/libdns/libdns v1.1.0 // indirect github.com/mholt/acmez/v3 v3.1.2 // indirect - github.com/mholt/archives v0.1.2 // indirect github.com/miekg/dns v1.1.66 // indirect github.com/minio/minlz v1.0.1 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect @@ -86,7 +85,5 @@ require ( golang.org/x/sync v0.15.0 // indirect golang.org/x/sys v0.33.0 // indirect golang.org/x/text v0.26.0 // indirect - golang.org/x/time v0.11.0 // indirect golang.org/x/tools v0.34.0 // indirect - google.golang.org/protobuf v1.36.6 // indirect ) diff --git a/go.sum b/go.sum index cd6af07..5e773e4 100644 --- a/go.sum +++ b/go.sum @@ -108,22 +108,22 @@ github.com/gospider007/blog v0.0.0-20250302134054-8afc12c2a9a7 h1:QP46FdP6nJET+b github.com/gospider007/blog v0.0.0-20250302134054-8afc12c2a9a7/go.mod h1:yDzKXJzaYENfMvleqwdo362NE+BXDhwtKXRUQUWHH+I= github.com/gospider007/bs4 v0.0.0-20250413121342-fed910fb00c9 h1:V/Fuzox1GNZzlZCY548Na3mdfjLmWoSqexa53d3dKyE= github.com/gospider007/bs4 v0.0.0-20250413121342-fed910fb00c9/go.mod h1:KBnaNWpVupRQbPZ6jz2jhX/hnRK1w30RKJvl3Micjws= -github.com/gospider007/gson v0.0.0-20250530002642-aee7c1b761df h1:Xi1Sm1caw39tXUVZAuVAVSdJ9x7h0Y1bPOw3sxxkzsM= -github.com/gospider007/gson v0.0.0-20250530002642-aee7c1b761df/go.mod h1:+O/+tzjrqz67RehAyJaRApESHo1Z9fuxBeQmQ8GMELw= +github.com/gospider007/gson v0.0.0-20250611163241-fa021e9c5531 h1:dzUU4p3u9eaY1vlJFUXueuyuFX+AirdOtrWf/4Z8WfU= +github.com/gospider007/gson v0.0.0-20250611163241-fa021e9c5531/go.mod h1:YO6h5iR/nAFAaZ34JJbkJPuMG2nq2mShKWI7llEWRQA= github.com/gospider007/gtls v0.0.0-20250610060422-446e017b9858 h1:Tb+T5YfysjR7Mp22AgrJhMPF28KBgjWkbKj2zi8AyBU= github.com/gospider007/gtls v0.0.0-20250610060422-446e017b9858/go.mod h1:SxhMpxq4EYHlUre2EdQ4dKKGZyvj7+1PYZ2LQ9RO0y4= -github.com/gospider007/http2 v0.0.0-20250427082905-4aed0707e580 h1:JLZeCin6giqOV3sAy7BGqFkc+qHvO389O/aTT5JJc1k= -github.com/gospider007/http2 v0.0.0-20250427082905-4aed0707e580/go.mod h1:WH7RqG9ecX15uAhzZDr5cbTaTPZST3ST0X4okNDSR5I= -github.com/gospider007/http3 v0.0.0-20250416085920-b642f3f91f47 h1:dpV6hkUeMbZrCZSaR99u6TNXry9M3FSga+9CmjZ5Zmo= -github.com/gospider007/http3 v0.0.0-20250416085920-b642f3f91f47/go.mod h1:9JjUDTG3PcsH7FBF0VgJIK3x3pn5Goq9no91rAotvKs= +github.com/gospider007/http2 v0.0.0-20250611163252-ee5823d0f04a h1:OtgLN7N2rFHxF1HXutXeY33bzNAZ/npzQQ4JlaDZk+8= +github.com/gospider007/http2 v0.0.0-20250611163252-ee5823d0f04a/go.mod h1:r0XfXyaHynGBLi0o7SN6KxPL0V7q5sX2JVvk2ISDyH0= +github.com/gospider007/http3 v0.0.0-20250611163115-77b77de7a3f9 h1:6OiYSTsyrabSDV0dj5SpAGenpPm8VA20fD/FVzrx/TM= +github.com/gospider007/http3 v0.0.0-20250611163115-77b77de7a3f9/go.mod h1:FObAlfJRtytX4nI47Ra+j2mKoJlUmxfraqpeOBX2Bi0= github.com/gospider007/ja3 v0.0.0-20250427082442-f7dc5fb959e6 h1:HA1+KhAvM/ifeyR7wdxYV6Ilg2QCQtflGAmkgrgim8Y= github.com/gospider007/ja3 v0.0.0-20250427082442-f7dc5fb959e6/go.mod h1:xmgdol7ucS7vLvRzedImp09Yi0alKCp76cX+Cm/UVQI= github.com/gospider007/kinds v0.0.0-20250217075226-10f199f7215d h1:+Fih572EdNmYCK1L82MyWOj9tAwIgZ2JqepmasAclg8= github.com/gospider007/kinds v0.0.0-20250217075226-10f199f7215d/go.mod h1:3u6J+nbdWhCNJGiQjq/hKSukn2k6ebjd98rd2+fzKNo= github.com/gospider007/re v0.0.0-20250217075352-bcb79f285d6c h1:8/Cf+c2680tkWJ+ueZ9RLLK5R5R8nhE8pNBUPHjkvkM= github.com/gospider007/re v0.0.0-20250217075352-bcb79f285d6c/go.mod h1:dd8aDIUG1vDPP5r+vHBtiUK0Zn6uk3SsWt1ZvmCCHLs= -github.com/gospider007/tools v0.0.0-20250610060552-2e45eaa25022 h1:IPoXe0+GyHjiIPn0Qy7nElpJ81awXUWrCoNholizqV4= -github.com/gospider007/tools v0.0.0-20250610060552-2e45eaa25022/go.mod h1:x7fyDzsG7lPJO6Q3D6DIzdUA+J9RAQoyOdmcP1XQF1k= +github.com/gospider007/tools v0.0.0-20250611120310-b7d5692a72bf h1:pjI49A7tZuZpxaAd7j+ZGVOCAblAoR4gbr7fau5UNg0= +github.com/gospider007/tools v0.0.0-20250611120310-b7d5692a72bf/go.mod h1:x7fyDzsG7lPJO6Q3D6DIzdUA+J9RAQoyOdmcP1XQF1k= github.com/gospider007/websocket v0.0.0-20250429035144-b1cf6819063a h1:DJMk+oALIJg3ArN5/DIPrQagWQL1Qi/c3DlXT9l1dGo= github.com/gospider007/websocket v0.0.0-20250429035144-b1cf6819063a/go.mod h1:0yVYF7b5kRayyUzAVgg6h1x+eZujKoSaA4n2krG5F7g= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= diff --git a/roundTripper.go b/roundTripper.go index ca0d575..c904b8f 100644 --- a/roundTripper.go +++ b/roundTripper.go @@ -257,7 +257,7 @@ func (obj *roundTripper) dial(ctx *Response) (conn *connecotr, err error) { if len(proxys) > 0 { comp := proxys[len(proxys)-1] if comp.Compression != "" { - arch, err = NewCompression(comp.Compression, CompressionLevelBest) + arch, err = NewCompression(comp.Compression) if err != nil { return nil, err } @@ -459,7 +459,6 @@ func (obj *roundTripper) RoundTrip(ctx *Response) (err error) { return err } err = obj.poolRoundTrip(task) - // log.Print(err) if err == nil || !task.suppertRetry() { break }