mirror of https://github.com/gorilla/websocket.git
Add optional method ProxyTLSConnection (closes #779)
Removed the call to NetDialTLSContext from the HTTP proxy CONNECT step and replaced it with a regular net.Dial in order to prevent connection issues. Custom TLS connections can now be made via the new optional ProxyTLSConnection method, after the proxy connection has been successfully established.
This commit is contained in:
parent
78cf1bc733
commit
502bd65db8
13
client.go
13
client.go
|
@ -65,6 +65,12 @@ type Dialer struct {
|
|||
// TLSClientConfig is ignored.
|
||||
NetDialTLSContext func(ctx context.Context, network, addr string) (net.Conn, error)
|
||||
|
||||
// ProxyTLSConnection specifies the dial function for creating TLS connections through a Proxy. If
|
||||
// ProxyTLSConnection is nil, NetDialTLSContext is used.
|
||||
// If ProxyTLSConnection is set, Dial assumes the TLS handshake is done there and
|
||||
// TLSClientConfig is ignored.
|
||||
ProxyTLSConnection func(ctx context.Context, proxyConn net.Conn) (net.Conn, error)
|
||||
|
||||
// Proxy specifies a function to return a proxy for a given
|
||||
// Request. If the function returns a non-nil error, the
|
||||
// request is aborted with the provided error.
|
||||
|
@ -333,7 +339,11 @@ func (d *Dialer) DialContext(ctx context.Context, urlStr string, requestHeader h
|
|||
}
|
||||
}()
|
||||
|
||||
if u.Scheme == "https" && d.NetDialTLSContext == nil {
|
||||
if u.Scheme == "https" {
|
||||
if d.ProxyTLSConnection != nil && d.Proxy != nil {
|
||||
// If we are connected to a proxy, perform the TLS handshake through the existing tunnel
|
||||
netConn, err = d.ProxyTLSConnection(ctx, netConn)
|
||||
} else if d.NetDialTLSContext == nil {
|
||||
// If NetDialTLSContext is set, assume that the TLS handshake has already been done
|
||||
|
||||
cfg := cloneTLSConfig(d.TLSClientConfig)
|
||||
|
@ -355,6 +365,7 @@ func (d *Dialer) DialContext(ctx context.Context, urlStr string, requestHeader h
|
|||
return nil, nil, err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
conn := newConn(netConn, false, d.ReadBufferSize, d.WriteBufferSize, d.WriteBufferPool, nil, nil)
|
||||
|
||||
|
|
2
proxy.go
2
proxy.go
|
@ -33,7 +33,7 @@ type httpProxyDialer struct {
|
|||
|
||||
func (hpd *httpProxyDialer) Dial(network string, addr string) (net.Conn, error) {
|
||||
hostPort, _ := hostPortNoPort(hpd.proxyURL)
|
||||
conn, err := hpd.forwardDial(network, hostPort)
|
||||
conn, err := net.Dial(network, hostPort)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue