--- google/lib/CWMP/Request.pm 2007/06/20 23:35:04 71 +++ google/lib/CWMP/Request.pm 2007/06/23 09:15:19 92 @@ -44,7 +44,7 @@ } } -my $state; +our $state; # FIXME check this! my $parser = XML::Rules->new( # start_rules => [ @@ -109,8 +109,35 @@ # 'ParameterInfoStruct' => sub { my ($tag_name, $tag_hash, $context, $parent_data) = @_; - $state->{ParameterInfo}->{ _tag($tag_hash, 'Name', '_content') } = _tag($tag_hash, 'Writable', '_content' ); - #warn dump( $tag_name, $tag_hash, $context ); + my $name = _tag($tag_hash, 'Name', '_content'); + my $writable = _tag($tag_hash, 'Writable', '_content' ); + + 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"; + $s =~ s/^([^\.]+)/\$state->{ParameterInfo}->{'$1'}/; + warn "---> $s\n"; + + my $stat; + while ( $s =~ s/\.(\d+)/->[$1]/ ) { + $stat->{array}++; + warn "-\@-> $s\n"; + } + while ( $s =~ s/\.([a-zA-Z0-9_]+)/->{'$1'}/ ) { + $stat->{scalar}++; + warn "-\$-> $s\n"; + }; + $s .= "->{'writable'} = $writable;"; + + warn "## $name\n## tree: $s\n## stat: ",dump( $stat ), "\n"; + + eval "$s"; + confess "can't eval $s : $@" if ($@); + + #warn "## state = dump( $state ), "\n"; }, # # Fault