]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Fix TLS handshake failures with https trackers
authorMatt Joiner <anacrolix@gmail.com>
Thu, 18 Oct 2018 00:09:56 +0000 (11:09 +1100)
committerMatt Joiner <anacrolix@gmail.com>
Thu, 18 Oct 2018 00:09:56 +0000 (11:09 +1100)
Fixes #276

cmd/tracker-announce/main.go
config.go
tracker/http.go
tracker/tracker.go
tracker_scraper.go

index f6bede88d02db917c3a47271ad6af2821d472730..e038d872b9ca09b661c9ff2fe1d85042cd9486fa 100644 (file)
@@ -3,7 +3,6 @@ package main
 import (
        "log"
        "math"
-       "net/http"
        "net/url"
        "strings"
        "sync"
@@ -85,7 +84,6 @@ func announces(uri string, ar tracker.AnnounceRequest) (ret []announceResult) {
        a := tracker.Announce{
                Request:    ar,
                TrackerUrl: uri,
-               HttpClient: http.DefaultClient,
        }
        if u.Scheme == "udp" {
                a.UdpNetwork = "udp4"
index 117f640aa7007c6d88bf3f2d29026e995d4bcda6..8e5346f9e38d09798e869e5318b77937032d135e 100644 (file)
--- a/config.go
+++ b/config.go
@@ -1,9 +1,7 @@
 package torrent
 
 import (
-       "crypto/tls"
        "net"
-       "net/http"
        "time"
 
        "github.com/anacrolix/dht"
@@ -79,8 +77,6 @@ type ClientConfig struct {
        // Perform logging and any other behaviour that will help debug.
        Debug bool `help:"enable debugging"`
 
-       // For querying HTTP trackers.
-       TrackerHttpClient *http.Client
        // HTTPUserAgent changes default UserAgent for HTTP requests
        HTTPUserAgent string
        // Updated occasionally to when there's been some changes to client
@@ -129,15 +125,6 @@ func (cfg *ClientConfig) SetListenAddr(addr string) *ClientConfig {
 
 func NewDefaultClientConfig() *ClientConfig {
        return &ClientConfig{
-               TrackerHttpClient: &http.Client{
-                       Timeout: time.Second * 15,
-                       Transport: &http.Transport{
-                               Dial: (&net.Dialer{
-                                       Timeout: 15 * time.Second,
-                               }).Dial,
-                               TLSHandshakeTimeout: 15 * time.Second,
-                               TLSClientConfig:     &tls.Config{InsecureSkipVerify: true},
-                       }},
                HTTPUserAgent:                  DefaultHTTPUserAgent,
                ExtendedHandshakeClientVersion: "go.torrent dev 20150624",
                Bep20:                          "-GT0001-",
index 16182f0ec5125e7d45642e9aca2b843deb45b422..6a99b560ec969fe52f4931c543c4897900045c72 100644 (file)
@@ -2,11 +2,14 @@ package tracker
 
 import (
        "bytes"
+       "crypto/tls"
        "fmt"
        "io"
+       "net"
        "net/http"
        "net/url"
        "strconv"
+       "time"
 
        "github.com/anacrolix/dht/krpc"
        "github.com/anacrolix/missinggo/httptoo"
@@ -96,7 +99,19 @@ func announceHTTP(opt Announce, _url *url.URL) (ret AnnounceResponse, err error)
        req, err := http.NewRequest("GET", _url.String(), nil)
        req.Header.Set("User-Agent", opt.UserAgent)
        req.Host = opt.HostHeader
-       resp, err := opt.HttpClient.Do(req)
+       resp, err := (&http.Client{
+               Timeout: time.Second * 15,
+               Transport: &http.Transport{
+                       Dial: (&net.Dialer{
+                               Timeout: 15 * time.Second,
+                       }).Dial,
+                       TLSHandshakeTimeout: 15 * time.Second,
+                       TLSClientConfig: &tls.Config{
+                               InsecureSkipVerify: true,
+                               ServerName:         opt.ServerName,
+                       },
+               },
+       }).Do(req)
        if err != nil {
                return
        }
index 928ab777ba600f42864e31664b8268b0b4d5ea84..bd41e6adea4f27d11d21b9f109cd98c904b260eb 100644 (file)
@@ -2,7 +2,6 @@ package tracker
 
 import (
        "errors"
-       "net/http"
        "net/url"
 
        "github.com/anacrolix/dht/krpc"
@@ -53,8 +52,8 @@ type Announce struct {
        TrackerUrl string
        Request    AnnounceRequest
        HostHeader string
+       ServerName string
        UserAgent  string
-       HttpClient *http.Client
        UdpNetwork string
        // If the port is zero, it's assumed to be the same as the Request.Port
        ClientIp4 krpc.NodeAddr
index eefa92e8d83289f68d87258f414d4691319bdede..a91870225a2d35092d61b75fd0132312dba59c8c 100644 (file)
@@ -111,11 +111,11 @@ func (me *trackerScraper) announce() (ret trackerAnnounceResult) {
        req := me.t.announceRequest()
        me.t.cl.unlock()
        res, err := tracker.Announce{
-               HttpClient: me.t.cl.config.TrackerHttpClient,
                UserAgent:  me.t.cl.config.HTTPUserAgent,
                TrackerUrl: me.trackerUrl(ip),
                Request:    req,
                HostHeader: me.u.Host,
+               ServerName: me.u.Hostname(),
                UdpNetwork: me.u.Scheme,
                ClientIp4:  krpc.NodeAddr{IP: me.t.cl.config.PublicIp4},
                ClientIp6:  krpc.NodeAddr{IP: me.t.cl.config.PublicIp6},