From 71ebbb506367ad5efe47a8730eb42963e24f8483 Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Sun, 28 Oct 2007 19:47:30 +0000 Subject: [PATCH] another swiping change and bump to version [0.08] - implemented SetParameterValues (tests missing) - rename rest of misnamed files git-svn-id: https://perl-cwmp.googlecode.com/svn/trunk@177 836a5e1a-633d-0410-964b-294494ad4392 --- Makefile.PL | 2 +- bin/acs.pl | 10 +++- lib/CWMP/Methods.pm | 53 ++++++++++++++++++- t/20-methods.t | 33 +++++++----- t/{response => methods}/GetParameterNames.xml | 0 .../GetParameterValues.xml | 0 t/{response => methods}/GetRPCMethods.xml | 0 t/{response => methods}/InformResponse.xml | 0 t/{response => methods}/Reboot.xml | 0 t/methods/SetParameterValues.xml | 24 +++++++++ 10 files changed, 104 insertions(+), 18 deletions(-) rename t/{response => methods}/GetParameterNames.xml (100%) rename t/{response => methods}/GetParameterValues.xml (100%) rename t/{response => methods}/GetRPCMethods.xml (100%) rename t/{response => methods}/InformResponse.xml (100%) rename t/{response => methods}/Reboot.xml (100%) create mode 100644 t/methods/SetParameterValues.xml diff --git a/Makefile.PL b/Makefile.PL index 31c79c4..9d8a82a 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -3,7 +3,7 @@ use lib './lib'; use inc::Module::Install; name 'CWMP'; -version '0.07'; +version '0.08'; license 'GPL'; requires 'Net::Server'; requires 'HTTP::Daemon'; diff --git a/bin/acs.pl b/bin/acs.pl index 461aca8..d8e923d 100755 --- a/bin/acs.pl +++ b/bin/acs.pl @@ -32,11 +32,17 @@ my $server = CWMP::Server->new({ debug => $debug, default_queue => [ 'GetRPCMethods', - [ 'GetParameterNames', 'InternetGatewayDevice.DeviceInfo.SerialNumber', 0 ], - [ 'GetParameterNames', 'InternetGatewayDevice.DeviceInfo.', 1 ], + 'GetParameterNames', +# [ 'GetParameterNames', 'InternetGatewayDevice.DeviceInfo.SerialNumber', 0 ], +# [ 'GetParameterNames', 'InternetGatewayDevice.DeviceInfo.', 1 ], [ 'GetParameterValues', 'InternetGatewayDevice.DeviceInfo.SerialNumber', 'InternetGatewayDevice.DeviceInfo.VendorConfigFile.', + 'InternetGatewayDevice.DeviceInfo.X_000E50_Country', + ], + [ 'SetParameterValues', + 'InternetGatewayDevice.DeviceInfo.ProvisioningCode' => 'test provision', +# 'InternetGatewayDevice.DeviceInfo.X_000E50_Country' => 1, ], # 'Reboot', ], diff --git a/lib/CWMP/Methods.pm b/lib/CWMP/Methods.pm index e50b923..ab77c99 100644 --- a/lib/CWMP/Methods.pm +++ b/lib/CWMP/Methods.pm @@ -84,7 +84,56 @@ sub GetRPCMethods { =head2 SetParameterValues -B + $method->SetParameterValues( $state, + param1 => 'value1', + param2 => 'value2', + ... + ); + +It doesn't support base64 encoding of values yet. + +To preserve data, it does support repeatable parametar names. +Behaviour on this is not defined in protocol. + +=cut + +sub SetParameterValues { + my $self = shift; + my $state = shift; + + confess "SetParameterValues needs parameters" unless @_; + + my @params = @_; + + my ( @names, @values ); + + while ( @_ ) { + push @names, shift @_; + push @values, shift @_; + } + + confess "can't convert params ", dump( @params ), " to name/value pairs" unless $#names == $#values; + + warn "# SetParameterValues", dump( @params ), "\n" if $self->debug; + + $self->xml( $state, sub { + my ( $X, $state ) = @_; + + $X->SetParameterValues( $cwmp, + $X->ParameterList( $cwmp, + $X->ParameterNames( $cwmp, + map { + $X->ParameterValueStruct( $cwmp, + $X->Name( $cwmp, $_ ), + $X->Value( $cwmp, shift @values ) + ) + } @names + ) + ) + ); + }); +} + =head2 GetParameterValues @@ -96,7 +145,7 @@ sub GetParameterValues { my $self = shift; my $state = shift; my @ParameterNames = @_; - confess "need ParameterNames" unless @ParameterNames; + confess "GetParameterValues need ParameterNames" unless @ParameterNames; warn "# GetParameterValues", dump( @ParameterNames ), "\n" if $self->debug; $self->xml( $state, sub { diff --git a/t/20-methods.t b/t/20-methods.t index ac09cb9..f81805c 100755 --- a/t/20-methods.t +++ b/t/20-methods.t @@ -4,7 +4,7 @@ use warnings; my $debug = shift @ARGV; -use Test::More tests => 14; +use Test::More tests => 16; use Data::Dump qw/dump/; use Cwd qw/abs_path/; use File::Slurp; @@ -17,20 +17,20 @@ BEGIN { ok(my $abs_path = abs_path($0), "abs_path"); $abs_path =~ s!/[^/]*$!/!; #!fix-vim -ok( my $response = CWMP::Methods->new({ debug => $debug }), 'new' ); -isa_ok( $response, 'CWMP::Methods' ); +ok( my $method = CWMP::Methods->new({ debug => $debug }), 'new' ); +isa_ok( $method, 'CWMP::Methods' ); -sub check_response { +sub check_method { my $command = shift || die "no command?"; my $state = { ID => 42, }; - diag "check_response $command",dump( 'state', @_ ) if $debug; - ok( my $xml = $response->$command( $state, @_ ), "generate response $command" . dump(@_) ); + diag "check_method $command",dump( 'state', @_ ) if $debug; + ok( my $xml = $method->$command( $state, @_ ), "generate method $command" . dump(@_) ); - my $file = "$abs_path/response/$command.xml"; + my $file = "$abs_path/methods/$command.xml"; if ( ! -e $file ) { diag "creating $file"; @@ -39,11 +39,18 @@ sub check_response { my $template_xml = read_file( $file ) || die "can't read template xml $file: $!"; - is( $xml, $template_xml, "compare $command" ); + is( $xml, $template_xml, "compare $file" ); } -check_response( 'InformResponse' ); -check_response( 'GetRPCMethods' ); -check_response( 'Reboot' ); -check_response( 'GetParameterNames', 'InternetGatewayDevice.DeviceInfo.SerialNumber' ); -check_response( 'GetParameterValues', 'InternetGatewayDevice.DeviceInfo.SerialNumber', 'InternetGatewayDevice.DeviceInfo.VendorConfigFile.' ); +check_method( 'InformResponse' ); +check_method( 'GetRPCMethods' ); +check_method( 'Reboot' ); +check_method( 'SetParameterValues', + 'InternetGatewayDevice.DeviceInfo.ProvisioningCode' => 'test provision', + 'InternetGatewayDevice.DeviceInfo.X_000E50_Country' => 42, +); +check_method( 'GetParameterNames', 'InternetGatewayDevice.DeviceInfo.SerialNumber' ); +check_method( 'GetParameterValues', + 'InternetGatewayDevice.DeviceInfo.SerialNumber', + 'InternetGatewayDevice.DeviceInfo.VendorConfigFile.', +); diff --git a/t/response/GetParameterNames.xml b/t/methods/GetParameterNames.xml similarity index 100% rename from t/response/GetParameterNames.xml rename to t/methods/GetParameterNames.xml diff --git a/t/response/GetParameterValues.xml b/t/methods/GetParameterValues.xml similarity index 100% rename from t/response/GetParameterValues.xml rename to t/methods/GetParameterValues.xml diff --git a/t/response/GetRPCMethods.xml b/t/methods/GetRPCMethods.xml similarity index 100% rename from t/response/GetRPCMethods.xml rename to t/methods/GetRPCMethods.xml diff --git a/t/response/InformResponse.xml b/t/methods/InformResponse.xml similarity index 100% rename from t/response/InformResponse.xml rename to t/methods/InformResponse.xml diff --git a/t/response/Reboot.xml b/t/methods/Reboot.xml similarity index 100% rename from t/response/Reboot.xml rename to t/methods/Reboot.xml diff --git a/t/methods/SetParameterValues.xml b/t/methods/SetParameterValues.xml new file mode 100644 index 0000000..2bf5ab3 --- /dev/null +++ b/t/methods/SetParameterValues.xml @@ -0,0 +1,24 @@ + + + 42 + 0 + + + + + + + InternetGatewayDevice.DeviceInfo.ProvisioningCode + test provision + + + InternetGatewayDevice.DeviceInfo.X_000E50_Country + 42 + + + + + + \ No newline at end of file -- 2.20.1