]> Sergey Matveev's repositories - btrtrc.git/blobdiff - peer_protocol/handshake.go
Add many more extension bit definitions
[btrtrc.git] / peer_protocol / handshake.go
index 76dc2b05d250f422b7dfd6d9bbbfcc5b985181a6..454cc2460bb90a206ffab9eb9fcba0dfa485dc77 100644 (file)
@@ -15,10 +15,20 @@ import (
 
 type ExtensionBit uint
 
+// https://www.bittorrent.org/beps/bep_0004.html
+// https://wiki.theory.org/BitTorrentSpecification.html#Reserved_Bytes
 const (
-       ExtensionBitDHT      = 0  // http://www.bittorrent.org/beps/bep_0005.html
-       ExtensionBitExtended = 20 // http://www.bittorrent.org/beps/bep_0010.html
-       ExtensionBitFast     = 2  // http://www.bittorrent.org/beps/bep_0006.html
+       ExtensionBitDht                          = 0 // http://www.bittorrent.org/beps/bep_0005.html
+       ExtensionBitFast                         = 2 // http://www.bittorrent.org/beps/bep_0006.html
+       ExtensionBitV2                           = 7 // "Hybrid torrent legacy to v2 upgrade"
+       ExtensionBitAzureusExtensionNegotiation1 = 16
+       ExtensionBitAzureusExtensionNegotiation2 = 17
+       // LibTorrent Extension Protocol, http://www.bittorrent.org/beps/bep_0010.html
+       ExtensionBitLtep = 20
+       // https://wiki.theory.org/BitTorrent_Location-aware_Protocol_1
+       ExtensionBitLocationAwareProtocol    = 43
+       ExtensionBitAzureusMessagingProtocol = 63 // https://www.bittorrent.org/beps/bep_0004.html
+
 )
 
 func handshakeWriter(w io.Writer, bb <-chan []byte, done chan<- error) {
@@ -40,10 +50,15 @@ var bitTags = []struct {
        bit ExtensionBit
        tag string
 }{
-       // Ordered by their base protocol type values (PORT, fast.., EXTENDED)
-       {ExtensionBitDHT, "dht"},
+       // Ordered by their bit position left to right.
+       {ExtensionBitAzureusMessagingProtocol, "amp"},
+       {ExtensionBitLocationAwareProtocol, "loc"},
+       {ExtensionBitLtep, "ltep"},
+       {ExtensionBitAzureusExtensionNegotiation2, "azen2"},
+       {ExtensionBitAzureusExtensionNegotiation1, "azen1"},
+       {ExtensionBitV2, "v2"},
        {ExtensionBitFast, "fast"},
-       {ExtensionBitExtended, "ext"},
+       {ExtensionBitDht, "dht"},
 }
 
 func (pex PeerExtensionBits) String() string {
@@ -71,11 +86,11 @@ func NewPeerExtensionBytes(bits ...ExtensionBit) (ret PeerExtensionBits) {
 }
 
 func (pex PeerExtensionBits) SupportsExtended() bool {
-       return pex.GetBit(ExtensionBitExtended)
+       return pex.GetBit(ExtensionBitLtep)
 }
 
 func (pex PeerExtensionBits) SupportsDHT() bool {
-       return pex.GetBit(ExtensionBitDHT)
+       return pex.GetBit(ExtensionBitDht)
 }
 
 func (pex PeerExtensionBits) SupportsFast() bool {