]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Add announce --event flag
authorMatt Joiner <anacrolix@gmail.com>
Mon, 5 Dec 2022 01:50:40 +0000 (12:50 +1100)
committerMatt Joiner <anacrolix@gmail.com>
Mon, 5 Dec 2022 01:50:55 +0000 (12:50 +1100)
cmd/torrent/announce.go
tracker/udp/addr-family.go [new file with mode: 0644]
tracker/udp/announce.go
tracker/udp/server/server.go [new file with mode: 0644]

index b40120f112dddc1e9ecb6453e44b6df445b4bb52..94500d96a3418a65cda35a1f397239deafcac1fd 100644 (file)
@@ -7,9 +7,11 @@ import (
 
        "github.com/anacrolix/torrent"
        "github.com/anacrolix/torrent/tracker"
+       "github.com/anacrolix/torrent/tracker/udp"
 )
 
 type AnnounceCmd struct {
+       Event    udp.AnnounceEvent
        Tracker  string           `arg:"positional"`
        InfoHash torrent.InfoHash `arg:"positional"`
 }
@@ -21,6 +23,7 @@ func announceErr(flags AnnounceCmd) error {
                        InfoHash: flags.InfoHash,
                        Port:     uint16(torrent.NewDefaultClientConfig().ListenPort),
                        NumWant:  -1,
+                       Event:    flags.Event,
                },
        }.Do()
        if err != nil {
diff --git a/tracker/udp/addr-family.go b/tracker/udp/addr-family.go
new file mode 100644 (file)
index 0000000..0213f41
--- /dev/null
@@ -0,0 +1 @@
+package udp
index 1573c27583592871fe5be066a5568f3448f9266e..59b6c6cfa728e8b7c694de89074d24b200da0341 100644 (file)
@@ -2,6 +2,7 @@ package udp
 
 import (
        "encoding"
+       "fmt"
 
        "github.com/anacrolix/dht/v2/krpc"
 )
@@ -24,9 +25,21 @@ type AnnounceRequest struct {
 
 type AnnounceEvent int32
 
+func (me *AnnounceEvent) UnmarshalText(text []byte) error {
+       for key, str := range announceEventStrings {
+               if string(text) == str {
+                       *me = AnnounceEvent(key)
+                       return nil
+               }
+       }
+       return fmt.Errorf("unknown event")
+}
+
+var announceEventStrings = []string{"", "completed", "started", "stopped"}
+
 func (e AnnounceEvent) String() string {
        // See BEP 3, "event", and https://github.com/anacrolix/torrent/issues/416#issuecomment-751427001.
-       return []string{"", "completed", "started", "stopped"}[e]
+       return announceEventStrings[e]
 }
 
 type AnnounceResponsePeers interface {
diff --git a/tracker/udp/server/server.go b/tracker/udp/server/server.go
new file mode 100644 (file)
index 0000000..abb4e43
--- /dev/null
@@ -0,0 +1 @@
+package server