ignore NumberOfEntries
[perl-cwmp.git] / lib / CWMP / Request.pm
index 6649688..07b93f4 100644 (file)
@@ -31,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 {
@@ -39,7 +40,7 @@ our $rules =  [
                                next if $name eq '_content';
                                my $key = $name;
                                $key =~ s/^\w+://;      # stip namespace
-                               $state->{DeviceID}->{ $key } = _tag( $tag_hash, $name, '_content' );
+                               $state->{DeviceId}->{ $key } = _tag( $tag_hash, $name, '_content' );
                        }
                },
                'EventStruct' => sub {
@@ -103,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
@@ -126,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',
 #              ],
@@ -138,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;
 }