X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=lib%2FCWMP%2FRequest.pm;h=0cea935227fb4d15a7ebbf58a1f5fe1956324a1f;hb=df6a32df87becf896cccaae4b24cb88461391ffe;hp=5ae478e57ef8d8cd35c2cb95ad26c0d5eacfde8d;hpb=d4b4202a2f21c686eb6bb6c9efaf49cf3ed7c954;p=perl-cwmp.git diff --git a/lib/CWMP/Request.pm b/lib/CWMP/Request.pm index 5ae478e..0cea935 100644 --- a/lib/CWMP/Request.pm +++ b/lib/CWMP/Request.pm @@ -8,6 +8,8 @@ use Data::Dump qw/dump/; use Carp qw/confess cluck/; use Class::Trigger; +#use Devel::LeakTrace::Fast; + =head1 NAME CWMP::Request - parse SOAP request metods @@ -29,6 +31,7 @@ our $rules = [ 'ID' => sub { my ($tag_name, $tag_hash, $context, $parent_data) = @_; $state->{ID} = $tag_hash->{_content}; + chomp( $state->{ID} ); }, 'DeviceId' => sub { @@ -101,6 +104,28 @@ push @$rules, $state->{_trigger} = 'GetParameterNamesResponse'; }; +=head2 GetParameterAttributesResponse + +=cut + +push @$rules, + 'ParameterAttributeStruct' => sub { + my ($tag_name, $tag_hash, $context, $parent_data) = @_; + warn dump( $tag_name, $tag_hash, $context ); + + confess "need state" unless ( $state ); # don't remove! + + my $name = _tag($tag_hash, 'Name', '_content'); + + + $state->{ParameterAttribute}->{$name} = { + Notification => _tag($tag_hash, 'Notification', '_content' ), + AccessList => _tag($tag_hash, 'AccessList', 'string' ), + }; + + $state->{_trigger} = 'GetParameterAttributesResponse'; + }; + =head2 Fault =cut @@ -124,7 +149,14 @@ push @$rules, =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', # ], @@ -136,22 +168,20 @@ my $parser = XML::Rules->new( '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 ); } - # XXX don't propagate _trigger (useful?) - delete( $state->{_trigger} ); + # XXX propagate _trigger (useful for symlinks) + return $state; }