// Defines proxy for HTTP requests, such as for trackers. It's commonly set from the result of
// "net/http".ProxyURL(HTTPProxy).
HTTPProxy func(*http.Request) (*url.URL, error)
+ // Takes a tracker's hostname and requests DNS A and AAAA records.
+ // Used in case DNS lookups require a special setup (i.e., dns-over-https)
+ TrackerIpFetcher func(*url.URL) ([]net.IP, error)
// HTTPUserAgent changes default UserAgent for HTTP requests
HTTPUserAgent string
// Updated occasionally to when there's been some changes to client
}
}
newAnnouncer := &trackerScraper{
- u: *u,
- t: t,
+ u: *u,
+ t: t,
+ ipFetcher: t.cl.config.TrackerIpFetcher,
}
go newAnnouncer.Run()
return newAnnouncer
u url.URL
t *Torrent
lastAnnounce trackerAnnounceResult
+ ipFetcher func(*url.URL) ([]net.IP, error)
}
type torrentTrackerAnnouncer interface {
}
func (me *trackerScraper) getIp() (ip net.IP, err error) {
- ips, err := net.LookupIP(me.u.Hostname())
+ var ips []net.IP
+ if me.ipFetcher != nil {
+ ips, err = me.ipFetcher(&me.u)
+ } else {
+ // Do a regular dns lookup
+ ips, err = net.LookupIP(me.u.Hostname())
+ }
if err != nil {
return
}