massive amount of tweaks including replacement of YAML with YAML::Syck
and scoping all over the place
git-svn-id: https://perl-cwmp.googlecode.com/svn/trunk@222
836a5e1a-633d-0410-964b-
294494ad4392
requires 'Getopt::Long';
#requires 'Term::Shelly' => '0.03';
requires 'Module::Pluggable';
requires 'Getopt::Long';
#requires 'Term::Shelly' => '0.03';
requires 'Module::Pluggable';
requires 'Hash::Merge';
requires 'IPC::DirQueue';
requires 'File::Spec';
requires 'Hash::Merge';
requires 'IPC::DirQueue';
requires 'File::Spec';
build_requires 'Test::More';
features(
build_requires 'Test::More';
features(
+ 'CWMP::Store::YAML' => [
+ -default => 1,
+ recommends('YAML::Syck' => 0.91),
+ ],
+ 'CWMP::Store::JSON' => [
+ -default => 1,
+ recommends('JSON::XS'),
+ ],
'Command-line access to modems (tcli.pl)' => [
-default => 1,
recommends('Expect'),
'Command-line access to modems (tcli.pl)' => [
-default => 1,
recommends('Expect'),
use Data::Dump qw/dump/;
use File::Find;
use Data::Dump qw/dump/;
use File::Find;
-use Devel::LeakTrace::Fast;
-
my $port = 3333;
my $debug = 0;
my $store_path = './';
my $port = 3333;
my $debug = 0;
my $store_path = './';
use strict;
use XML::Rules;
use strict;
use XML::Rules;
use Data::Dump qw/dump/;
use Carp qw/confess cluck/;
use Class::Trigger;
use Data::Dump qw/dump/;
use Carp qw/confess cluck/;
use Class::Trigger;
our $state; # FIXME check this!
our $state; # FIXME check this!
#_default => 'content trim',
x_default => sub {
my ($tag_name, $tag_hash, $context, $parent_data) = @_;
#_default => 'content trim',
x_default => sub {
my ($tag_name, $tag_hash, $context, $parent_data) = @_;
-sub parse {
- my $self = shift;
-
- my $xml = shift || confess "no xml?";
-
- my $parser = XML::Rules->new(
+my $parser = XML::Rules->new(
# start_rules => [
# '^division_name,fax' => 'skip',
# ],
# start_rules => [
# '^division_name,fax' => 'skip',
# ],
'urn:dslforum-org:cwmp-1-0' => '',
},
rules => $rules,
'urn:dslforum-org:cwmp-1-0' => '',
},
rules => $rules,
+);
+
+sub parse {
+ my $self = shift;
+
+ my $xml = shift || confess "no xml?";
use HTTP::Daemon;
use Data::Dump qw/dump/;
use HTTP::Daemon;
use Data::Dump qw/dump/;
-use Carp qw/confess cluck croak/;
+use Carp qw/carp confess cluck croak/;
use File::Slurp;
use CWMP::Request;
use CWMP::Methods;
use CWMP::Store;
use File::Slurp;
use CWMP::Request;
use CWMP::Methods;
use CWMP::Store;
+#use Devel::LeakTrace::Fast;
+
=head1 NAME
CWMP::Session - implement logic of CWMP protocol
=head1 NAME
CWMP::Session - implement logic of CWMP protocol
# solution from http://use.perl.org/~Matts/journal/12896
${*$sock}{'httpd_daemon'} = HTTP::Daemon->new;
# solution from http://use.perl.org/~Matts/journal/12896
${*$sock}{'httpd_daemon'} = HTTP::Daemon->new;
- my $r = $sock->get_request || confess "can't get_request";
+ my $r = $sock->get_request;
+
+ if ( ! $r ) {
+ carp "can't get_request";
+ return 0;
+ }
} elsif ( $job = $queue->dequeue ) {
$xml = $self->dispatch( $job->dispatch );
} elsif ( $size == 0 ) {
} elsif ( $job = $queue->dequeue ) {
$xml = $self->dispatch( $job->dispatch );
} elsif ( $size == 0 ) {
- warn ">>> no more queued commands, closing connection $to_uid";
- return 0;
+ warn ">>> no more queued commands, no client pending, closing connection $to_uid";
+ $sock->close;
+ return;
} else {
warn ">>> empty response $to_uid";
$state->{NoMoreRequests} = 1;
} else {
warn ">>> empty response $to_uid";
$state->{NoMoreRequests} = 1;
use warnings;
use Data::Dump qw/dump/;
use warnings;
use Data::Dump qw/dump/;
-use YAML qw/LoadFile DumpFile/;
use Hash::Merge qw/merge/;
use Carp qw/confess/;
use Hash::Merge qw/merge/;
use Carp qw/confess/;
my $serial2ip = {
'CP0636JT3SH' => '10.0.0.1',
my $serial2ip = {
'CP0636JT3SH' => '10.0.0.1',
-use Test::More tests => 19;
+use Test::More tests => 20;
use Data::Dump qw/dump/;
use Cwd qw/abs_path/;
use blib;
use Data::Dump qw/dump/;
use Cwd qw/abs_path/;
use blib;
_dispatch => "InformResponse",
};
_dispatch => "InformResponse",
};
-is_deeply( $store->current_store->get_state( 'CP0644JTHJ4' ), $state, 'store->current_store->get_state' );
+ok( my $store_state = $store->current_store->get_state( 'CP0644JTHJ4' ), 'get_state' );
+
+is_deeply( $store_state, $state, 'store->current_store->get_state' );