File Coverage

blib/lib/Net/BitTorrent/Protocol/BEP52.pm
Criterion Covered Total %
statement 11 11 100.0
branch n/a
condition n/a
subroutine 4 4 100.0
pod n/a
total 15 15 100.0


line stmt bran cond sub pod time code
1 24     24   174186 use v5.40;
  24         112  
2 24     24   176 use feature 'class';
  24         48  
  24         3300  
3 24     24   176 no warnings 'experimental::class';
  24         46  
  24         15399  
4 5     5   2475 class Net::BitTorrent::Protocol::BEP52 v2.0.0 : isa(Net::BitTorrent::Protocol::BEP03) {
  5         26  
  5         2040  
5              
6             # BEP 52 Hash Request
7             # infohash (v2 only), pieces root, proof layer, base layer, index, length
8             method send_hash_request ( $pieces_root, $proof_layer, $base_layer, $index, $length ) {
9             $self->send_message( $self->HASH_REQUEST, pack( 'a32 C C N N', $pieces_root, $proof_layer, $base_layer, $index, $length ) );
10             }
11              
12             # BEP 52 Hashes
13             # pieces root, proof layer, base layer, index, length, hashes
14             method send_hashes ( $pieces_root, $proof_layer, $base_layer, $index, $length, $hashes ) {
15             $self->send_message( $self->HASHES, pack( 'a32 C C N N a*', $pieces_root, $proof_layer, $base_layer, $index, $length, $hashes ) );
16             }
17              
18             # BEP 52 Hash Reject
19             method send_hash_reject ( $pieces_root, $proof_layer, $base_layer, $index, $length ) {
20             $self->send_message( $self->HASH_REJECT, pack( 'a32 C C N N', $pieces_root, $proof_layer, $base_layer, $index, $length ) );
21             }
22              
23             method _handle_message ( $id, $payload ) {
24             if ( $id == $self->HASH_REQUEST ) {
25             $self->_emit( hash_request => unpack( 'a32 C C N N', $payload ) );
26             }
27             elsif ( $id == $self->HASHES ) {
28             my ( $root, $proof, $base, $idx, $len, $hashes ) = unpack( 'a32 C C N N a*', $payload );
29             $self->_emit( hashes => $root, $proof, $base, $idx, $len, $hashes );
30             }
31             elsif ( $id == $self->HASH_REJECT ) {
32             $self->_emit( hash_reject => unpack( 'a32 C C N N', $payload ) );
33             }
34             else {
35             $self->SUPER::_handle_message( $id, $payload );
36             }
37             }
38             } 1;