]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Add many more extension bit definitions
authorMatt Joiner <anacrolix@gmail.com>
Wed, 3 May 2023 06:40:00 +0000 (16:40 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Tue, 9 May 2023 05:46:53 +0000 (15:46 +1000)
global.go
peer_protocol/handshake.go
peerconn.go
torrent_test.go

index dfb6bd4cedaab757b578d58a715ffe36569953cc..5a5bddba0a6b3acfebea35d8f21d908a38ce3be0 100644 (file)
--- a/global.go
+++ b/global.go
@@ -28,7 +28,7 @@ const (
 )
 
 func defaultPeerExtensionBytes() PeerExtensionBits {
-       return pp.NewPeerExtensionBytes(pp.ExtensionBitDHT, pp.ExtensionBitExtended, pp.ExtensionBitFast)
+       return pp.NewPeerExtensionBytes(pp.ExtensionBitDht, pp.ExtensionBitLtep, pp.ExtensionBitFast)
 }
 
 func init() {
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 {
index d85d0d511c5417b8aa4bbfd420e91e00b655bd00..1443a7b9a7afaf7fe86c4f8ea9247b367c8cd0a9 100644 (file)
@@ -69,7 +69,7 @@ type PeerConn struct {
 }
 
 func (cn *PeerConn) pexStatus() string {
-       if !cn.bitExtensionEnabled(pp.ExtensionBitExtended) {
+       if !cn.bitExtensionEnabled(pp.ExtensionBitLtep) {
                return "extended protocol disabled"
        }
        if cn.PeerExtensionIDs == nil {
index b62be706f642663e3016bfe03652e3e08937b2cc..808947e974a23fe9df13e8fb5714eac781445305 100644 (file)
@@ -184,10 +184,10 @@ func TestTorrentMetainfoIncompleteMetadata(t *testing.T) {
        defer nc.Close()
 
        var pex PeerExtensionBits
-       pex.SetBit(pp.ExtensionBitExtended, true)
+       pex.SetBit(pp.ExtensionBitLtep, true)
        hr, err := pp.Handshake(nc, &ih, [20]byte{}, pex)
        require.NoError(t, err)
-       assert.True(t, hr.PeerExtensionBits.GetBit(pp.ExtensionBitExtended))
+       assert.True(t, hr.PeerExtensionBits.GetBit(pp.ExtensionBitLtep))
        assert.EqualValues(t, cl.PeerID(), hr.PeerID)
        assert.EqualValues(t, ih, hr.Hash)