]> Sergey Matveev's repositories - btrtrc.git/commitdiff
[trackerscraper] Add custom DNS lookup function
authorafjoseph <7126721+afjoseph@users.noreply.github.com>
Thu, 28 Oct 2021 08:13:21 +0000 (10:13 +0200)
committerMatt Joiner <anacrolix@gmail.com>
Mon, 1 Nov 2021 00:26:58 +0000 (11:26 +1100)
config.go
torrent.go
tracker_scraper.go

index 3d370d55fca2f38c182f34f94b0b15e2607c124c..50c46afa06f43da62124152224cc6c5f17692753 100644 (file)
--- a/config.go
+++ b/config.go
@@ -90,6 +90,9 @@ type ClientConfig struct {
        // 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
index 5f18df1f3e9bacfd9dc9707fdbb6a4fc66f16bb5..8fa4c7deee61052f35cbff494c681d5318cdd637 100644 (file)
@@ -1577,8 +1577,9 @@ func (t *Torrent) startScrapingTracker(_url string) {
                        }
                }
                newAnnouncer := &trackerScraper{
-                       u: *u,
-                       t: t,
+                       u:         *u,
+                       t:         t,
+                       ipFetcher: t.cl.config.TrackerIpFetcher,
                }
                go newAnnouncer.Run()
                return newAnnouncer
index c339c2b4415f1e865a8337b0600756120c8293d5..f9d37d86586eb5425601208b50aa39dcf851fd89 100644 (file)
@@ -21,6 +21,7 @@ type trackerScraper struct {
        u            url.URL
        t            *Torrent
        lastAnnounce trackerAnnounceResult
+       ipFetcher    func(*url.URL) ([]net.IP, error)
 }
 
 type torrentTrackerAnnouncer interface {
@@ -66,7 +67,13 @@ type trackerAnnounceResult struct {
 }
 
 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
        }