r218@brr: dpavlin | 2007-11-14 22:54:48 +0100
[perl-cwmp.git] / lib / CWMP / Request.pm
index 2456e55..b85892d 100644 (file)
@@ -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;
 }