From 38b69499e668d53211d92ef3bcad9e75fbc6fb71 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sat, 16 Jul 2016 08:53:21 +0200 Subject: ParseAddr --- tracker/messages.go | 25 ++++++++++++++----------- tracker/messages_test.go | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 11 deletions(-) create mode 100644 tracker/messages_test.go diff --git a/tracker/messages.go b/tracker/messages.go index 1b625bb..f6b70c7 100644 --- a/tracker/messages.go +++ b/tracker/messages.go @@ -3,7 +3,6 @@ package tracker import ( "bytes" "encoding/binary" - "errors" "fmt" "io/ioutil" "log" @@ -81,15 +80,19 @@ func (r Request) Get(announce string) (Response, error) { return res, nil } -func ParseAddr(b []byte) (string, error) { - if len(b) != 6 { - return "", errors.New("wrong length") - } - buf := bytes.NewReader(b[4:6]) - var port int16 - err := binary.Read(buf, binary.BigEndian, &port) - if err != nil { - return "", err +func ParseAddr(b []byte) ([]string, error) { + n := len(b) / 6 + s := make([]string, n) + + var port uint16 + for i := 0; i < n; i++ { + off := i * 6 + buf := bytes.NewReader(b[off+4 : off+6]) + err := binary.Read(buf, binary.BigEndian, &port) + if err != nil { + return nil, err + } + s[i] = fmt.Sprintf("%s:%d", net.IP(b[off:off+4]), port) } - return fmt.Sprintf("%s:%d", net.IP(b[0:4]), port), nil + return s, nil } diff --git a/tracker/messages_test.go b/tracker/messages_test.go new file mode 100644 index 0000000..3c4e6b5 --- /dev/null +++ b/tracker/messages_test.go @@ -0,0 +1,41 @@ +package tracker + +import "testing" + +var peers = []byte{ + 111, 221, 44, 148, 32, 222, 195, 154, 163, 111, 42, 147, + 86, 61, 71, 149, 164, 29, 5, 2, 148, 93, 238, 216, + 88, 68, 56, 189, 200, 213, 84, 133, 247, 200, 236, 242, + 46, 72, 237, 204, 200, 213, 14, 201, 109, 73, 200, 213, + 84, 75, 131, 175, 5, 220, 70, 169, 35, 173, 26, 225, + 109, 190, 212, 11, 200, 213, 201, 214, 238, 102, 247, 156, + 198, 50, 156, 151, 192, 93, 148, 251, 136, 84, 199, 134, + 165, 90, 207, 126, 27, 88, 5, 9, 98, 177, 200, 213, + 174, 29, 166, 221, 104, 164, 1, 169, 138, 130, 212, + 58, 37, 187, 101, 17, 27, 4, 88, 187, 225, 32, 14, + 172, 78, 238, 2, 244, 48, 57, 12, 20, 162, 244, 27, + 25, 149, 86, 117, 197, 200, 213, 175, 138, 19, 242, 200, + 213, 64, 137, 236, 216, 200, 213, 90, 27, 148, 1, 200, + 213, 95, 16, 113, 171, 200, 213, 176, 158, 132, 40, 193, + 102, 89, 25, 194, 94, 84, 51, 195, 98, 74, 58, 173, + 226, 79, 214, 235, 82, 27, 57, 71, 234, 212, 220, 69, + 92, 158, 69, 244, 40, 200, 31, 97, 99, 44, 32, 26, + 247, 88, 198, 224, 202, 200, 213, 89, 223, 63, 213, + 200, 213, 121, 208, 115, 147, 179, 19, 37, 60, 16, 246, + 227, 231, 185, 21, 217, 76, 205, 97, 212, 20, 34, 118, + 115, 81, 98, 115, 68, 144, 65, 241, 162, 232, 144, 141, + 26, 225, 129, 252, 22, 155, 58, 82, 82, 169, 127, 217, + 200, 213, 46, 53, 182, 240, 241, 115, 181, 214, 35, 52, 228, 160, + 37, 187, 122, 103, 51, 75, 94, 75, 219, 15, 199, 219, + 212, 182, 155, 127, 200, 213, 5, 39, 94, 163, 62, 16, +} + +func TestParsePeers(t *testing.T) { + addrs, err := ParseAddr(peers) + if err != nil { + t.Error(err) + } + for _, v := range addrs { + t.Log(v) + } +} -- cgit v1.2.3