]> Sergey Matveev's repositories - btrtrc.git/blob - pex.go
Support IPv6 peers over PEX
[btrtrc.git] / pex.go
1 package torrent
2
3 import "github.com/anacrolix/dht/krpc"
4
5 type peerExchangeMessage struct {
6         Added       krpc.CompactIPv4NodeAddrs `bencode:"added"`
7         AddedFlags  []pexPeerFlags            `bencode:"added.f"`
8         Added6      krpc.CompactIPv6NodeAddrs `bencode:"added6"`
9         Added6Flags []pexPeerFlags            `bencode:"added6.f"`
10         Dropped     krpc.CompactIPv4NodeAddrs `bencode:"dropped"`
11         Dropped6    krpc.CompactIPv6NodeAddrs `bencode:"dropped6"`
12 }
13
14 type pexPeerFlags byte
15
16 func (me pexPeerFlags) Get(f pexPeerFlags) bool {
17         return me&f == f
18 }
19
20 const (
21         pexPrefersEncryption = 0x01
22         pexSeedUploadOnly    = 0x02
23         pexSupportsUtp       = 0x04
24         pexHolepunchSupport  = 0x08
25         pexOutgoingConn      = 0x10
26 )
27
28 func (me *peerExchangeMessage) AddedPeers() (ret Peers) {
29         ret.FromPex(me.Added, me.AddedFlags)
30         ret.FromPex(me.Added6, me.Added6Flags)
31         return
32 }