package Net::Whois::Gateway::Server; use strict; use strict; use warnings; use Data::Dumper; use POE qw(Component::Server::TCP Filter::Reference Component::Client::Whois::Smart); our $VERSION = 0.07; our $DEBUG; my @jobs; my $tcp_server_id; my @local_ips; # starts Net::Whois::Gateway::Server sub start { my %params = @_; @local_ips = @{$params{local_ips}} if %params && $params{local_ips}; $POE::Component::Client::Whois::Smart::DEBUG = $DEBUG; POE::Component::Server::TCP->new( Alias => "sum_server", Port => delete $params{port} || 54321, ClientFilter => "POE::Filter::Reference", ClientInput => \&got_request, InlineStates => { return_result => \&return_result, return_ping => \&return_ping, }, ); print "Server started in DEBUG mode\n" if $DEBUG; $poe_kernel->run(); return 1; } # got client input, starting session for new job: sub got_request { my ($heap, $session, $input) = @_[HEAP, SESSION, ARG0]; my %params = %{$input->[0]}; if ($params{ping}) { $poe_kernel->yield("return_ping"); return; } $tcp_server_id = $session->ID; $params{omit_msg} = 2 unless defined $params{omit_msg}; $params{cache_dir} = '/tmp/whois-gateway-d' unless defined $params{cache_dir}; $params{cache_time} = 1 unless defined $params{cache_time}; $params{local_ips} = \@local_ips; delete $params{event} if $params{event}; POE::Component::Client::Whois::Smart->whois( %params, event => 'return_result', ); }; # return result to client sub return_result { my ($heap, $answer) = @_[HEAP, ARG0]; eval { $heap->{client}->put( $answer ); }; } # return result to client sub return_ping { my $heap = $_[HEAP]; eval { # Megahack! $heap->{client}->put( [ { 1 => 1 } ] ); }; } sub stop { $poe_kernel->stop(); } 1; =head1 NAME Net::Whois::Gateway::Server - whois gateway =head1 DESCRIPTION Implementation of whois gateway server based on POE::Component::Client::Whois::Smart. Supports all its features. Communication whois gateway server implemented in Net::Whois::Gateway::Client This module also installs whois-gateway-d daemon in /usr/bin (or something similar, depending on your system). Also see scripts/init.d/whois-gateway in ditsro, which should be placed into /etc/init.d/ =head1 SYNOPSIS use strict; use Net::Whois::Gateway::Server; my $port = 54321; my @local_ips = ('192.168.0.2', '192.168.0.3'); Net::Whois::Gateway::Server::start( port => $port, local_ips => \@local_ips, ); =head1 FUNCTIONS Support single function start() =item start() Starts whois gateway server, takes two optional arguments: =item port Defult port is 54321. =item local_ips List of local IP addresses to use when quereing whois servers. =head1 AUTHOR Sergey Kotenko =head1 SEE ALSO POE::Component::Client::Whois::Smart L Net::Whois::Gateway::Client L