--- google/lib/CWMP/Request.pm 2007/06/23 09:20:03 93 +++ google/lib/CWMP/Request.pm 2007/06/24 19:36:31 103 @@ -4,11 +4,10 @@ use strict; use XML::Rules; +use CWMP::Tree; use Data::Dump qw/dump/; use Carp qw/confess cluck/; -my $debug = 0; - =head1 NAME CWMP::Request - parse SOAP request @@ -48,6 +47,8 @@ our $state; # FIXME check this! +my $tree = CWMP::Tree->new({ debug => 0 }); + my $parser = XML::Rules->new( # start_rules => [ # '^division_name,fax' => 'skip', @@ -117,26 +118,7 @@ confess "need state" unless ( $state ); # don't remove! # XXX dragons ahead: convert name to tree rewriting it into perl - - my $s = $name; - warn "===> $name\n" if $debug; - $s =~ s/^([^\.]+)/\$state->{ParameterInfo}->{'$1'}/; - warn "---> $s\n" if $debug; - - my $stat; - while ( $s =~ s/\.(\d+)/->[$1]/ ) { - $stat->{array}++; - warn "-\@-> $s\n" if $debug; - } - while ( $s =~ s/\.([a-zA-Z0-9_]+)/->{'$1'}/ ) { - $stat->{scalar}++; - warn "-\$-> $s\n" if $debug; - - }; - $s .= "->{'writable'} = $writable;"; - - warn "## $name\n## tree: $s\n## stat: ",dump( $stat ), "\n" if $debug; - + my $s = '$state->{ParameterInfo}->' . $tree->name2perl( $name ) . "->{writable} = $writable;"; eval "$s"; confess "can't eval $s : $@" if ($@);