From b499ab36195067ce194065a5400549d05161ddc7 Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Tue, 5 Nov 2013 00:04:14 +1100 Subject: [PATCH] Begin on UDP trackers --- tracker/udp.go | 27 +++++++++++++++++++++++++++ tracker/udp_test.go | 20 ++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 tracker/udp.go create mode 100644 tracker/udp_test.go 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() + } +} -- 2.48.1