client.go | 3 ++- wstracker.go | 5 ++++- diff --git a/client.go b/client.go index a77aea84b6fe87702a0d1863592d2b19ed0899fa..d0151fda5b9eb743cf07cf3ee68d980d9a18be86 100644 --- a/client.go +++ b/client.go @@ -298,7 +298,8 @@ return tracker.AnnounceRequest{}, errors.New("torrent not tracked by client") } return t.announceRequest(event), nil }, - Proxy: cl.config.HTTPProxy, + Proxy: cl.config.HTTPProxy, + DialContext: cl.config.TrackerDialContext, OnConn: func(dc datachannel.ReadWriteCloser, dcc webtorrent.DataChannelContext) { cl.lock() defer cl.unlock() diff --git a/wstracker.go b/wstracker.go index e8bde8c348c8a7ba36106ed1ae11e8f1f77d9702..4ed5a5999f565c974b8a0bea32f3a2abb67a1ee5 100644 --- a/wstracker.go +++ b/wstracker.go @@ -1,7 +1,9 @@ package torrent import ( + "context" "fmt" + "net" "net/url" "sync" @@ -40,6 +42,7 @@ OnConn func(datachannel.ReadWriteCloser, webtorrent.DataChannelContext) mu sync.Mutex clients map[string]*refCountedWebtorrentTrackerClient Proxy http.ProxyFunc + DialContext func(ctx context.Context, network, addr string) (net.Conn, error) } func (me *websocketTrackers) Get(url string, infoHash [20]byte) (*webtorrent.TrackerClient, func()) { @@ -47,7 +50,7 @@ me.mu.Lock() defer me.mu.Unlock() value, ok := me.clients[url] if !ok { - dialer := &websocket.Dialer{Proxy: me.Proxy, HandshakeTimeout: websocket.DefaultDialer.HandshakeTimeout} + dialer := &websocket.Dialer{Proxy: me.Proxy, NetDialContext: me.DialContext, HandshakeTimeout: websocket.DefaultDialer.HandshakeTimeout} value = &refCountedWebtorrentTrackerClient{ TrackerClient: webtorrent.TrackerClient{ Dialer: dialer,