From cd8016e8b5cf648c837463fc0b7041547de239e1 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Sun, 13 Oct 2024 11:19:40 +0800 Subject: [PATCH] use the new HTTP/3 client API --- client.go | 27 ++++++++++++--------------- cmd/client/main.go | 2 +- go.mod | 2 +- go.sum | 4 ++-- 4 files changed, 16 insertions(+), 19 deletions(-) diff --git a/client.go b/client.go index a2cfefa..cb7f6f3 100644 --- a/client.go +++ b/client.go @@ -34,10 +34,10 @@ type Client struct { // QUICConfig is the QUIC config used when dialing the QUIC connection. QUICConfig *quic.Config - dialOnce sync.Once - dialErr error - conn quic.Connection - rt *http3.SingleDestinationRoundTripper + dialOnce sync.Once + dialErr error + conn quic.Connection + clientConn *http3.ClientConn } // DialAddr dials a proxied connection to a target server. @@ -104,23 +104,20 @@ func (c *Client) dial(ctx context.Context, expandedTemplate string) (net.PacketC return } c.conn = conn - c.rt = &http3.SingleDestinationRoundTripper{ - Connection: conn, - EnableDatagrams: true, - } + tr := &http3.Transport{EnableDatagrams: true} + c.clientConn = tr.NewClientConn(conn) }) if c.dialErr != nil { return nil, nil, c.dialErr } - conn := c.rt.Start() select { case <-ctx.Done(): return nil, nil, context.Cause(ctx) - case <-conn.Context().Done(): - return nil, nil, context.Cause(conn.Context()) - case <-conn.ReceivedSettings(): + case <-c.clientConn.Context().Done(): + return nil, nil, context.Cause(c.clientConn.Context()) + case <-c.clientConn.ReceivedSettings(): } - settings := conn.Settings() + settings := c.clientConn.Settings() if !settings.EnableExtendedConnect { return nil, nil, errors.New("masque: server didn't enable Extended CONNECT") } @@ -128,7 +125,7 @@ func (c *Client) dial(ctx context.Context, expandedTemplate string) (net.PacketC return nil, nil, errors.New("masque: server didn't enable Datagrams") } - rstr, err := c.rt.OpenRequestStream(ctx) + rstr, err := c.clientConn.OpenRequestStream(ctx) if err != nil { return nil, nil, fmt.Errorf("masque: failed to open request stream: %w", err) } @@ -149,7 +146,7 @@ func (c *Client) dial(ctx context.Context, expandedTemplate string) (net.PacketC if rsp.StatusCode < 200 || rsp.StatusCode > 299 { return nil, rsp, fmt.Errorf("masque: server responded with %d", rsp.StatusCode) } - return newProxiedConn(rstr, conn.LocalAddr()), rsp, nil + return newProxiedConn(rstr, c.conn.LocalAddr()), rsp, nil } // Close closes the connection to the proxy. diff --git a/cmd/client/main.go b/cmd/client/main.go index 191c213..fd5b1a3 100644 --- a/cmd/client/main.go +++ b/cmd/client/main.go @@ -46,7 +46,7 @@ func main() { } hcl := &http.Client{ - Transport: &http3.RoundTripper{ + Transport: &http3.Transport{ Dial: func(ctx context.Context, addr string, tlsConf *tls.Config, quicConf *quic.Config) (quic.EarlyConnection, error) { raddr, err := net.ResolveUDPAddr("udp", host+":"+strconv.Itoa(int(port))) if err != nil { diff --git a/go.mod b/go.mod index c9ebba7..641283c 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.22 require ( github.com/dunglas/httpsfv v1.0.2 - github.com/quic-go/quic-go v0.47.0 + github.com/quic-go/quic-go v0.48.0 github.com/stretchr/testify v1.9.0 github.com/yosida95/uritemplate/v3 v3.0.2 go.uber.org/goleak v1.3.0 diff --git a/go.sum b/go.sum index 6852c8c..512ac81 100644 --- a/go.sum +++ b/go.sum @@ -31,8 +31,8 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI= github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg= -github.com/quic-go/quic-go v0.47.0 h1:yXs3v7r2bm1wmPTYNLKAAJTHMYkPEsfYJmTazXrCZ7Y= -github.com/quic-go/quic-go v0.47.0/go.mod h1:3bCapYsJvXGZcipOHuu7plYtaV6tnF+z7wIFsU0WK9E= +github.com/quic-go/quic-go v0.48.0 h1:2TCyvBrMu1Z25rvIAlnp2dPT4lgh/uTqLqiXVpp5AeU= +github.com/quic-go/quic-go v0.48.0/go.mod h1:yBgs3rWBOADpga7F+jJsb6Ybg1LSYiQvwWlLX+/6HMs= github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=