]> Sergey Matveev's repositories - btrtrc.git/blob - peer_protocol/extended.go
e6d935f72cf01d4aebeeb1ec7198a05415225b91
[btrtrc.git] / peer_protocol / extended.go
1 package peer_protocol
2
3 import (
4         "net"
5 )
6
7 // http://www.bittorrent.org/beps/bep_0010.html
8 type (
9         ExtendedHandshakeMessage struct {
10                 M          map[ExtensionName]ExtensionNumber `bencode:"m"`
11                 V          string                            `bencode:"v,omitempty"`
12                 Reqq       int                               `bencode:"reqq,omitempty"`
13                 Encryption bool                              `bencode:"e,omitempty"`
14                 // BEP 9
15                 MetadataSize int `bencode:"metadata_size,omitempty"`
16                 // The local client port. It would be redundant for the receiving side of
17                 // a connection to send this.
18                 Port   int       `bencode:"p,omitempty"`
19                 YourIp CompactIp `bencode:"yourip,omitempty"`
20                 Ipv4   CompactIp `bencode:"ipv4,omitempty"`
21                 Ipv6   net.IP    `bencode:"ipv6,omitempty"`
22         }
23
24         ExtensionName   string
25         ExtensionNumber int
26 )
27
28 const (
29         // http://www.bittorrent.org/beps/bep_0011.html
30         ExtensionNamePex ExtensionName = "ut_pex"
31
32         ExtensionDeleteNumber ExtensionNumber = 0
33 )
34
35 func (me *ExtensionNumber) UnmarshalBinary(b []byte) error {
36         *me = ExtensionNumber(b[0])
37         return nil
38 }