… | |
… | |
81 | my $peername = shift; |
81 | my $peername = shift; |
82 | my $fh = shift; |
82 | my $fh = shift; |
83 | my $self = bless { fh => $fh }, $class; |
83 | my $self = bless { fh => $fh }, $class; |
84 | my (undef, $iaddr) = unpack_sockaddr_in $peername |
84 | my (undef, $iaddr) = unpack_sockaddr_in $peername |
85 | or $self->err(500, "unable to decode peername"); |
85 | or $self->err(500, "unable to decode peername"); |
|
|
86 | |
86 | $self->{remote_addr} = inet_ntoa $iaddr; |
87 | $self->{remote_addr} = inet_ntoa $iaddr; |
87 | |
88 | |
88 | # enter ourselves into various lists |
89 | # enter ourselves into various lists |
89 | weaken ($conn{$self->{remote_addr}}{$self*1} = $self); |
90 | weaken ($conn{$self->{remote_addr}}{$self*1} = $self); |
90 | |
91 | |
… | |
… | |
244 | |
245 | |
245 | $self->{name} = $uri; |
246 | $self->{name} = $uri; |
246 | |
247 | |
247 | # now do the path mapping |
248 | # now do the path mapping |
248 | $self->{path} = "$::DOCROOT/$host$uri"; |
249 | $self->{path} = "$::DOCROOT/$host$uri"; |
|
|
250 | |
|
|
251 | $self->access_check; |
249 | } |
252 | } |
250 | |
253 | |
251 | sub server_address { |
254 | sub server_address { |
252 | my $self = shift; |
255 | my $self = shift; |
253 | my ($port, $iaddr) = unpack_sockaddr_in $self->{fh}->getsockname |
256 | my ($port, $iaddr) = unpack_sockaddr_in $self->{fh}->getsockname |
… | |
… | |
412 | } |
415 | } |
413 | |
416 | |
414 | close $fh; |
417 | close $fh; |
415 | } |
418 | } |
416 | |
419 | |
|
|
420 | sub access_check { |
|
|
421 | my $self = shift; |
|
|
422 | my $whois = ::ip_request($self->{remote_addr}); |
|
|
423 | |
|
|
424 | if ($whois =~ /^\*cy: (\S+)/m) { |
|
|
425 | $self->slog(9, "COUNTRY($1)"); |
|
|
426 | } else { |
|
|
427 | $self->slog(9, "no country($whois)"); |
|
|
428 | } |
|
|
429 | } |
|
|
430 | |
417 | 1; |
431 | 1; |