]> Sergey Matveev's repositories - btrtrc.git/blob - util/types.go
util/loghttp: Don't implicitly expose pprof
[btrtrc.git] / util / types.go
1 package util
2
3 import (
4         "bytes"
5         "encoding"
6         "encoding/binary"
7         "fmt"
8
9         "github.com/anacrolix/libtorgo/bencode"
10 )
11
12 type CompactPeers []CompactPeer
13
14 func (me *CompactPeers) UnmarshalBencode(bb []byte) (err error) {
15         var b []byte
16         err = bencode.Unmarshal(bb, &b)
17         if err != nil {
18                 return
19         }
20         err = me.UnmarshalBinary(b)
21         return
22 }
23
24 func (me *CompactPeers) UnmarshalBinary(b []byte) (err error) {
25         for i := 0; i < len(b); i += 6 {
26                 var p CompactPeer
27                 err = p.UnmarshalBinary([]byte(b[i : i+6]))
28                 if err != nil {
29                         return
30                 }
31                 *me = append(*me, p)
32         }
33         return
34 }
35
36 type CompactPeer struct {
37         IP   [4]byte
38         Port uint16
39 }
40
41 var _ encoding.BinaryUnmarshaler = &CompactPeer{}
42
43 func (cp *CompactPeer) UnmarshalBinary(b []byte) (err error) {
44         r := bytes.NewReader(b)
45         err = binary.Read(r, binary.BigEndian, cp)
46         if err != nil {
47                 return
48         }
49         if r.Len() != 0 {
50                 err = fmt.Errorf("%d bytes unused", r.Len())
51         }
52         return
53 }