From: Matt Joiner Date: Mon, 4 Nov 2013 13:04:14 +0000 (+1100) Subject: Begin on UDP trackers X-Git-Tag: v1.0.0~1788 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=b499ab36195067ce194065a5400549d05161ddc7;p=btrtrc.git Begin on UDP trackers --- diff --git a/tracker/udp.go b/tracker/udp.go new file mode 100644 index 00000000..55e9ad37 --- /dev/null +++ b/tracker/udp.go @@ -0,0 +1,27 @@ +package tracker + +type UDPConnectionRequest struct { + ConnectionId int64 + Action int32 + TransctionId int32 +} + +type UDPAnnounceResponseHeader struct { + Action int32 + TransactionId int32 + Interval int32 + Leechers int32 + Seeders int32 +} + +type UDPAnnounceResponse struct { + UDPAnnounceResponseHeader + PeerAddrSlice +} + +type PeerAddr struct { + IP int32 + Port int16 +} + +type PeerAddrSlice []PeerAddr diff --git a/tracker/udp_test.go b/tracker/udp_test.go new file mode 100644 index 00000000..cf4c0e01 --- /dev/null +++ b/tracker/udp_test.go @@ -0,0 +1,20 @@ +package tracker + +import ( + "bytes" + "encoding/binary" + "testing" +) + +func TestMarshalUDPAnnounceResponse(t *testing.T) { + w := bytes.NewBuffer(nil) + if err := binary.Write(w, binary.BigEndian, &PeerAddrSlice{{1, 2}, {3, 4}}); err != nil { + t.Fatalf("error writing udp announce response addrs: %s", err) + } + if w.String() != "\x00\x00\x00\x01\x00\x02\x00\x00\x00\x03\x00\x04" { + t.FailNow() + } + if binary.Size(UDPAnnounceResponseHeader{}) != 20 { + t.FailNow() + } +}