]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Group Client DHT and tracker config
authorMatt Joiner <anacrolix@gmail.com>
Tue, 6 Dec 2022 23:42:29 +0000 (10:42 +1100)
committerMatt Joiner <anacrolix@gmail.com>
Tue, 6 Dec 2022 23:44:38 +0000 (10:44 +1100)
config.go

index 7e4fa37cbe5c04bb26e7896efbc51afd84b298a7..09f9bc1eb07ad099e9f4a63eb608421e4b42c8c0 100644 (file)
--- a/config.go
+++ b/config.go
@@ -19,8 +19,36 @@ import (
        "github.com/anacrolix/torrent/version"
 )
 
+// Contains config elements that are exclusive to tracker handling. There may be other fields in
+// ClientConfig that are also relevant.
+type ClientTrackerConfig struct {
+       // Don't announce to trackers. This only leaves DHT to discover peers.
+       DisableTrackers bool `long:"disable-trackers"`
+       // Defines DialContext func to use for HTTP tracker announcements
+       TrackerDialContext func(ctx context.Context, network, addr string) (net.Conn, error)
+       // Defines ListenPacket func to use for UDP tracker announcements
+       TrackerListenPacket func(network, addr string) (net.PacketConn, 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)
+       LookupTrackerIp func(*url.URL) ([]net.IP, error)
+}
+
+type ClientDhtConfig struct {
+       // Don't create a DHT.
+       NoDHT            bool `long:"disable-dht"`
+       DhtStartingNodes func(network string) dht.StartingNodesGetter
+       // Called for each anacrolix/dht Server created for the Client.
+       ConfigureAnacrolixDhtServer       func(*dht.ServerConfig)
+       PeriodicallyAnnounceTorrentsToDht bool
+       // OnQuery hook func
+       DHTOnQuery func(query *krpc.Msg, source net.Addr) (propagate bool)
+}
+
 // Probably not safe to modify this after it's given to a Client.
 type ClientConfig struct {
+       ClientTrackerConfig
+       ClientDhtConfig
+
        // Store torrent file data in this directory unless .DefaultStorage is
        // specified.
        DataDir string `long:"data-dir" description:"directory to store downloaded torrent data"`
@@ -30,16 +58,7 @@ type ClientConfig struct {
        ListenPort              int
        NoDefaultPortForwarding bool
        UpnpID                  string
-       // Don't announce to trackers. This only leaves DHT to discover peers.
-       DisableTrackers bool `long:"disable-trackers"`
-       DisablePEX      bool `long:"disable-pex"`
-
-       // Don't create a DHT.
-       NoDHT            bool `long:"disable-dht"`
-       DhtStartingNodes func(network string) dht.StartingNodesGetter
-       // Called for each anacrolix/dht Server created for the Client.
-       ConfigureAnacrolixDhtServer       func(*dht.ServerConfig)
-       PeriodicallyAnnounceTorrentsToDht bool
+       DisablePEX              bool `long:"disable-pex"`
 
        // Never send chunks to peers.
        NoUpload bool `long:"no-upload"`
@@ -93,13 +112,6 @@ type ClientConfig struct {
        HTTPProxy func(*http.Request) (*url.URL, error)
        // Defines DialContext func to use for HTTP requests, such as for fetching metainfo and webtorrent seeds
        HTTPDialContext func(ctx context.Context, network, addr string) (net.Conn, error)
-       // Defines DialContext func to use for HTTP tracker announcements
-       TrackerDialContext func(ctx context.Context, network, addr string) (net.Conn, error)
-       // Defines ListenPacket func to use for UDP tracker announcements
-       TrackerListenPacket func(network, addr string) (net.PacketConn, 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)
-       LookupTrackerIp func(*url.URL) ([]net.IP, error)
        // HTTPUserAgent changes default UserAgent for HTTP requests
        HTTPUserAgent string
        // HttpRequestDirector modifies the request before it's sent.
@@ -152,12 +164,9 @@ type ClientConfig struct {
        // Whether to accept peer connections at all.
        AcceptPeerConnections bool
        // Whether a Client should want conns without delegating to any attached Torrents. This is
-       // useful when torrents might be added dynmically in callbacks for example.
+       // useful when torrents might be added dynamically in callbacks for example.
        AlwaysWantConns bool
 
-       // OnQuery hook func
-       DHTOnQuery func(query *krpc.Msg, source net.Addr) (propagate bool)
-
        Extensions PeerExtensionBits
        // Bits that peers must have set to proceed past handshakes.
        MinPeerExtensions PeerExtensionBits
@@ -193,15 +202,11 @@ func NewDefaultClientConfig() *ClientConfig {
                TorrentPeersLowWater:           50,
                HandshakesTimeout:              4 * time.Second,
                KeepAliveTimeout:               time.Minute,
-               DhtStartingNodes: func(network string) dht.StartingNodesGetter {
-                       return func() ([]dht.Addr, error) { return dht.GlobalBootstrapAddrs(network) }
-               },
-               PeriodicallyAnnounceTorrentsToDht: true,
-               ListenHost:                        func(string) string { return "" },
-               UploadRateLimiter:                 unlimited,
-               DownloadRateLimiter:               unlimited,
-               DisableAcceptRateLimiting:         true,
-               DropMutuallyCompletePeers:         true,
+               ListenHost:                     func(string) string { return "" },
+               UploadRateLimiter:              unlimited,
+               DownloadRateLimiter:            unlimited,
+               DisableAcceptRateLimiting:      true,
+               DropMutuallyCompletePeers:      true,
                HeaderObfuscationPolicy: HeaderObfuscationPolicy{
                        Preferred:        true,
                        RequirePreferred: false,
@@ -213,6 +218,10 @@ func NewDefaultClientConfig() *ClientConfig {
                AcceptPeerConnections: true,
                MaxUnverifiedBytes:    64 << 20,
        }
+       cc.DhtStartingNodes = func(network string) dht.StartingNodesGetter {
+               return func() ([]dht.Addr, error) { return dht.GlobalBootstrapAddrs(network) }
+       }
+       cc.PeriodicallyAnnounceTorrentsToDht = true
        return cc
 }