implemented correct GetParameterValues which unrolls ParameterNames into xsd:strings
authorDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 28 Oct 2007 15:43:07 +0000 (15:43 +0000)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 28 Oct 2007 15:43:07 +0000 (15:43 +0000)
git-svn-id: https://perl-cwmp.googlecode.com/svn/trunk@171 836a5e1a-633d-0410-964b-294494ad4392

bin/acs.pl
lib/CWMP/Response.pm
lib/CWMP/Store.pm
lib/CWMP/Tree.pm
t/20-response.t
t/response/GetParameterValues.xml

index c472fd6..461aca8 100755 (executable)
@@ -33,7 +33,11 @@ my $server = CWMP::Server->new({
        default_queue => [
                'GetRPCMethods',
                [ 'GetParameterNames', 'InternetGatewayDevice.DeviceInfo.SerialNumber', 0 ],
-               [ 'GetParameterValues', 'InternetGatewayDevice.DeviceInfo.SerialNumber', 1 ],
+               [ 'GetParameterNames', 'InternetGatewayDevice.DeviceInfo.', 1 ],
+               [ 'GetParameterValues',
+                       'InternetGatewayDevice.DeviceInfo.SerialNumber',
+                       'InternetGatewayDevice.DeviceInfo.VendorConfigFile.',
+               ],
 #              'Reboot',
        ],
 });
index 353a194..4094114 100644 (file)
@@ -34,7 +34,8 @@ sub new {
 
 
 my $cwmp = [ cwmp => 'urn:dslforum-org:cwmp-1-0' ];
-my $soap = [ soap => "http://schemas.xmlsoap.org/soap/envelope/" ];
+my $soap = [ soap => 'http://schemas.xmlsoap.org/soap/envelope/' ];
+my $xsd  = [ xsd  => 'http://www.w3.org/2001/XMLSchema-instance' ];
 
 =head2 InformResponse
 
@@ -103,21 +104,26 @@ sub GetParameterNames {
 
 =head2 GetParameterValues
 
-  $response->GetParameterValues( $state, $ParameterPath, $NextLevel );
+  $response->GetParameterValues( $state, $ParameterNames );
 
 =cut
 
 sub GetParameterValues {
-       my ( $self, $state, $ParameterPath, $NextLevel ) = @_;
-       $ParameterPath ||= '';  # all
-       $NextLevel ||= 0;               # all
-       warn "# GetParameterValues( '$ParameterPath', $NextLevel )\n" if $self->debug;
+       my $self = shift;
+       my $state = shift;
+       my @ParameterNames = @_;
+       confess "need ParameterNames" unless @ParameterNames;
+       warn "# GetParameterValues", dump( @ParameterNames ), "\n" if $self->debug;
+
        $self->xml( $state, sub {
                my ( $X, $state ) = @_;
 
                $X->GetParameterValues( $cwmp,
-                       $X->ParameterPath( $cwmp, $ParameterPath ),
-                       $X->NextLevel( $cwmp, $NextLevel ),
+                       $X->ParameterNames( $cwmp,
+                               map {
+                                       $X->string( $xsd, $_ )
+                               } @ParameterNames
+                       )
                );
        });
 }
index 3b61924..7a69269 100644 (file)
@@ -66,7 +66,7 @@ sub current_store {
 
        confess "unknown store module $module not one of ", dump( $self->possible_stores ) unless $s;
 
-       warn "#### current store = $s\n" if $self->debug > 4;
+#      warn "#### current store = $s\n" if $self->debug > 4;
 
        return $s;
 }
index 3a512b3..67542a3 100644 (file)
@@ -67,6 +67,9 @@ sub name2perl {
 
        warn "## $s ", dump( $stat ), $/ if $self->debug;
 
+       # FIXME if it ends with a dot (array values), remove it
+       $s =~ s/\.$//;
+
        return $s;
 }
 
index c3ec6f2..df885b8 100755 (executable)
@@ -27,6 +27,7 @@ sub check_response {
                ID => 42,
        };
 
+       diag "check_response $command",dump( 'state', @_ ) if $debug;
        ok( my $xml = $response->$command( $state, @_ ), "generate response $command" . dump(@_) );
 
        my $file = "$abs_path/response/$command.xml";
@@ -44,5 +45,5 @@ sub check_response {
 check_response( 'InformResponse' );
 check_response( 'GetRPCMethods' );
 check_response( 'Reboot' );
-check_response( 'GetParameterNames', 'InternetGatewayDevice.DeviceInfo.SerialNumber', 0 );
-check_response( 'GetParameterValues' );
+check_response( 'GetParameterNames', 'InternetGatewayDevice.DeviceInfo.SerialNumber' );
+check_response( 'GetParameterValues', 'InternetGatewayDevice.DeviceInfo.SerialNumber', 'InternetGatewayDevice.DeviceInfo.VendorConfigFile.' );
index 54246b6..0906abe 100644 (file)
@@ -1,5 +1,6 @@
 <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
                xmlns:cwmp="urn:dslforum-org:cwmp-1-0"
+               xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance"
                soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
   <soap:Header>
     <cwmp:ID mustUnderstand="1">42</cwmp:ID>
@@ -7,8 +8,10 @@
   </soap:Header>
   <soap:Body>
     <cwmp:GetParameterValues>
-      <cwmp:ParameterPath></cwmp:ParameterPath>
-      <cwmp:NextLevel>0</cwmp:NextLevel>
+      <cwmp:ParameterNames>
+        <xsd:string>InternetGatewayDevice.DeviceInfo.SerialNumber</xsd:string>
+        <xsd:string>InternetGatewayDevice.DeviceInfo.VendorConfigFile.</xsd:string>
+      </cwmp:ParameterNames>
     </cwmp:GetParameterValues>
   </soap:Body>
 </soap:Envelope>
\ No newline at end of file