Skip to content

Commit

Permalink
Add many more extension bit definitions
Browse files Browse the repository at this point in the history
  • Loading branch information
anacrolix committed May 9, 2023
1 parent e9e21b9 commit c202126
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 12 deletions.
2 changes: 1 addition & 1 deletion global.go
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down
31 changes: 23 additions & 8 deletions peer_protocol/handshake.go
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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 {
Expand Down Expand Up @@ -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 {
Expand Down
2 changes: 1 addition & 1 deletion peerconn.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
4 changes: 2 additions & 2 deletions torrent_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down

0 comments on commit c202126

Please sign in to comment.