--- google/lib/CWMP/Server.pm 2007/06/22 15:54:43 83 +++ google/lib/CWMP/Server.pm 2007/06/22 18:25:24 84 @@ -4,13 +4,15 @@ use strict; use warnings; - use base qw/Class::Accessor/; __PACKAGE__->mk_accessors( qw/ port store_path default_queue +background debug + +server / ); use CWMP::Session; @@ -30,6 +32,7 @@ port => 3333, store_path => 'state.db', default_queue => [ qw/GetRPCMethods GetParameterNames/ ], + background => 1, debug => 1 }); @@ -59,51 +62,97 @@ warn "created ", __PACKAGE__, "(", dump( @_ ), ") object\n" if $self->debug; + warn "ACS waiting for request on port ", $self->port, "\n"; + + $self->debug( 0 ) unless $self->debug; + warn "## debug level: ", $self->debug, "\n" if $self->debug; + + $self->server( + CWMP::Server::Helper->new({ + proto => 'tcp', + port => $self->port, + default_queue => $self->default_queue, + store_path => $self->store_path, + debug => $self->debug, + background => $self->background, + }) + ); + return $self; } =head2 run - $server->run(); - =cut sub run { my $self = shift; - my $listen = IO::Socket::INET->new( - Listen => 5, -# LocalAddr => 'localhost', - LocalPort => $self->port, - Proto => 'tcp', - Blocking => 1, - ReuseAddr => 1, - ); + $self->server->run; +} - warn "ACS waiting for request on port ", $self->port; +package CWMP::Server::Helper; - $self->debug( 0 ) unless $self->debug; - warn "## debug level: ", $self->debug, "\n" if $self->debug; +use warnings; +use strict; - warn $self->default_queue ? " queue ( " . join(",",@{$self->default_queue}) . " )" : "", - "\n"; +use base qw/Net::Server/; +use Carp qw/confess/; +use Data::Dump qw/dump/; - while ( my $sock = $listen->accept ) { - $sock->autoflush(1); +sub options { + my $self = shift; + my $prop = $self->{'server'}; + my $template = shift; + + ### setup options in the parent classes + $self->SUPER::options($template); + + # new single-value options + foreach my $p ( qw/ store_path debug / ) { + $prop->{ $p } ||= undef; + $template->{ $p } = \$prop->{ $p }; + } - my $session = CWMP::Session->new({ - sock => $sock, - queue => $self->default_queue, - store_path => $self->store_path, - debug => $self->debug, - }) || confess "can't create session"; + # new multi-value options + foreach my $p ( qw/ default_queue / ) { + $prop->{ $p } ||= []; + $template->{ $p } = $prop->{ $p }; + } + + warn dump( $prop ); +} - while ( $session->process_request ) { - warn "...another one bites the dust...\n"; - } - warn "...returning to accepting new connections\n"; +=head2 process_request + +=cut + +sub process_request { + my $self = shift; + + my $prop = $self->{server}; + confess "no server in ", ref( $self ) unless $prop; + my $sock = $prop->{client}; + confess "no sock in ", ref( $self ) unless $sock; + + warn "default CPE queue ( " . join(",",@{$prop->{default_queue}}) . " )" if defined($prop->{default_queue}); + + warn "sock = ",dump( $sock ); + + my $session = CWMP::Session->new({ + sock => $sock, + queue => $prop->{default_queue}, + store_path => $prop->{store_path}, + debug => $prop->{debug}, + }) || confess "can't create session"; + + while ( $session->process_request ) { + warn "...another one bites the dust...\n"; } + + warn "...returning to accepting new connections\n"; + } 1;