From bf5a22f345de2ab8d738b834ddae55cdd77c521c Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Mon, 5 Dec 2022 12:50:40 +1100 Subject: [PATCH] Add announce --event flag --- cmd/torrent/announce.go | 3 +++ tracker/udp/addr-family.go | 1 + tracker/udp/announce.go | 15 ++++++++++++++- tracker/udp/server/server.go | 1 + 4 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 tracker/udp/addr-family.go create mode 100644 tracker/udp/server/server.go diff --git a/cmd/torrent/announce.go b/cmd/torrent/announce.go index b40120f1..94500d96 100644 --- a/cmd/torrent/announce.go +++ b/cmd/torrent/announce.go @@ -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 index 00000000..0213f41f --- /dev/null +++ b/tracker/udp/addr-family.go @@ -0,0 +1 @@ +package udp diff --git a/tracker/udp/announce.go b/tracker/udp/announce.go index 1573c275..59b6c6cf 100644 --- a/tracker/udp/announce.go +++ b/tracker/udp/announce.go @@ -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 index 00000000..abb4e431 --- /dev/null +++ b/tracker/udp/server/server.go @@ -0,0 +1 @@ +package server -- 2.44.0