File Coverage

blib/lib/WARC/Record/Replay/HTTP/Request.pm
Criterion Covered Total %
statement 35 35 100.0
branch 6 6 100.0
condition n/a
subroutine 6 6 100.0
pod n/a
total 47 47 100.0


line stmt bran cond sub pod time code
1             package WARC::Record::Replay::HTTP::Request; # -*- CPerl -*-
2              
3 2     2   29 use strict;
  2         5  
  2         49  
4 2     2   9 use warnings;
  2         3  
  2         89  
5              
6             require HTTP::Request;
7             require WARC::Record::Replay::HTTP::Message;
8             our @ISA = qw(WARC::Record::Replay::HTTP::Message HTTP::Request);
9              
10 2     2   10 use WARC; *WARC::Record::Replay::HTTP::Request::VERSION = \$WARC::VERSION;
  2         4  
  2         247  
11              
12             require WARC::Record::Replay;
13              
14             WARC::Record::Replay::register
15             { $_->field('Content-Type') =~ m|^application/http; msgtype=request| }
16             \&_load_record;
17             WARC::Record::Replay::register
18             { $_->field('Content-Type') =~ m|^application/http| && $_->type eq 'request' }
19             \&_load_record;
20              
21             BEGIN {
22 2     2   10 use WARC::Record::Replay::HTTP;
  2         4  
  2         81  
23             $WARC::Record::Replay::HTTP::Request::{$_} =
24             $WARC::Record::Replay::HTTP::{$_}
25 2     2   440 for WARC::Record::Replay::HTTP::HTTP_PARSE_REs;
26             }
27              
28              
29             sub _load_record {
30 23     23   40 my $record = shift;
31              
32 23         53 my $handle = $record->open_continued;
33              
34 23 100       60 if ($record->field('Content-Length')
35             < $WARC::Record::Replay::HTTP::Content_Deferred_Loading_Threshold) {
36             # The entire WARC block is smaller than the deferred loading threshold;
37             # this is an easy special case.
38 11         20 my $block;
39             {
40 11         20 local $/ = undef; # slurp
  11         38  
41 11         50 $block = <$handle>;
42             }
43 11         84 my $request = HTTP::Request->parse($block);
44 11 100       8576 return $request->protocol =~ $HTTP__Version ? $request : undef;
45             }
46              
47 12         34 my $method; my $uri; my $http_version;
  12         0  
48             {
49 12         18 local $/ = "\012";
  12         40  
50 12         73 my $line = <$handle>;
51 12         83 $line =~ s/[[:space:]]+$//; # trim trailing CR if present
52 12 100       118 return undef unless $line =~ $HTTP__Request_Line;
53             # $1 -- HTTP Method $2 -- Request-URI $3 -- HTTP-Version
54 10         27 $method = $1; $uri = $2; $http_version = $3;
  10         19  
  10         30  
55             }
56              
57 10         59 my $ob = HTTP::Request->new($method, $uri);
58 10         1097 $ob->protocol($http_version);
59              
60 10         94 WARC::Record::Replay::HTTP::Message::_load_record($ob, $record, $handle);
61             }
62              
63             1;
64             __END__