aboutsummaryrefslogtreecommitdiff
path: root/tracker/messages.go
diff options
context:
space:
mode:
Diffstat (limited to 'tracker/messages.go')
-rw-r--r--tracker/messages.go23
1 files changed, 19 insertions, 4 deletions
diff --git a/tracker/messages.go b/tracker/messages.go
index 2062934..26d03c4 100644
--- a/tracker/messages.go
+++ b/tracker/messages.go
@@ -4,7 +4,9 @@ import (
"bytes"
"crypto/sha1"
"encoding/binary"
+ "fmt"
"io/ioutil"
+ "log"
"net"
"net/http"
"time"
@@ -45,16 +47,27 @@ type Response struct {
Incomplete int `bencode:"incomplete"`
Interval time.Duration `bencode:"interval"`
MinInterval time.Duration `bencode:"min interval"`
- Peers []byte `bencode:"peers"` // can be []byte or []Peer
+ Peers Peers `bencode:"peers"` // can be []byte or []Peer
Peers6 []byte `bencode:"peers6"`
TrackerID string `bencode:"tracker id"`
WarningMessage string `bencode:"warning message"`
}
type Peer struct {
- IP net.IPAddr `bencode:"ip"`
- ID []byte `bencode:"peer id"`
- Port uint16 `bencode:"port"`
+ IP string `bencode:"ip"`
+ ID []byte `bencode:"peer id"`
+ Port int `bencode:"port"`
+}
+
+func (p Peer) String() string {
+ return fmt.Sprintf("%v %s %v", p.IP, p.ID, p.Port)
+}
+
+type Peers []Peer
+
+func (p *Peers) UnmarshalBencode(b []byte) error {
+ log.Println(string(b))
+ return nil
}
func (r Request) Get(announce string) (Response, error) {
@@ -88,9 +101,11 @@ func (r Response) IntervalDuration() time.Duration {
return time.Duration(r.Interval) * time.Second
}
+/*
func (r Response) PeerAddr() ([]*net.TCPAddr, error) {
return peerAddr(r.Peers)
}
+*/
func peerAddr(b []byte) ([]*net.TCPAddr, error) {
n := len(b) / 6