File Coverage

blib/lib/Net/SenderBase/Query/HTTP.pm
Criterion Covered Total %
statement 18 39 46.1
branch 0 12 0.0
condition 0 5 0.0
subroutine 6 8 75.0
pod 0 2 0.0
total 24 66 36.3


line stmt bran cond sub pod time code
1             # $Id: HTTP.pm,v 1.3 2003/07/08 20:16:44 matt Exp $
2              
3             package Net::SenderBase::Query::HTTP;
4 1     1   632 use strict;
  1         3  
  1         37  
5 1     1   6 use vars qw($HOST);
  1         2  
  1         48  
6              
7             $HOST = 'www.senderbase.org';
8              
9 1     1   5 use Socket qw(CRLF);
  1         2  
  1         326  
10 1     1   5 use IO::Socket;
  1         2  
  1         8  
11 1     1   809 use Net::SenderBase;
  1         2  
  1         17  
12 1     1   4 use Net::SenderBase::Results;
  1         2  
  1         400  
13              
14             sub new {
15 0     0 0   my $class = shift;
16 0           my %attrs = @_;
17            
18 0 0         $attrs{Address} || die "No address";
19 0   0       $attrs{Host} ||= $HOST;
20 0 0         $attrs{Timeout} || die "No timeout";
21              
22 0           my $self = bless { %attrs }, $class;
23              
24 0           return $self;
25             }
26              
27             sub results {
28 0     0 0   my $self = shift;
29              
30 0   0       my $socket = IO::Socket::INET->new(
31             PeerAddr => $self->{Host},
32             PeerPort => '80',
33             Proto => 'tcp',
34             Timeout => $self->{Timeout},
35             ) || die "Connect to $self->{Host}:80 failed";
36              
37 0 0         my $mask = $self->{Mask} ? "&mask=$self->{Mask}" : '';
38 0           print $socket "GET /check?ip=$self->{Address}$mask HTTP/1.0" , CRLF,
39             "Host: $self->{Host}", CRLF,
40             "User-Agent: Net::SenderBase/$Net::SenderBase::VERSION",
41             CRLF, CRLF;
42              
43 0           local $/ = "\015\012";
44              
45 0           my $proto = <$socket>; # HTTP/1.0 ....
46 0 0         die "Invalid response" unless $proto =~ /^(HTTP\/\d+\.\d+)[ \t]+(\d+)[ \t]*([^\012]*)$/;
47 0           my ($ver, $code, $msg) = ($1, $2, $3);
48              
49             HEADERS:
50 0           while (<$socket>) {
51 0           chomp;
52 0 0         last HEADERS if /^$/m;
53             }
54              
55 0           my $data = <$socket>;
56 0 0         die "No results came back for $self->{Address}" unless $data;
57 0           return Net::SenderBase::Results->cons($self->{Address}, $data);
58             }
59              
60             1;