client.go | 26 ++++---------------------- util/types.go | 30 ++++++++++++++++++++++++++++++ diff --git a/client.go b/client.go index f7ef9291a31c43816567754feb3288907173a2a7..349914d5923bef26d6fe9d386061b7d08d272536 100644 --- a/client.go +++ b/client.go @@ -16,6 +16,7 @@ */ package torrent import ( + "bitbucket.org/anacrolix/go.torrent/util" "bufio" "container/list" "crypto/rand" @@ -535,28 +536,9 @@ return } type peerExchangeMessage struct { - Added compactPeers `bencode:"added"` - AddedFlags []byte `bencode:"added.f"` - Dropped []tracker.Peer `bencode:"dropped"` -} - -type compactPeers []tracker.CompactPeer - -func (me *compactPeers) UnmarshalBencode(bb []byte) (err error) { - var b []byte - err = bencode.Unmarshal(bb, &b) - if err != nil { - return - } - for i := 0; i < len(b); i += 6 { - var p tracker.CompactPeer - err = p.UnmarshalBinary([]byte(b[i : i+6])) - if err != nil { - return - } - *me = append(*me, p) - } - return + Added util.CompactPeers `bencode:"added"` + AddedFlags []byte `bencode:"added.f"` + Dropped []tracker.Peer `bencode:"dropped"` } func (me *Client) connectionLoop(t *torrent, c *connection) error { diff --git a/util/types.go b/util/types.go new file mode 100644 index 0000000000000000000000000000000000000000..ec87462221b3e98533098a5e3fbf0b4a43776dcf --- /dev/null +++ b/util/types.go @@ -0,0 +1,30 @@ +package util + +import ( + "bitbucket.org/anacrolix/go.torrent/tracker" + "github.com/anacrolix/libtorgo/bencode" +) + +type CompactPeers []tracker.CompactPeer + +func (me *CompactPeers) UnmarshalBencode(bb []byte) (err error) { + var b []byte + err = bencode.Unmarshal(bb, &b) + if err != nil { + return + } + err = me.UnmarshalBinary(b) + return +} + +func (me *CompactPeers) UnmarshalBinary(b []byte) (err error) { + for i := 0; i < len(b); i += 6 { + var p tracker.CompactPeer + err = p.UnmarshalBinary([]byte(b[i : i+6])) + if err != nil { + return + } + *me = append(*me, p) + } + return +}