X-Git-Url: http://git.rot13.org/?p=perl-cwmp.git;a=blobdiff_plain;f=lib%2FCWMP%2FRequest.pm;h=b85892d0bd27625b73332758c585a5fe3f3e5a66;hp=2456e5568c6d2f1916680b897fe6fec8a0b66a6a;hb=c65d35f21aa8ffd43d5c993f710cd2d6c377591f;hpb=397dff9ff9273c840cc59d5c2a6bde0540da7a4e diff --git a/lib/CWMP/Request.pm b/lib/CWMP/Request.pm index 2456e55..b85892d 100644 --- a/lib/CWMP/Request.pm +++ b/lib/CWMP/Request.pm @@ -7,6 +7,7 @@ use XML::Rules; use CWMP::Tree; use Data::Dump qw/dump/; use Carp qw/confess cluck/; +use Class::Trigger; =head1 NAME @@ -14,6 +15,8 @@ CWMP::Request - parse SOAP request metods =head1 CPE metods +All methods described below call triggers with same name + =cut my $tree = CWMP::Tree->new({ debug => 0 }); @@ -53,6 +56,7 @@ my $rules = [ # Name/Value tags must be case insnesitive my $value = (grep( /value/i, keys %$tag_hash ))[0]; $state->{Parameter}->{ _tag($tag_hash, 'Name', '_content') } = _tag($tag_hash, 'Value', '_content' ); + $state->{_trigger} = 'ParameterValue'; }, ]; @@ -66,6 +70,7 @@ Generate InformResponse to CPE push @$rules, 'Inform' => sub { $state->{_dispatch} = 'InformResponse'; # what reponse to call + $state->{_trigger} = 'Inform'; }; =head2 GetRPCMethodsResponse @@ -77,6 +82,7 @@ push @$rules, 'MethodList' => sub { my ($tag_name, $tag_hash, $context, $parent_data) = @_; $state->{MethodList} = _tag( $tag_hash, 'string' ); + $state->{_trigger} = 'GetRPCMethodsResponse'; }; =head2 GetParameterNamesResponse @@ -97,6 +103,8 @@ push @$rules, confess "can't eval $s : $@" if ($@); #warn "## state = dump( $state ), "\n"; + + $state->{_trigger} = 'GetParameterNamesResponse'; }; =head2 Fault @@ -111,6 +119,7 @@ push @$rules, FaultString => _tag( $tag_hash, 'FaultString', '_content' ), }; warn "FAULT: ", $state->{Fault}->{FaultCode}, " ", $state->{Fault}->{FaultString}, "\n"; + $state->{_trigger} = 'Fault'; }; my $parser = XML::Rules->new( @@ -142,6 +151,12 @@ sub parse { $state = {}; $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} ); return $state; }