aboutsummaryrefslogtreecommitdiff
path: root/tracker/messages.go
diff options
context:
space:
mode:
Diffstat (limited to 'tracker/messages.go')
-rw-r--r--tracker/messages.go25
1 files changed, 14 insertions, 11 deletions
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
}