9 use Data::Dump qw/dump/;
13 CWMP::Vendor - implement vendor specific logic into ACS server
20 my ( $self, $store, $uid, $queue ) = @_;
22 my $stored = $store->get_state( $uid );
24 return ( 'GetParameterNames', [ 'InternetGatewayDevice.', 1 ] )
25 if ! defined $stored->{ParameterInfo};
29 keys %{ $stored->{ParameterInfo} }
33 warn "# GetParameterNames ", dump( @params );
34 my $first = shift @params;
35 delete $stored->{ParameterInfo}->{$first};
38 $queue->enqueue( 'GetParameterNames', [ $_, 1 ] );
39 delete $stored->{ParameterInfo}->{ $_ };
41 $store->set_state( $uid, $stored );
43 return ( 'GetParameterNames', [ $first, 1 ] );
48 grep { ! exists $stored->{Parameter}->{$_} }
49 grep { ! m/\.$/ && ! m/NumberOfEntries/ }
50 keys %{ $stored->{ParameterInfo} }
53 warn "# GetParameterValues ", dump( @params );
54 my $first = shift @params;
56 my @chunk = splice @params, 0, 16; # FIXME 16 seems to be max
57 $queue->enqueue( 'GetParameterValues', [ @chunk ] );
60 return ( 'GetParameterValues', [ $first ] );
70 my ( $self, $store, $uid, $queue ) = @_;
72 my $stored = $store->get_state( $uid );
76 my $vendor = YAML::LoadFile 'vendor.yaml';
77 $vendor = $vendor->{Parameter} || die "no Parameter in vendor.yaml";
78 $stored = $stored->{Parameter} || warn "no Parameter in stored ", dump($stored);
80 warn "# vendor.yaml ",dump $vendor;
82 foreach my $n ( keys %$vendor ) {
83 if ( ! exists $stored->{$n} ) {
84 warn "# $uid missing $n\n";
86 } elsif ( $vendor->{$n} ne $stored->{$n}
87 && ( ! $tried->{$uid}->{$n}->{set} || $tried->{$uid}->{$n}->{set} ne $vendor->{$n} )
89 $queue->enqueue( 'SetParameterValues', { $n => $vendor->{$n} } );
91 $tried->{$uid}->{$n}->{set} = $vendor->{$n};
92 warn "# set $uid $n $stored->{$n} -> $vendor->{$n}\n";
93 } elsif ( $tried->{$uid}->{$n}->{set} eq $vendor->{$n} && $vendor->{$n} ne $stored->{$n} ) {
94 warn "ERROR $uid $n $stored->{$n} != $vendor->{$n}\n";
96 warn "# ok $uid $n = $stored->{$n}\n";
100 return ( 'GetParameterValues', [ @refresh ] ) if @refresh;
102 warn "# tried ",dump $tried;