|  line  | 
 stmt  | 
 bran  | 
 cond  | 
 sub  | 
 pod  | 
 time  | 
 code  | 
| 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 package POE::Component::Client::Whois;  | 
| 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 $POE::Component::Client::Whois::VERSION = '1.36';  | 
| 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 #ABSTRACT: A one shot non-blocking RFC 812 WHOIS query.  | 
| 
4
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
5
 | 
4
 | 
 
 | 
 
 | 
  
4
  
 | 
 
 | 
27061
 | 
 use strict;  | 
| 
 
 | 
4
 | 
 
 | 
 
 | 
 
 | 
 
 | 
8
 | 
    | 
| 
 
 | 
4
 | 
 
 | 
 
 | 
 
 | 
 
 | 
181
 | 
    | 
| 
6
 | 
4
 | 
 
 | 
 
 | 
  
4
  
 | 
 
 | 
19
 | 
 use warnings;  | 
| 
 
 | 
4
 | 
 
 | 
 
 | 
 
 | 
 
 | 
7
 | 
    | 
| 
 
 | 
4
 | 
 
 | 
 
 | 
 
 | 
 
 | 
132
 | 
    | 
| 
7
 | 
4
 | 
 
 | 
 
 | 
  
4
  
 | 
 
 | 
927
 | 
 use Socket;  | 
| 
 
 | 
4
 | 
 
 | 
 
 | 
 
 | 
 
 | 
5125
 | 
    | 
| 
 
 | 
4
 | 
 
 | 
 
 | 
 
 | 
 
 | 
2591
 | 
    | 
| 
8
 | 
4
 | 
 
 | 
 
 | 
  
4
  
 | 
 
 | 
30
 | 
 use Carp;  | 
| 
 
 | 
4
 | 
 
 | 
 
 | 
 
 | 
 
 | 
5
 | 
    | 
| 
 
 | 
4
 | 
 
 | 
 
 | 
 
 | 
 
 | 
271
 | 
    | 
| 
9
 | 
4
 | 
 
 | 
 
 | 
  
4
  
 | 
 
 | 
777
 | 
 use POE qw(Filter::Line Wheel::ReadWrite Wheel::SocketFactory);  | 
| 
 
 | 
4
 | 
 
 | 
 
 | 
 
 | 
 
 | 
53117
 | 
    | 
| 
 
 | 
4
 | 
 
 | 
 
 | 
 
 | 
 
 | 
28
 | 
    | 
| 
10
 | 
4
 | 
 
 | 
 
 | 
  
4
  
 | 
 
 | 
109218
 | 
 use POE::Component::Client::Whois::TLDList;  | 
| 
 
 | 
4
 | 
 
 | 
 
 | 
 
 | 
 
 | 
15
 | 
    | 
| 
 
 | 
4
 | 
 
 | 
 
 | 
 
 | 
 
 | 
233
 | 
    | 
| 
11
 | 
4
 | 
 
 | 
 
 | 
  
4
  
 | 
 
 | 
2671
 | 
 use POE::Component::Client::Whois::IPBlks;  | 
| 
 
 | 
4
 | 
 
 | 
 
 | 
 
 | 
 
 | 
14
 | 
    | 
| 
 
 | 
4
 | 
 
 | 
 
 | 
 
 | 
 
 | 
6730
 | 
    | 
