Net::BitTorrent::Protocol::BEP06 - Packet Utilities for BEP06: Fast Extension
use Net::BitTorrent::Protocol::BEP06 qw[all]; my $index = parse_allowed_fast($data);
The Fast Extension modifies the semantics of the Request, Choke, Unchoke, and Cancel, and adds a Reject Request. Now, every request is guaranteed to result in exactly one response which is either the corresponding reject or corresponding piece message. Even when a request is cancelled, the peer receiving the cancel should respond with either the corresponding reject or the corresponding piece: requests that are being processed are allowed to complete.
Choke no longer implicitly rejects all pending requests, thus eliminating some race conditions which could cause pieces to be needlessly requested multiple times.
There are four tags available for import. To get them all in one go, use the :all tag.
:all
:types
Packet types
For more on what these packets actually mean, see the Fast Extension spec. This is a list of the currently supported packet types.
$SUGGEST
$HAVE_ALL
$HAVE_NONE
$REJECT
$ALLOWED_FAST
:build
These create packets ready-to-send to remote peers. See Building Functions.
:parse
These are used to parse unknown data into sensible packets. The same packet types we can build, we can also parse. See Parsing Functions.
:utils
Helpful functions listed in the section entitled Utility Functions.
build_have_all( )
Creates an advisory packet which claims you have all pieces and can seed.
You should send this rather than a bitfield of all true values.
build_have_none( )
Creates an advisory packet which claims you have no data related to the torrent.
build_suggest( $index )
Creates an advisory message meaning "you might like to download this piece." The intended usage is for 'super-seeding' without throughput reduction, to avoid redundant downloads, and so that a seed which is disk I/O bound can upload contiguous or identical pieces to avoid excessive disk seeks.
You should send this instead of a bitfield of nothing but null values.
build_reject ( $index, $offset, $length )
Creates a packet which is used to notify a requesting peer that its request will not be satisfied.
build_allowed_fast ( $index )
Creates an advisory message which means "if you ask for this piece, I'll give it to you even if you're choked."
These are the parsing counterparts for the build_ functions.
build_
When the packet is invalid, a hash reference is returned with a single key: error. The value is a string describing what went wrong.
error
Return values for valid packets are explained below.
parse_have_all( $data )
Returns an empty list. HAVE ALL packets do not contain a payload.
parse_have_none( $data )
Returns an empty list. HAVE NONE packets do not contain a payload.
parse_suggest( $data )
Returns an integer.
parse_reject( $data )
Returns an array reference containing the $index, $offset, and $length.
$index
$offset
$length
parse_allowed_fast( $data )
generate_fast_set( $k, $sz, $infohash, $ip )
Returns a list of integers. $k is the number of pieces in the set, $sz is the number of pieces in the torrent, $infohash is the packed infohash, $ip is the IPv4 (dotted quad) address of the peer this set will be generated for.
$k
$sz
$infohash
$ip
my $data = join '', map { build_allowed_fast($_) } generate_fast_set(7, 1313, "\xAA" x 20, '80.4.4.200');
http://bittorrent.org/beps/bep_0006.html - Fast Extension
Sanko Robinson <sanko@cpan.org> - http://sankorobinson.com/
CPAN ID: SANKO
Copyright (C) 2008-2012 by Sanko Robinson <sanko@cpan.org>
This program is free software; you can redistribute it and/or modify it under the terms of The Artistic License 2.0. See the LICENSE file included with this distribution or notes on the Artistic License 2.0 for clarification.
When separated from the distribution, all original POD documentation is covered by the Creative Commons Attribution-Share Alike 3.0 License. See the clarification of the CCA-SA3.0.
Neither this module nor the Author is affiliated with BitTorrent, Inc.
To install Net::BitTorrent::Protocol, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Net::BitTorrent::Protocol
CPAN shell
perl -MCPAN -e shell install Net::BitTorrent::Protocol
For more information on module installation, please visit the detailed CPAN module installation guide.