| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- package peer_protocol
- import (
- "github.com/anacrolix/dht/v2/krpc"
- "github.com/anacrolix/torrent/bencode"
- )
- type PexMsg struct {
- Added krpc.CompactIPv4NodeAddrs `bencode:"added"`
- AddedFlags []PexPeerFlags `bencode:"added.f"`
- Added6 krpc.CompactIPv6NodeAddrs `bencode:"added6"`
- Added6Flags []PexPeerFlags `bencode:"added6.f"`
- Dropped krpc.CompactIPv4NodeAddrs `bencode:"dropped"`
- Dropped6 krpc.CompactIPv6NodeAddrs `bencode:"dropped6"`
- }
- func (m *PexMsg) Len() int {
- return len(m.Added) + len(m.Added6) + len(m.Dropped) + len(m.Dropped6)
- }
- func (m *PexMsg) Message(pexExtendedId ExtensionNumber) Message {
- payload := bencode.MustMarshal(m)
- return Message{
- Type: Extended,
- ExtendedID: pexExtendedId,
- ExtendedPayload: payload,
- }
- }
- // Unmarshals and returns a PEX message.
- func LoadPexMsg(b []byte) (ret PexMsg, err error) {
- err = bencode.Unmarshal(b, &ret)
- return
- }
- type PexPeerFlags byte
- func (me PexPeerFlags) Get(f PexPeerFlags) bool {
- return me&f == f
- }
- const (
- PexPrefersEncryption PexPeerFlags = 1 << iota
- PexSeedUploadOnly
- PexSupportsUtp
- PexHolepunchSupport
- PexOutgoingConn
- )
|