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) {
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 {
}
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 {
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)