aboutsummaryrefslogtreecommitdiff
path: root/tracker/messages.go
diff options
context:
space:
mode:
Diffstat (limited to 'tracker/messages.go')
-rw-r--r--tracker/messages.go26
1 files changed, 22 insertions, 4 deletions
diff --git a/tracker/messages.go b/tracker/messages.go
index 26d03c4..b32dd8a 100644
--- a/tracker/messages.go
+++ b/tracker/messages.go
@@ -65,9 +65,27 @@ func (p Peer) String() string {
type Peers []Peer
-func (p *Peers) UnmarshalBencode(b []byte) error {
- log.Println(string(b))
- return nil
+func (p *Peers) UnmarshalBencode(b []byte) (int, error) {
+ if b[0] == 'l' {
+ log.Println("verbose")
+ var tmp []Peer
+ n, err := bencode.Unmarshal(b, &tmp)
+ *p = Peers(tmp)
+ return n, err
+ }
+ log.Println("compact")
+ var tmp []byte
+ n, err := bencode.Unmarshal(b, &tmp)
+ addr, err := peerAddr(tmp)
+ *p = make(Peers, len(addr))
+ for i, v := range addr {
+ peer := Peer{
+ IP: v.IP.String(),
+ Port: int(v.Port),
+ }
+ (*p)[i] = peer
+ }
+ return n, err
}
func (r Request) Get(announce string) (Response, error) {
@@ -90,7 +108,7 @@ func (r Request) Get(announce string) (Response, error) {
}
var res Response
- err = bencode.Unmarshal(body, &res)
+ _, err = bencode.Unmarshal(body, &res)
if err != nil {
return fail(err)
}