numWebSeedRequests map[webseedHostKeyHandle]int
activeAnnounceLimiter limiter.Instance
- httpClient *http.Client
+ // TODO: Move this onto ClientConfig.
+ httpClient *http.Client
clientHolepunchAddrSets
// Initializes a bare minimum Client. *Client and *ClientConfig must not be nil.
func (cl *Client) init(cfg *ClientConfig) {
cl.config = cfg
+ cfg.setRateLimiterBursts()
g.MakeMap(&cl.dopplegangerAddrs)
g.MakeMap(&cl.torrentsByShortHash)
g.MakeMap(&cl.torrents)
MaxConnsPerHost: 10,
}
}
+ cfg.MetainfoSourcesClient = cmp.Or(cfg.MetainfoSourcesClient, cl.httpClient)
cl.defaultLocalLtepProtocolMap = makeBuiltinLtepProtocols(!cfg.DisablePEX)
g.MakeMap(&cl.numWebSeedRequests)
}
cfg = NewDefaultClientConfig()
cfg.ListenPort = 0
}
- cfg.setRateLimiterBursts()
cl = &Client{}
cl.init(cfg)
go cl.acceptLimitClearer()
DHTOnQuery func(query *krpc.Msg, source net.Addr) (propagate bool)
}
-// Probably not safe to modify this after it's given to a Client.
+// Probably not safe to modify this after it's given to a Client, or to pass it to multiple Clients.
type ClientConfig struct {
ClientTrackerConfig
ClientDhtConfig
Logger log.Logger
Slogger *slog.Logger
+ // Used for torrent metainfo sources only. Falls back to the http.Client created to wrap
+ // WebTransport.
+ MetainfoSourcesClient *http.Client
// Used for torrent sources and webseeding if set.
WebTransport http.RoundTripper
// Defines proxy for HTTP requests, such as for trackers. It's commonly set from the result of
return
}
var mi metainfo.MetaInfo
- mi, err = getTorrentSource(ctx, source, t.cl.httpClient)
+ mi, err = getTorrentSource(ctx, source, t.cl.config.MetainfoSourcesClient)
if ctx.Err() != nil {
return
}