Skip to content

Commit 16334d2

Browse files
authored
Adds support for Proxy function specified by the user (#104)
* Adds support for Proxy function specified by the user * Fixes issue reported by golangci-lint
1 parent 318cdc6 commit 16334d2

File tree

2 files changed

+17
-12
lines changed

2 files changed

+17
-12
lines changed

core/transport/websocket_transport.go

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"io"
77
"net"
88
"net/http"
9+
"net/url"
910
"sync"
1011
"time"
1112

@@ -177,16 +178,11 @@ func NewWebsocketServerTransportWithAddr(addr string, path string, upgrader *web
177178
}
178179

179180
// NewWebsocketClientTransport creates a new client-side transport.
180-
func NewWebsocketClientTransport(ctx context.Context, url string, config *tls.Config, header http.Header) (*Transport, error) {
181-
var dial *websocket.Dialer
182-
if config == nil {
183-
dial = websocket.DefaultDialer
184-
} else {
185-
dial = &websocket.Dialer{
186-
Proxy: http.ProxyFromEnvironment,
187-
HandshakeTimeout: 45 * time.Second,
188-
TLSClientConfig: config,
189-
}
181+
func NewWebsocketClientTransport(ctx context.Context, url string, config *tls.Config, header http.Header, proxy func(*http.Request) (*url.URL, error)) (*Transport, error) {
182+
dial := &websocket.Dialer{
183+
Proxy: proxy,
184+
HandshakeTimeout: 45 * time.Second,
185+
TLSClientConfig: config,
190186
}
191187
conn, _, err := dial.DialContext(ctx, url, header)
192188
if err != nil {

transporter_builder.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"crypto/tls"
66
"fmt"
77
"net/http"
8+
"net/url"
89
"os"
910

1011
"github.com/gorilla/websocket"
@@ -35,6 +36,7 @@ type WebsocketClientBuilder struct {
3536
url string
3637
tlsCfg *tls.Config
3738
header http.Header
39+
proxy func(*http.Request) (*url.URL, error)
3840
}
3941

4042
// WebsocketServerBuilder provides builder which can be used to create a server-side Websocket transport easily.
@@ -173,10 +175,16 @@ func (wc *WebsocketClientBuilder) SetHeader(header http.Header) *WebsocketClient
173175
return wc
174176
}
175177

178+
// SetProxy sets proxy.
179+
func (wc *WebsocketClientBuilder) SetProxy(proxy func(*http.Request) (*url.URL, error)) *WebsocketClientBuilder {
180+
wc.proxy = proxy
181+
return wc
182+
}
183+
176184
// Build builds and returns a new websocket ClientTransporter
177185
func (wc *WebsocketClientBuilder) Build() transport.ClientTransporter {
178186
return func(ctx context.Context) (*transport.Transport, error) {
179-
return transport.NewWebsocketClientTransport(ctx, wc.url, wc.tlsCfg, wc.header)
187+
return transport.NewWebsocketClientTransport(ctx, wc.url, wc.tlsCfg, wc.header, wc.proxy)
180188
}
181189
}
182190

@@ -276,7 +284,8 @@ func TCPServer() *TCPServerBuilder {
276284
// WebsocketClient creates a new WebsocketClientBuilder.
277285
func WebsocketClient() *WebsocketClientBuilder {
278286
return &WebsocketClientBuilder{
279-
url: fmt.Sprintf("ws://127.0.0.1:%d", DefaultPort),
287+
url: fmt.Sprintf("ws://127.0.0.1:%d", DefaultPort),
288+
proxy: http.ProxyFromEnvironment,
280289
}
281290
}
282291

0 commit comments

Comments
 (0)