"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"
)
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)
}
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)
-package tracker
+package trackerServer
import (
"context"
"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"
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 {
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
}
subReq := AnnounceRequest{
InfoHash: infoHash,
PeerId: me.UpstreamAnnouncePeerId,
- Event: None,
+ Event: tracker.None,
Key: 0,
NumWant: -1,
Port: 0,
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
}
trackReq := AnnounceRequest{
InfoHash: infoHash,
- Event: Started,
+ Event: tracker.Started,
Port: uint16(peer.Port),
}
copy(trackReq.PeerId[:], peer.ID)
-package tracker
+package trackerServer
import (
"context"
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
}
--- /dev/null
+package trackerServer
+
+import "github.com/anacrolix/torrent/tracker"
+
+type (
+ AnnounceRequest = tracker.AnnounceRequest
+ Client = tracker.Client
+ Peer = tracker.Peer
+)
"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"
)
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
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)
}