requires 'Net::HTTP';
requires 'Cwd';
requires 'File::Slurp';
-requires 'DBM::Deep';
-requires 'Clone'; # CWMP::Store::DBMDeep
requires 'Getopt::Long';
#requires 'Term::Shelly' => '0.03';
requires 'Module::Pluggable';
use Data::Dump qw/dump/;
use File::Find;
-use Devel::LeakTrace::Fast;
+#use Devel::LeakTrace::Fast;
my $port = 3333;
my $debug = 0;
use base qw/Class::Accessor/;
__PACKAGE__->mk_accessors( qw/
id
+dir
+clean
debug
/ );
#use Carp qw/confess/;
use Data::Dump qw/dump/;
use File::Spec;
-use File::Path qw/mkpath/;
+use File::Path qw/mkpath rmtree/;
use IPC::DirQueue;
-use YAML qw/Dump/;
+use YAML::Syck qw/Dump/;
use Carp qw/confess/;
+#use Devel::LeakTrace::Fast;
+
=head1 NAME
CWMP::Queue - implement commands queue for CPE
my $obj = CWMP::Queue->new({
id => 'CPE_serial_number',
+ dir => 'queue',
+ clean => 1,
debug => 1
});
warn "created ", __PACKAGE__, "(", dump( @_ ), ") object\n" if $self->debug;
- my $dir = File::Spec->catfile('queue',$self->id);
+ my $dir = File::Spec->catfile( $self->dir || 'queue', $self->id );
+
+ if ( -e $dir && $self->clean ) {
+ rmtree $dir || die "can't remove $dir: $!";
+ warn "## clean $dir\n" if $self->debug;
+ }
if ( ! -e $dir ) {
mkpath $dir || die "can't create $dir: $!";
sub finish {
my $self = shift;
$self->job->finish;
+ return 1;
}
1;
=cut
-my $parser = XML::Rules->new(
+sub parse {
+ my $self = shift;
+
+ my $xml = shift || confess "no xml?";
+
+ $state = {};
+
+ my $parser = XML::Rules->new(
# start_rules => [
# '^division_name,fax' => 'skip',
# ],
'urn:dslforum-org:cwmp-1-0' => '',
},
rules => $rules,
-);
+ );
-sub parse {
- my $self = shift;
+ warn "## created $parser\n";
- my $xml = shift || confess "no xml?";
+ $parser->parsestring( $xml );
- $state = {};
+ undef $parser;
- $parser->parsestring( $xml );
if ( my $trigger = $state->{_trigger} ) {
warn "### call_trigger( $trigger )\n";
$self->call_trigger( $trigger, $state );
+++ /dev/null
-# Dobrica Pavlinusic, <dpavlin@rot13.org> 10/26/07 21:37:12 CEST
-package CWMP::Store::DBMDeep;
-
-use strict;
-use warnings;
-
-use DBM::Deep;
-use Data::Dump qw/dump/;
-use Clone qw/clone/;
-use Carp qw/confess/;
-
-=head1 NAME
-
-CWMP::Store::DBMDeep - use DBM::Deep as storage
-
-=head1 METHODS
-
-=head2 open
-
- $store->open({
- path => 'var/',
- debug => 1,
- clean => 1,
- });
-
-=cut
-
-my $db;
-
-my $debug = 0;
-
-sub open {
- my $self = shift;
-
- my $args = shift;
-
- $debug = $args->{debug};
- my $path = $args->{path} || confess "no path?";
-
- warn "open ",dump( $args ) if $debug;
-
- $path = "$path/state.db" if ( -d $args->{path} );
-
- if ( $args->{clean} && -e $path ) {
- warn "removed old $path\n";
- unlink $path || die "can't remove $path: $!";
- }
-
- $db = DBM::Deep->new(
- file => $path,
- locking => 1,
- autoflush => 1,
- ) || confess "can't open $path: $!";
-
-}
-
-=head2 update_uid_state
-
- $store->update_uid_state( $uid, $state );
-
-=cut
-
-sub update_uid_state {
- my ( $self, $uid, $state ) = @_;
-
- my $data = clone( $state );
-
- if ( my $o = $db->get( $uid ) ) {
- warn "## update state of $uid\n" if $debug;
- $o->import( $data );
- } else {
- warn "## create new state for $uid\n" if $debug;
- $db->put( $uid => $data );
- }
-}
-
-=head2 get_state
-
- $store->get_state( $uid );
-
-=cut
-
-sub get_state {
- my ( $self, $uid ) = @_;
-
- if ( my $state = $db->get( $uid ) ) {
- $state->export;
- }
-}
-
-=head2 all_uids
-
- my @uids = $store->all_uids;
-
-=cut
-
-sub all_uids {
- my $self = shift;
- return keys %$db;
-}
-
-1;
=head2 update_uid_state
- $store->update_uid_state( $uid, $state );
+ my $new_state = $store->update_uid_state( $uid, $state );
=cut
$self->save_hash( $file, $combined ) || die "can't write $file: $!";
+ return $combined;
}
=head2 get_state
use Test::More tests => 4;
use blib;
+#use Devel::LeakTrace::Fast;
+
BEGIN {
use_ok('CWMP::Server');
use_ok('CWMP::Request');
my $debug = shift @ARGV;
-use Test::More tests => 47;
+use Test::More tests => 32;
use Data::Dump qw/dump/;
use Cwd qw/abs_path/;
use lib 'lib';
BEGIN {
use_ok('CWMP::Store');
- use_ok('CWMP::Store::DBMDeep');
use_ok('CWMP::Store::YAML');
use_ok('CWMP::Store::JSON');
}
is_deeply( [ $store->all_uids ], [ 123456, 99999 ], 'all_uids' );
- undef $store;
-
}
# now test all stores
-test_store('DBMDeep');
test_store('YAML');
test_store('JSON');
my $debug = shift @ARGV;
-use Test::More tests => 255;
+use Test::More tests => 256;
use Data::Dump qw/dump/;
use lib 'lib';
+use Devel::LeakTrace::Fast;
+
BEGIN {
use_ok('CWMP::Queue');
}
-#use Cwd qw/abs_path/;
-#ok(my $abs_path = abs_path($0), "abs_path");
-#$abs_path =~ s!/[^/]*$!/!; #!fix-vim
+use Cwd qw/abs_path/;
+ok(my $abs_path = abs_path($0), "abs_path");
+$abs_path =~ s!/[^/]*$!/!; #!fix-vim
ok( my $obj = CWMP::Queue->new({
id => 'test',
+ dir => "$abs_path/queue",
+ clean => 1,
debug => $debug,
}), 'new' );
isa_ok( $obj, 'CWMP::Queue' );
use File::Slurp;
use blib;
+#use Devel::LeakTrace::Fast;
+
BEGIN {
use_ok('CWMP::Request');
}
use File::Slurp;
use blib;
+use Devel::LeakTrace::Fast;
+
BEGIN {
use_ok('CWMP::Methods');
}