|
Net::BitTorrent::PeerPacket - Parse/Build Peer Packets from BitTorrent |
Net::BitTorrent::PeerPacket - Parse/Build Peer Packets from BitTorrent
# import everything use Net::BitTorrent::PeerPacket qw(:all);
# or be more selective use Net::BitTorrent::PeerPacket qw(bt_build_packet :constants);
# Encode a packet my $binary_packet = bt_build_packet($key1, $value1, $key2, $value2);
# Decode a packet my $parsed_packet = bt_parse_packet($binary_data);
Net::BitTorrent::PeerPacket handles parsing and building binary data
shared between BitTorrent peers. The module optionally exports a single
subroutine for building packets and another for parsing packets, as well
as, a constant for each packet type defined by BitTorrent.
There are ten primary types of packets that are shared between peers on a BitTorrent network. The following constants are how the type of packet being build/parsed are represented within this module.
This subroutine is responsible for building all types of BitTorrent packets. The arguments are passed into the subroutine as a list of key-value pairs. The resultant packet is sent back as a scalar.
Depending on the requested packet type, the required arguments vary. One
argument that is common to all calls is the bt_code. The bt_code maps
to a BT_ constant exported by this module and determines the type of
packet that will be built.
What follows is a list of the different BT codes and the details of calling this subroutine with those codes.
Passing the BT_HANDSHAKE code causes a handshake packet to be generated.
This type of packet is sent as soon as peers are connected and requires two
additional keys:
.torrent file that represents the download.
Passing the BT_CHOKE code causes a choke packet to be generated. This type of
packet requires no additional data and therefore no additional arguments.
Passing the BT_UNCHOKE code causes an unchoke packet to be generated. This
type of packet requires no additional data and therefore no additional
arguments.
Passing the BT_INTERESTED code causes an interested packet to be generated.
This type of packet requires no additional data and therefore no additional
arguments.
Passing the BT_UNINTERESTED code causes an uninterested packet to be generated.
This type of packet requires no additional data and therefore no additional
arguments.
Passing the BT_HAVE code causes a have packet to be generated. This type of
packet requires a piece index in addition to the BT code.
Passing the BT_BITFIELD code causes a bit field packet to be generated. This
type of packet requires the bit field be specified in addition to the BT code.
Passing the BT_REQUEST code causes a request packet to be generated. This
type of packet requires the piece index along with block offset and size in
addition to the BT code.
Passing the BT_PIECE code causes a piece packet to be generated. This
type of packet requires the piece index along with block offset and the data
to be transferred in addition to the BT code.
Passing the BT_CANCEL code causes a cancel packet to be generated. This
type of packet requires the piece index along with block offset and size in
addition to the BT code.
This subroutine is responsible for parsing all types of BitTorrent packets. It accepts a single argument, which is a reference to a scalar that contains the raw packet data. It returns a hash reference containing the parsed data.
Depending on the packet type, the keys in the returned hash vary. One key that is common to all packets is the bt_code. The bt_code maps to a BT_ constant exported by this module and reveals the type of packet that was parsed.
What follows is a list of the different BT codes that might be returned and the additional keys that will be packaged with each code.
The resultant hash from a choke packet will only contain the bt_code key.
The resultant hash from an unchoke packet will only contain the bt_code key.
The resultant hash from an interested packet will only contain the bt_code
key.
The resultant hash from an uninterested packet will only contain the bt_code
key.
The resultant hash from a have packet will only contain the bt_code
key and the following additional keys.
The resultant hash from a bit field packet will only contain the bt_code
key and the following additional keys.
The resultant hash from a request packet will only contain the bt_code
key and the following additional keys.
The resultant hash from a piece packet will only contain the bt_code
key and the following additional keys.
The resultant hash from a cancel packet will only contain the bt_code
key and the following additional keys.
perl Build.PL ./Build ./Build test ./Build install
Josh McAdams <joshua dot mcadams at gmail dot com>
|
Net::BitTorrent::PeerPacket - Parse/Build Peer Packets from BitTorrent |