NAME
Net::BitTorrent::Protocol::BEP10 - Extension Protocol Implementation
SYNOPSIS
# Inherits from Net::BitTorrent::Protocol::BEP52 (BitTorrent v2)
use Net::BitTorrent::Protocol::BEP10;
my $proto = Net::BitTorrent::Protocol::BEP10->new(
local_extensions => { ut_metadata => 1, ut_pex => 2 }
);
# Once core handshake is done, send extension handshake
$proto->send_ext_handshake();
# Send an extension message by name
$proto->send_ext_message( 'ut_pex', $bencoded_pex_data );
DESCRIPTION
Net::BitTorrent::Protocol::BEP10 implements the Extension Protocol (BEP 10). This is the standard mechanism modern BitTorrent clients use to negotiate support for additional features (like PEX, Magnet links, and DHT security) without needing to allocate new reserved bits in the foundational BitTorrent handshake.
METHODS
new( %params )
Creates a new BEP10 protocol handler.
Expected parameters:
local_extensions- optional-
A hash reference mapping extension names to local IDs.
metadata_size- optional-
The total size of the torrent metadata in bytes.
send_ext_handshake( )
Sends the extension protocol handshake.
$proto->send_ext_handshake();
This method sends the EXTENDED (ID 20) message with sub-ID 0, containing the local extension dictionary.
send_ext_message( $name, $payload )
Sends an extended message.
$proto->send_ext_message( 'ut_metadata', $data );
This method sends a message for a specific extension by its name.
Expected parameters:
$name-
The string name of the extension (e.g., 'ut_metadata', 'ut_pex').
$payload-
The raw message payload.
ext_handshake event
Emitted when an extended handshake is received.
$proto->on( ext_handshake => sub ( $self, $data ) { ... } );
Expected parameters:
extended_message event
Emitted when an extended message is received.
$proto->on( extended_message => sub ( $self, $name, $payload ) { ... } );
Expected parameters:
local_extensions( )
Returns the local extensions map.
my $exts = $proto->local_extensions();
remote_extensions( )
Returns the remote extensions map.
my $exts = $proto->remote_extensions();
remote_version( )
Returns the remote client's version string.
say "Remote version: " . $proto->remote_version();
remote_ip( )
Returns our external IP as seen by the remote peer.
say "Remote says our IP is: " . $proto->remote_ip();
metadata_size( )
Returns the total size of the metadata as reported by the peer.
my $size = $proto->metadata_size();
remote_extensions_received( )
Returns true if the remote extended handshake has been received.
if ($proto->remote_extensions_received) { ... }
SPECIFICATIONS
BEP 10: Extension Protocol
AUTHOR
Sanko Robinson <sanko@cpan.org>
COPYRIGHT
Copyright (C) 2008-2026 by Sanko Robinson.
This library is free software; you can redistribute it and/or modify it under the terms of the Artistic License 2.0.