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 4     4   25 use strict;
  4         10  
  4         111  
4 4     4   19 use warnings;
  4         8  
  4         190  
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 4     4   23 use WARC; *WARC::Record::Replay::HTTP::Request::VERSION = \$WARC::VERSION;
  4         6  
  4         539  
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 4     4   26 use WARC::Record::Replay::HTTP;
  4         6  
  4         184  
23             $WARC::Record::Replay::HTTP::Request::{$_} =
24             $WARC::Record::Replay::HTTP::{$_}
25 4     4   936 for WARC::Record::Replay::HTTP::HTTP_PARSE_REs;
26             }
27              
28              
29             sub _load_record {
30 60     60   103 my $record = shift;
31              
32 60         149 my $handle = $record->open_continued;
33              
34 60 100       189 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 46         81 my $block;
39             {
40 46         68 local $/ = undef; # slurp
  46         180  
41 46         214 $block = <$handle>;
42             }
43 46         334 my $request = HTTP::Request->parse($block);
44 46 100       24013 return $request->protocol =~ $HTTP__Version ? $request : undef;
45             }
46              
47 14         41 my $method; my $uri; my $http_version;
  14         0  
48             {
49 14         26 local $/ = "\012";
  14         57  
50 14         67 my $line = <$handle>;
51 14         128 $line =~ s/[[:space:]]+$//; # trim trailing CR if present
52 14 100       157 return undef unless $line =~ $HTTP__Request_Line;
53             # $1 -- HTTP Method $2 -- Request-URI $3 -- HTTP-Version
54 12         33 $method = $1; $uri = $2; $http_version = $3;
  12         26  
  12         46  
55             }
56              
57 12         91 my $ob = HTTP::Request->new($method, $uri);
58 12         1539 $ob->protocol($http_version);
59              
60 12         123 WARC::Record::Replay::HTTP::Message::_load_record($ob, $record, $handle);
61             }
62              
63             1;
64             __END__