From: Matt Joiner Date: Wed, 3 May 2023 06:40:00 +0000 (+1000) Subject: Add many more extension bit definitions X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=c202126a62ff9c321fcb9f7bb037bb5f1b52e216;p=btrtrc.git Add many more extension bit definitions --- diff --git a/global.go b/global.go index dfb6bd4c..5a5bddba 100644 --- 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() { diff --git a/peer_protocol/handshake.go b/peer_protocol/handshake.go index 76dc2b05..454cc246 100644 --- a/peer_protocol/handshake.go +++ b/peer_protocol/handshake.go @@ -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 { diff --git a/peerconn.go b/peerconn.go index d85d0d51..1443a7b9 100644 --- a/peerconn.go +++ b/peerconn.go @@ -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 { diff --git a/torrent_test.go b/torrent_test.go index b62be706..808947e9 100644 --- a/torrent_test.go +++ b/torrent_test.go @@ -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)