X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=lib%2FCWMP%2FSession.pm;h=ab65e4de14aa0727b4a0e652d6bb9e2c573ead96;hb=052cf2e1e3d3333d1766e89277521a88857fd821;hp=02ff046258ab9cde69410502273ea3bd2e96221b;hpb=d9e0cf8ed6b40d26c7eef85bac1a8360a14b1bb8;p=perl-cwmp.git diff --git a/lib/CWMP/Session.pm b/lib/CWMP/Session.pm index 02ff046..ab65e4d 100644 --- a/lib/CWMP/Session.pm +++ b/lib/CWMP/Session.pm @@ -70,14 +70,17 @@ my $vendor_data = { 'InternetGatewayDevice.DeviceInfo.ProvisioningCode' => 'test provision', }; +our $set_tried; + sub vendor_hook { - my ( $self, $stored, $queue ) = @_; - warn "# vendor_hook ",dump($stored) if $self->debug > 2; + my ( $self, $uid, $stored, $queue ) = @_; + warn "# vendor_hook $uid ",dump($stored) if $self->debug > 2; my @refresh; foreach my $n ( keys %$vendor_data ) { if ( $vendor_data->{$n} ne $stored->{$n} ) { + next if $set_tried->{$uid}->{$n}++; push @refresh, $n; $queue->enqueue( 'SetParameterValues', { $n => $vendor_data->{$n} } ); } @@ -85,7 +88,7 @@ sub vendor_hook { if ( @refresh ) { $queue->enqueue( 'GetParameterValues', [ @refresh ] ); - warn "vendor_hook SetParameterValues ", dump( @refresh ); + warn "vendor_hook $uid SetParameterValues ", dump( @refresh ); return $self->dispatch( 'GetParameterValues', [ @refresh ] ); } @@ -169,7 +172,10 @@ sub process_request { if ( ! defined $stored->{ParameterInfo} ) { $xml = $self->dispatch( 'GetParameterNames', [ 'InternetGatewayDevice.', 1 ] ); } else { - my @params = grep { m/\.$/ } keys %{ $stored->{ParameterInfo} }; + my @params = + grep { m/\.$/ && ! m/\.\d+\.$/ } + keys %{ $stored->{ParameterInfo} } + ; if ( @params ) { warn "# GetParameterNames ", dump( @params ); my $first = shift @params; @@ -196,7 +202,7 @@ sub process_request { $queue->enqueue( 'GetParameterValues', [ @chunk ] ); } - } elsif ( $xml = $self->vendor_hook( $stored, $queue ) ) { + } elsif ( $xml = $self->vendor_hook( $uid, $stored, $queue ) ) { warn "vendor_hook triggered\n";