| 
12
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
13
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 sub whois {  | 
| 
14
 | 
3
 | 
 
 | 
 
 | 
  
3
  
 | 
  
1
  
 | 
2460
 | 
     my $package = shift;  | 
| 
15
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
25
 | 
     my %args    = @_;  | 
| 
16
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
17
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
26
 | 
     $args{ lc $_ } = delete $args{$_} for keys %args;  | 
| 
18
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
19
 | 
3
 | 
  
 50
  
 | 
  
 33
  
 | 
 
 | 
 
 | 
18
 | 
     $args{referral} = 1 unless defined $args{referral} and !$args{referral};  | 
| 
20
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
21
 | 
3
 | 
  
 50
  
 | 
  
 33
  
 | 
 
 | 
 
 | 
28
 | 
     unless ( $args{query} and $args{event} ) {  | 
| 
22
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
         warn "You must provide a query string and a response event\n";  | 
| 
23
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
         return undef;  | 
| 
24
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     }  | 
| 
25
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
26
 | 
3
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
10
 | 
     unless ( $args{host} ) {  | 
| 
27
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
2
 | 
         my $whois_server;  | 
| 
28
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
20
 | 
         my $tld = POE::Component::Client::Whois::TLDList->new();  | 
| 
29
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
10
 | 
         my $blk = POE::Component::Client::Whois::IPBlks->new();  | 
| 
30
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
       SWITCH: {  | 
| 
31
 | 
2
 | 
  
 50
  
 | 
  
  0
  
 | 
 
 | 
 
 | 
2
 | 
             if ( $args{query} =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/  | 
| 
 
 | 
2
 | 
 
 | 
  
 33
  
 | 
 
 | 
 
 | 
12
 | 
    | 
| 
32
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                 and  | 
| 
33
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                 scalar( grep $_ >= 0 && $_ <= 255, split /\./, $args{query} ) ==  | 
| 
34
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                 4 )  | 
| 
35
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
             {  | 
| 
36
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
                 $whois_server = ( $blk->get_server( $args{query} ) )[0];  | 
| 
37
 | 
0
 | 
  
  0
  
 | 
 
 | 
 
 | 
 
 | 
0
 | 
                 unless ($whois_server) {  | 
| 
38
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
                     warn  | 
| 
39
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 "Couldn\'t determine correct whois server, falling back on arin\n";  | 
| 
40
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
                     $whois_server = 'whois.arin.net';  | 
| 
41
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                 }  | 
| 
42
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
                 last SWITCH;  | 
| 
43
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
             }  | 
| 
44
 | 
2
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
7
 | 
             if ( $args{query} =~ /:/ ) {  | 
| 
45
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
                 warn "IPv6 detected, defaulting to arin\n";  | 
| 
46
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
                 $whois_server = 'whois.arin.net';  | 
| 
47
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
                 last SWITCH;  | 
| 
48
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
             }  | 
| 
49
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
10
 | 
             $whois_server = ( $tld->tld( $args{query} ) )[0];  | 
| 
50
 | 
2
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
5
 | 
             if ( $whois_server eq 'ARPA' ) {  | 
| 
51
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
                 $args{query} =~ s/\.in-addr\.arpa//;  | 
| 
52
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
                 $args{query} = join '.', reverse split( /\./, $args{query} );  | 
| 
53
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
                 $whois_server = ( $blk->get_server( $args{query} ) )[0];  | 
| 
54
 | 
0
 | 
  
  0
  
 | 
 
 | 
 
 | 
 
 | 
0
 | 
                 unless ($whois_server) {  | 
| 
55
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
                     warn  | 
| 
56
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 "Couldn\'t determine correct whois server, falling back on arin\n";  | 
| 
57
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
                     $whois_server = 'whois.arin.net';  | 
| 
58
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                 }  | 
| 
59
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
             }  | 
| 
60
 | 
2
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
6
 | 
             unless ($whois_server) {  | 
| 
61
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
                 warn  | 
| 
62
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 "Could not automagically determine whois server from query string, defaulting to internic \n";  | 
| 
63
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
                 $whois_server = 'whois.internic.net';  | 
| 
64
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
             }  | 
| 
65
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         }  | 
| 
66
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
61
 | 
         $args{host} = $whois_server;  | 
| 
67
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     }  | 
| 
68
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
69
 | 
3
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
26
 | 
     $args{session} = $poe_kernel->get_active_session()  | 
| 
70
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
       unless ( $args{session} );  | 
| 
71
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
72
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
16
 | 
     my $self = bless { request => \%args }, $package;  | 
| 
73
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
74
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
54
 | 
     $self->{session_id} = POE::Session->create(  | 
| 
75
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         object_states => [  | 
| 
76
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
             $self => [  | 
| 
77
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                 qw(_start _connect _sock_input _sock_down _sock_up _sock_failed _time_out)  | 
| 
78
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
             ],  | 
| 
79
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         ],  | 
| 
80
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         options => { trace => 0 },  | 
| 
81
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     )->ID();  | 
| 
82
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
83
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
310
 | 
     return $self;  | 
| 
84
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 }  | 
| 
85
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
86
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 sub _start {  | 
| 
87
 | 
3
 | 
 
 | 
 
 | 
  
3
  
 | 
 
 | 
535
 | 
     my ( $kernel, $self ) = @_[ KERNEL, OBJECT ];  | 
| 
88
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
17
 | 
     $self->{_dot_com} = ( POE::Component::Client::Whois::TLDList->new()->tld('.com') )[0];  | 
| 
89
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
17
 | 
     $self->{session_id} = $_[SESSION]->ID();  | 
| 
90
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
21
 | 
     $kernel->yield('_connect');  | 
| 
91
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
227
 | 
     undef;  | 
| 
92
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 }  | 
| 
93
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
94
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 sub _connect {  | 
| 
95
 | 
3
 | 
 
 | 
 
 | 
  
3
  
 | 
 
 | 
668
 | 
     my ( $kernel, $self ) = @_[ KERNEL, OBJECT ];  | 
| 
96
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
97
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # Check here for NONE or WEB and send an error straight away.  | 
| 
98
 | 
3
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
31
 | 
     if ( my ($type) = $self->{request}->{host} =~ /^(NONE|WEB)$/ ) {  | 
| 
99
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
2
 | 
         my $error;  | 
| 
100
 | 
2
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
6
 | 
         if ( $type eq 'NONE' ) {  | 
| 
101
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
2
 | 
             $error = 'This TLD has no whois server.';  | 
| 
102
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         }  | 
| 
103
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         else {  | 
| 
104
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
4
 | 
             $error =  | 
| 
105
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                 'This TLD has no whois server, but you can access the '  | 
| 
106
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
               . 'whois database at '  | 
| 
107
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
               . (  | 
| 
108
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                 POE::Component::Client::Whois::TLDList->new->tld(  | 
| 
109
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                     $self->{request}->{query}  | 
| 
110
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                 )  | 
| 
111
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
               )[1];  | 
| 
112
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         }  | 
| 
113
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
6
 | 
         $self->{request}->{error} = $error;  | 
| 
114
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
4
 | 
         my $request = delete $self->{request};  | 
| 
115
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
4
 | 
         my $session = delete $request->{session};  | 
| 
116
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
11
 | 
         $kernel->post( $session => $request->{event} => $request );  | 
| 
117
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
156
 | 
         return;  | 
| 
118
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     }  | 
| 
119
 | 
1
 | 
 
 | 
  
 50
  
 | 
 
 | 
 
 | 
13
 | 
     $self->{factory} = POE::Wheel::SocketFactory->new(  | 
| 
120
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         SocketDomain   => AF_INET,  | 
| 
121
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         SocketType     => SOCK_STREAM,  | 
| 
122
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         SocketProtocol => 'tcp',  | 
| 
123
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         RemoteAddress  => $self->{request}->{host},  | 
| 
124
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         RemotePort     => $self->{request}->{port} || 43,  | 
| 
125
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         SuccessEvent   => '_sock_up',  | 
| 
126
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         FailureEvent   => '_sock_failed',  | 
| 
127
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     );  | 
| 
128
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
405
 | 
     undef;  | 
| 
129
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 }  | 
| 
130
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
131
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 sub _sock_failed {  | 
| 
132
 | 
0
 | 
 
 | 
 
 | 
  
0
  
 | 
 
 | 
0
 | 
     my ( $kernel, $self, $op, $errno, $errstr ) =  | 
| 
133
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
       @_[ KERNEL, OBJECT, ARG0 .. ARG2 ];  | 
| 
134
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
135
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
     delete $self->{factory};  | 
| 
136
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
     $self->{request}->{error} = "$op error $errno: $errstr";  | 
| 
137
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
     my $request = delete $self->{request};  | 
| 
138
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
     my $session = delete $request->{session};  | 
| 
139
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
140
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
     $kernel->post( $session => $request->{event} => $request );  | 
| 
141
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
     undef;  | 
| 
142
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 }  | 
| 
143
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
144
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 sub _sock_up {  | 
| 
145
 | 
1
 | 
 
 | 
 
 | 
  
1
  
 | 
 
 | 
1308
 | 
     my ( $kernel, $self, $session, $socket ) =  | 
| 
146
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
       @_[ KERNEL, OBJECT, SESSION, ARG0 ];  | 
| 
147
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
7
 | 
     delete $self->{factory};  | 
| 
148
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
149
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
18
 | 
     $self->{'socket'} = new POE::Wheel::ReadWrite(  | 
| 
150
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         Handle => $socket,  | 
| 
151
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         Driver => POE::Driver::SysRW->new(),  | 
| 
152
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         Filter => POE::Filter::Line->new(  | 
| 
153
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
             InputRegexp   => '\015?\012',  | 
| 
154
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
             OutputLiteral => "\015\012"  | 
| 
155
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         ),  | 
| 
156
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         InputEvent => '_sock_input',  | 
| 
157
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         ErrorEvent => '_sock_down',  | 
| 
158
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     );  | 
| 
159
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
160
 | 
1
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
360
 | 
     unless ( $self->{'socket'} ) {  | 
| 
161
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
         my $request = delete $self->{request};  | 
| 
162
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
         my $session = delete $request->{session};  | 
| 
163
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
         $request->{error} =  | 
| 
164
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
           "Couldn\'t create a Wheel::ReadWrite on socket for whois";  | 
| 
165
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
         $kernel->post( $session => $request->{event} => $request );  | 
| 
166
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
         return undef;  | 
| 
167
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     }  | 
| 
168
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
169
 | 
1
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
8
 | 
     my $query = $self->{request}->{host} eq 'de.whois-servers.net'  | 
| 
170
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                 ? join(' ', '-T dn,ace -C US-ASCII', $self->{request}->{query})  | 
| 
171
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                 : $self->{request}->{query};  | 
| 
172
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
173
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
7
 | 
     $self->{'socket'}->put( $query );  | 
| 
174
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
83
 | 
     $kernel->delay( '_time_out' => 30 );  | 
| 
175
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
93
 | 
     undef;  | 
| 
176
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 }  | 
| 
177
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
178
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 sub _sock_down {  | 
| 
179
 | 
1
 | 
 
 | 
 
 | 
  
1
  
 | 
 
 | 
142
 | 
     my ( $kernel, $self ) = @_[ KERNEL, OBJECT ];  | 
| 
180
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
4
 | 
     delete $self->{socket};  | 
| 
181
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
149
 | 
     $kernel->delay( '_time_out' => undef );  | 
| 
182
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
183
 | 
1
 | 
  
 50
  
 | 
  
 33
  
 | 
 
 | 
 
 | 
87
 | 
     if ( $self->{request}->{referral} and $self->{_referral} ) {  | 
| 
184
 | 
0
 | 
  
  0
  
 | 
 
 | 
 
 | 
 
 | 
0
 | 
         delete $self->{request}->{reply} if $self->{referral_only};  | 
| 
185
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
         my $referral = delete $self->{_referral};  | 
| 
186
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
         my ($host,$port) = split /:/, $referral;  | 
| 
187
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
         $self->{request}->{host} = $host;  | 
| 
188
 | 
0
 | 
  
  0
  
 | 
 
 | 
 
 | 
 
 | 
0
 | 
         $self->{request}->{port} = ( $port ? $port : '43' );  | 
| 
189
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
         $kernel->yield('_connect');  | 
| 
190
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
         return;  | 
| 
191
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     }  | 
| 
192
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
193
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
3
 | 
     my $request = delete $self->{request};  | 
| 
194
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
2
 | 
     my $session = delete $request->{session};  | 
| 
195
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
196
 | 
1
 | 
  
 50
  
 | 
  
 33
  
 | 
 
 | 
 
 | 
7
 | 
     if ( defined( $request->{reply} ) and ref( $request->{reply} ) eq 'ARRAY' )  | 
| 
197
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     {  | 
| 
198
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
1
 | 
         delete $request->{error};  | 
| 
199
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     }  | 
| 
200
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     else {  | 
| 
201
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
         $request->{error} = "No information received from remote host";  | 
| 
202
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     }  | 
| 
203
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
6
 | 
     $kernel->post( $session => $request->{event} => $request );  | 
| 
204
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
77
 | 
     undef;  | 
| 
205
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 }  | 
| 
206
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
207
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 sub _sock_input {  | 
| 
208
 | 
34
 | 
 
 | 
 
 | 
  
34
  
 | 
 
 | 
14218
 | 
     my ( $kernel, $self, $line ) = @_[ KERNEL, OBJECT, ARG0 ];  | 
| 
209
 | 
34
 | 
 
 | 
 
 | 
 
 | 
 
 | 
41
 | 
     push @{ $self->{request}->{reply} }, $line;  | 
| 
 
 | 
34
 | 
 
 | 
 
 | 
 
 | 
 
 | 
75
 | 
    | 
| 
210
 | 
34
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
106
 | 
     if ( my ($referral) = $line =~ /ReferralServer:\s+(.*)$/ ) {  | 
| 
211
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
         my ( $scheme, $authority, $path, $query, $fragment ) = $referral =~  | 
| 
212
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
           m|(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*)(?:\?([^#]*))?(?:#(.*))?|;  | 
| 
213
 | 
0
 | 
  
  0
  
 | 
  
  0
  
 | 
 
 | 
 
 | 
0
 | 
         return unless $scheme and $authority;  | 
| 
214
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
         $scheme = lc $scheme;  | 
| 
215
 | 
0
 | 
  
  0
  
 | 
 
 | 
 
 | 
 
 | 
0
 | 
         return unless $scheme =~ m'r?whois';  | 
| 
216
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
         my ( $host, $port ) = split /:/, $authority;  | 
| 
217
 | 
0
 | 
  
  0
  
 | 
 
 | 
 
 | 
 
 | 
0
 | 
         return if $host eq $self->{request}->{host};  | 
| 
218
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
         $self->{_referral} = $authority;  | 
| 
219
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     }  | 
| 
220
 | 
34
 | 
  
 50
  
 | 
  
 33
  
 | 
 
 | 
 
 | 
79
 | 
     if ( $self->{request}->{host} eq $self->{_dot_com}  | 
| 
221
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         and my ($other) = $line =~ /Whois Server:\s+(.*)\s*$/i )  | 
| 
222
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     {  | 
| 
223
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
         $self->{_referral} = $other;  | 
| 
224
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     }  | 
| 
225
 | 
34
 | 
 
 | 
 
 | 
 
 | 
 
 | 
68
 | 
     undef;  | 
| 
226
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 }  | 
| 
227
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
228
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 sub _time_out {  | 
| 
229
 | 
0
 | 
 
 | 
 
 | 
  
0
  
 | 
 
 | 
 
 | 
     my ( $kernel, $self ) = @_[ KERNEL, OBJECT ];  | 
| 
230
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     delete $self->{'socket'};  | 
| 
231
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     undef;  | 
| 
232
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 }  | 
| 
233
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
234
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 1;  | 
| 
235
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
236
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 __END__  |