cmd/torrent/announce.go | 3 +++ tracker/udp/addr-family.go | 1 + tracker/udp/announce.go | 15 ++++++++++++++- tracker/udp/server/server.go | 1 + diff --git a/cmd/torrent/announce.go b/cmd/torrent/announce.go index b40120f112dddc1e9ecb6453e44b6df445b4bb52..94500d96a3418a65cda35a1f397239deafcac1fd 100644 --- a/cmd/torrent/announce.go +++ b/cmd/torrent/announce.go @@ -7,9 +7,11 @@ "github.com/davecgh/go-spew/spew" "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 @@ Request: tracker.AnnounceRequest{ 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 0000000000000000000000000000000000000000..0213f41f0215799c942685d46b38544290b3680b --- /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 1573c27583592871fe5be066a5568f3448f9266e..59b6c6cfa728e8b7c694de89074d24b200da0341 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 @@ } // 82 bytes 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 0000000000000000000000000000000000000000..abb4e431abd516750a5a1e5e2b77073c236b8f9e --- /dev/null +++ b/tracker/udp/server/server.go @@ -0,0 +1 @@ +package server