]> Sergey Matveev's repositories - btrtrc.git/blobdiff - tracker/udp/server/server.go
Support upstream trackers
[btrtrc.git] / tracker / udp / server / server.go
index 68abb1061aca1b8b9a6e882bf74057b8dd8ac723..95e7a5e7a44d5bc8fe03e8838757578d251a1d45 100644 (file)
@@ -29,9 +29,9 @@ type InfoHash = [20]byte
 type AnnounceTracker = tracker.AnnounceTracker
 
 type Server struct {
-       ConnTracker     ConnectionTracker
-       SendResponse    func(data []byte, addr net.Addr) (int, error)
-       AnnounceTracker AnnounceTracker
+       ConnTracker  ConnectionTracker
+       SendResponse func(data []byte, addr net.Addr) (int, error)
+       Announce     tracker.AnnounceHandler
 }
 
 type RequestSourceAddr = net.Addr
@@ -72,6 +72,9 @@ func (me *Server) handleAnnounce(
        tid udp.TransactionId,
        r *bytes.Reader,
 ) error {
+       // Should we set a timeout of 10s or something for the entire response, so that we give up if a
+       // retry is imminent?
+
        ok, err := me.ConnTracker.Check(ctx, source.String(), connId)
        if err != nil {
                err = fmt.Errorf("checking conn id: %w", err)
@@ -91,11 +94,7 @@ func (me *Server) handleAnnounce(
                err = fmt.Errorf("converting source net.Addr to AnnounceAddr: %w", err)
                return err
        }
-       err = me.AnnounceTracker.TrackAnnounce(ctx, req, announceAddr)
-       if err != nil {
-               return err
-       }
-       peers, err := me.AnnounceTracker.GetPeers(ctx, req.InfoHash, tracker.GetPeersOpts{})
+       peers, err := me.Announce.Serve(ctx, req, announceAddr)
        if err != nil {
                return err
        }