@@ -21,10 +21,11 @@ import (
2121)
2222
2323type HTTPProxyDialer struct {
24- address string
25- tlsConfig * tls.Config
26- userinfo * url.Userinfo
27- next Dialer
24+ address string
25+ tlsConfig * tls.Config
26+ tlsFactory func (net.Conn , * tls.Config ) net.Conn
27+ userinfo * url.Userinfo
28+ next Dialer
2829}
2930
3031func NewHTTPProxyDialer (address string , tlsConfig * tls.Config , userinfo * url.Userinfo , next LegacyDialer ) * HTTPProxyDialer {
@@ -40,8 +41,11 @@ func HTTPProxyDialerFromURL(u *url.URL, next xproxy.Dialer) (xproxy.Dialer, erro
4041 host := u .Hostname ()
4142 port := u .Port ()
4243
43- var tlsConfig * tls.Config
44- var err error
44+ var (
45+ tlsConfig * tls.Config
46+ tlsFactory func (net.Conn , * tls.Config ) net.Conn
47+ err error
48+ )
4549 switch strings .ToLower (u .Scheme ) {
4650 case "http" :
4751 if port == "" {
@@ -55,13 +59,23 @@ func HTTPProxyDialerFromURL(u *url.URL, next xproxy.Dialer) (xproxy.Dialer, erro
5559 if err != nil {
5660 return nil , fmt .Errorf ("TLS configuration failed: %w" , err )
5761 }
62+ tlsFactory , err = tlsutil .TLSFactoryFromURL (u )
63+ if err != nil {
64+ return nil , fmt .Errorf ("TLS configuration failed: %w" , err )
65+ }
5866 default :
5967 return nil , errors .New ("unsupported proxy type" )
6068 }
6169
6270 address := net .JoinHostPort (host , port )
6371
64- return NewHTTPProxyDialer (address , tlsConfig , u .User , next ), nil
72+ return & HTTPProxyDialer {
73+ address : address ,
74+ tlsConfig : tlsConfig ,
75+ tlsFactory : tlsFactory ,
76+ next : MaybeWrapWithContextDialer (next ),
77+ userinfo : u .User ,
78+ }, nil
6579}
6680
6781func (d * HTTPProxyDialer ) Dial (network , address string ) (net.Conn , error ) {
@@ -79,7 +93,7 @@ func (d *HTTPProxyDialer) DialContext(ctx context.Context, network, address stri
7993 return nil , fmt .Errorf ("proxy dialer is unable to make connection: %w" , err )
8094 }
8195 if d .tlsConfig != nil {
82- conn = tls . Client (conn , d .tlsConfig )
96+ conn = d . tlsFactory (conn , d .tlsConfig )
8397 }
8498
8599 stopGuardEvent := make (chan struct {})
0 commit comments