From d673df054bc9f5f5f65ed72bd0cb0593b77fbeb2 Mon Sep 17 00:00:00 2001 From: roc Date: Thu, 1 Dec 2022 18:51:42 +0800 Subject: [PATCH] fix Transport.SetDialTLS not work in http2 --- internal/http2/go115.go | 20 +++++++++++++------- internal/http2/not_go115.go | 26 -------------------------- 2 files changed, 13 insertions(+), 33 deletions(-) delete mode 100644 internal/http2/not_go115.go diff --git a/internal/http2/go115.go b/internal/http2/go115.go index c9d2183f..629d8613 100644 --- a/internal/http2/go115.go +++ b/internal/http2/go115.go @@ -11,18 +11,24 @@ import ( "context" "crypto/tls" reqtls "github.com/imroc/req/v3/pkg/tls" + "net" ) // dialTLSWithContext uses tls.Dialer, added in Go 1.15, to open a TLS // connection. -func (t *Transport) dialTLSWithContext(ctx context.Context, network, addr string, cfg *tls.Config) (reqtls.Conn, error) { - dialer := &tls.Dialer{ - Config: cfg, +func (t *Transport) dialTLSWithContext(ctx context.Context, network, addr string, cfg *tls.Config) (tlsCn reqtls.Conn, err error) { + var conn net.Conn + if t.DialTLSContext != nil { + conn, err = t.DialTLSContext(ctx, network, addr) + } else { + dialer := &tls.Dialer{ + Config: cfg, + } + conn, err = dialer.DialContext(ctx, network, addr) } - cn, err := dialer.DialContext(ctx, network, addr) if err != nil { - return nil, err + return } - tlsCn := cn.(reqtls.Conn) // DialContext comment promises this will always succeed - return tlsCn, nil + tlsCn = conn.(reqtls.Conn) + return } diff --git a/internal/http2/not_go115.go b/internal/http2/not_go115.go deleted file mode 100644 index 47349d62..00000000 --- a/internal/http2/not_go115.go +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2021 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !go1.15 -// +build !go1.15 - -package http2 - -// dialTLSWithContext opens a TLS connection. -func (t *Transport) dialTLSWithContext(ctx context.Context, network, addr string, cfg *tls.Config) (TLSConn, error) { - cn, err := tls.Dial(network, addr, cfg) - if err != nil { - return nil, err - } - if err := cn.Handshake(); err != nil { - return nil, err - } - if cfg.InsecureSkipVerify { - return cn, nil - } - if err := cn.VerifyHostname(cfg.ServerName); err != nil { - return nil, err - } - return cn, nil -}