another fix for refresh and report errors
[perl-cwmp.git] / lib / CWMP / Vendor.pm
index 8712f0a..9613528 100644 (file)
@@ -14,7 +14,7 @@ CWMP::Vendor - implement vendor specific logic into ACS server
 
 =cut
 
-my $debug = 0;
+my $debug = 1;
 
 sub all_parameters {
        my ( $self, $store, $uid, $queue ) = @_;
@@ -64,7 +64,7 @@ sub all_parameters {
        return;
 }
 
-our $set_tried;
+our $tried;
 
 sub vendor_config {
        my ( $self, $store, $uid, $queue ) = @_;
@@ -74,21 +74,32 @@ sub vendor_config {
        my @refresh;
 
        my $vendor = YAML::LoadFile 'vendor.yaml';
-       $vendor = $vendor->{Parameter} || die "no Parameter in vendor.yaml";
+       $vendor = $vendor->{Parameter} || die  "no Parameter in vendor.yaml";
+       $stored = $stored->{Parameter} || warn "no Parameter in stored ", dump($stored);
+
+       warn "# vendor.yaml ",dump $vendor;
 
        foreach my $n ( keys %$vendor ) {
-               if ( defined $stored->{$n} && $vendor->{$n} ne $stored->{$n} ) {
-                       next if $set_tried->{$uid}->{$n}++;
+               if ( ! exists $stored->{$n} ) {
+                       warn "# $uid missing $n\n";
                        push @refresh, $n;
+               } elsif ( $vendor->{$n} ne $stored->{$n}
+                       && ( ! $tried->{$uid}->{$n}->{set} || $tried->{$uid}->{$n}->{set} ne $vendor->{$n} )
+               ) {
                        $queue->enqueue( 'SetParameterValues', { $n => $vendor->{$n} } );
+                       push @refresh, $n;
+                       $tried->{$uid}->{$n}->{set} = $vendor->{$n};
+                       warn "# set $uid $n $stored->{$n} -> $vendor->{$n}\n";
+               } elsif ( $tried->{$uid}->{$n}->{set} eq $vendor->{$n} && $vendor->{$n} ne $stored->{$n} ) {
+                       warn "ERROR $uid $n $stored->{$n} != $vendor->{$n}\n";
+               } else {
+                       warn "# ok $uid $n = $stored->{$n}\n";
                }
        }
 
-       if ( @refresh ) {
-               $queue->enqueue( 'GetParameterValues', [ @refresh ] );
-               warn "vendor_hook $uid SetParameterValues ", dump( @refresh );
-               return ( 'GetParameterValues', [ @refresh ] );
-       }
+       return ( 'GetParameterValues', [ @refresh ] ) if @refresh;
+
+       warn "# tried ",dump $tried;
 
        return;
 }