From: Matt Joiner 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) }