aboutsummaryrefslogtreecommitdiff
path: root/tracker/peer.go
diff options
context:
space:
mode:
Diffstat (limited to 'tracker/peer.go')
-rw-r--r--tracker/peer.go41
1 files changed, 41 insertions, 0 deletions
diff --git a/tracker/peer.go b/tracker/peer.go
new file mode 100644
index 0000000..11fd748
--- /dev/null
+++ b/tracker/peer.go
@@ -0,0 +1,41 @@
+package tracker
+
+import (
+ "fmt"
+
+ "dim13.org/btget/bencode"
+)
+
+type Peer struct {
+ 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) (int, error) {
+ switch b[0] {
+ case 'l':
+ var tmp []Peer
+ n, err := bencode.Unmarshal(b, &tmp)
+ *p = Peers(tmp)
+ return n, err
+ default:
+ var tmp []byte
+ n, err := bencode.Unmarshal(b, &tmp)
+ addr, err := peerAddr(tmp)
+ *p = make(Peers, len(addr))
+ for i, v := range addr {
+ (*p)[i] = Peer{
+ IP: v.IP.String(),
+ Port: int(v.Port),
+ }
+ }
+ return n, err
+ }
+}