From: Matt Joiner <anacrolix@gmail.com>
Date: Sat, 17 Dec 2022 23:56:25 +0000 (+1100)
Subject: Make trackerServer package
X-Git-Tag: v1.49.0~7^2~10
X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=b06b6148456763ba92e33a29f7d4cbbe26035ebe;p=btrtrc.git

Make trackerServer package
---

diff --git a/tracker/http/server/server.go b/tracker/http/server/server.go
index 781c640b..bd2783e3 100644
--- a/tracker/http/server/server.go
+++ b/tracker/http/server/server.go
@@ -11,6 +11,7 @@ import (
 	"github.com/anacrolix/dht/v2/krpc"
 	"github.com/anacrolix/generics"
 	"github.com/anacrolix/log"
+	trackerServer "github.com/anacrolix/torrent/tracker/server"
 
 	"github.com/anacrolix/torrent/bencode"
 	"github.com/anacrolix/torrent/tracker"
@@ -18,7 +19,7 @@ import (
 )
 
 type Handler struct {
-	Announce *tracker.AnnounceHandler
+	Announce *trackerServer.AnnounceHandler
 	// Called to derive an announcer's IP if non-nil. If not specified, the Request.RemoteAddr is
 	// used. Necessary for instances running behind reverse proxies for example.
 	RequestHost func(r *http.Request) (netip.Addr, error)
@@ -74,13 +75,20 @@ func (me Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 	}
 	portU64, err := strconv.ParseUint(vs.Get("port"), 0, 16)
 	addrPort := netip.AddrPortFrom(addr, uint16(portU64))
-	res := me.Announce.Serve(r.Context(), tracker.AnnounceRequest{
-		InfoHash: infoHash,
-		PeerId:   peerId,
-		Event:    event,
-		Port:     addrPort.Port(),
-		NumWant:  -1,
-	}, addrPort, tracker.GetPeersOpts{MaxCount: generics.Some[uint](200)})
+	res := me.Announce.Serve(
+		r.Context(),
+		tracker.AnnounceRequest{
+			InfoHash: infoHash,
+			PeerId:   peerId,
+			Event:    event,
+			Port:     addrPort.Port(),
+			NumWant:  -1,
+		},
+		addrPort,
+		trackerServer.GetPeersOpts{
+			MaxCount: generics.Some[uint](200),
+		},
+	)
 	err = res.Err
 	if err != nil {
 		log.Printf("error serving announce: %v", err)
diff --git a/tracker/server.go b/tracker/server/server.go
similarity index 95%
rename from tracker/server.go
rename to tracker/server/server.go
index 22f54da5..ced31616 100644
--- a/tracker/server.go
+++ b/tracker/server/server.go
@@ -1,4 +1,4 @@
-package tracker
+package trackerServer
 
 import (
 	"context"
@@ -10,6 +10,7 @@ import (
 
 	"github.com/anacrolix/generics"
 	"github.com/anacrolix/log"
+	"github.com/anacrolix/torrent/tracker"
 	"go.opentelemetry.io/otel"
 	"go.opentelemetry.io/otel/attribute"
 	"go.opentelemetry.io/otel/codes"
@@ -36,7 +37,12 @@ type AnnounceAddr = netip.AddrPort
 type AnnounceTracker interface {
 	TrackAnnounce(ctx context.Context, req udp.AnnounceRequest, addr AnnounceAddr) error
 	Scrape(ctx context.Context, infoHashes []InfoHash) ([]udp.ScrapeInfohashResult, error)
-	GetPeers(ctx context.Context, infoHash InfoHash, opts GetPeersOpts) ServerAnnounceResult
+	GetPeers(
+		ctx context.Context,
+		infoHash InfoHash,
+		opts GetPeersOpts,
+		remote AnnounceAddr,
+	) ServerAnnounceResult
 }
 
 type ServerAnnounceResult struct {
@@ -150,7 +156,7 @@ func (me *AnnounceHandler) Serve(
 			opts.MaxCount = generics.Some(newCount)
 		}
 	}
-	ret = me.AnnounceTracker.GetPeers(ctx, infoHash, opts)
+	ret = me.AnnounceTracker.GetPeers(ctx, infoHash, opts, addr)
 	if ret.Err != nil {
 		return
 	}
@@ -198,7 +204,7 @@ func (me *AnnounceHandler) augmentPeersFromUpstream(infoHash [20]byte) augmentat
 	subReq := AnnounceRequest{
 		InfoHash: infoHash,
 		PeerId:   me.UpstreamAnnouncePeerId,
-		Event:    None,
+		Event:    tracker.None,
 		Key:      0,
 		NumWant:  -1,
 		Port:     0,
@@ -219,7 +225,7 @@ func (me *AnnounceHandler) augmentPeersFromUpstream(infoHash [20]byte) augmentat
 				return
 			}
 			log.Printf("announcing %x upstream to %v", infoHash, url)
-			resp, err := client.Announce(announceCtx, subReq, AnnounceOpt{
+			resp, err := client.Announce(announceCtx, subReq, tracker.AnnounceOpt{
 				UserAgent: "aragorn",
 			})
 			interval := resp.Interval
@@ -253,7 +259,7 @@ func (me *AnnounceHandler) augmentPeersFromUpstream(infoHash [20]byte) augmentat
 			}
 			trackReq := AnnounceRequest{
 				InfoHash: infoHash,
-				Event:    Started,
+				Event:    tracker.Started,
 				Port:     uint16(peer.Port),
 			}
 			copy(trackReq.PeerId[:], peer.ID)
diff --git a/tracker/upstream-announcing.go b/tracker/server/upstream-announcing.go
similarity index 61%
rename from tracker/upstream-announcing.go
rename to tracker/server/upstream-announcing.go
index ab5a5fb3..cfbf61c8 100644
--- a/tracker/upstream-announcing.go
+++ b/tracker/server/upstream-announcing.go
@@ -1,4 +1,4 @@
-package tracker
+package trackerServer
 
 import (
 	"context"
@@ -7,12 +7,12 @@ import (
 
 type UpstreamAnnounceGater interface {
 	Start(ctx context.Context, tracker string, infoHash InfoHash,
-	// How long the announce block remains before discarding it.
+		// How long the announce block remains before discarding it.
 		timeout time.Duration,
 	) (bool, error)
 	Completed(
 		ctx context.Context, tracker string, infoHash InfoHash,
-	// Num of seconds reported by tracker, or some suitable value the caller has chosen.
+		// Num of seconds reported by tracker, or some suitable value the caller has chosen.
 		interval int32,
 	) error
 }
diff --git a/tracker/server/use.go b/tracker/server/use.go
new file mode 100644
index 00000000..942321c5
--- /dev/null
+++ b/tracker/server/use.go
@@ -0,0 +1,9 @@
+package trackerServer
+
+import "github.com/anacrolix/torrent/tracker"
+
+type (
+	AnnounceRequest = tracker.AnnounceRequest
+	Client          = tracker.Client
+	Peer            = tracker.Peer
+)
diff --git a/tracker/udp/server/server.go b/tracker/udp/server/server.go
index d86012dc..2007233f 100644
--- a/tracker/udp/server/server.go
+++ b/tracker/udp/server/server.go
@@ -13,10 +13,10 @@ import (
 	"github.com/anacrolix/dht/v2/krpc"
 	"github.com/anacrolix/generics"
 	"github.com/anacrolix/log"
+	trackerServer "github.com/anacrolix/torrent/tracker/server"
 	"go.opentelemetry.io/otel"
 	"go.opentelemetry.io/otel/codes"
 
-	"github.com/anacrolix/torrent/tracker"
 	"github.com/anacrolix/torrent/tracker/udp"
 )
 
@@ -29,12 +29,12 @@ type ConnectionTracker interface {
 
 type InfoHash = [20]byte
 
-type AnnounceTracker = tracker.AnnounceTracker
+type AnnounceTracker = trackerServer.AnnounceTracker
 
 type Server struct {
 	ConnTracker  ConnectionTracker
 	SendResponse func(data []byte, addr net.Addr) (int, error)
-	Announce     *tracker.AnnounceHandler
+	Announce     *trackerServer.AnnounceHandler
 }
 
 type RequestSourceAddr = net.Addr
@@ -106,7 +106,7 @@ func (me *Server) handleAnnounce(
 		err = fmt.Errorf("converting source net.Addr to AnnounceAddr: %w", err)
 		return err
 	}
-	opts := tracker.GetPeersOpts{MaxCount: generics.Some[uint](50)}
+	opts := trackerServer.GetPeersOpts{MaxCount: generics.Some[uint](50)}
 	if addrFamily == udp.AddrFamilyIpv4 {
 		opts.MaxCount = generics.Some[uint](150)
 	}