Added set() capabilities

This commit is contained in:
Max Baker
2003-02-12 20:49:54 +00:00
parent 543fc51d2f
commit a1286a02f9

91
Info.pm
View File

@@ -1152,6 +1152,47 @@ sub _global{
return $val; return $val;
} }
=item $info->_set(attr,val,iid)
Used internally by AUTOLOAD to run an SNMP set command for dynamic methods listed in
either %GLOBALS or %FUNCS.
Example: $info->set_name('dog',3) uses autoload to resolve to $info->_set('name','dog',3);
=cut
sub _set {
my ($self,$attr,$val,$iid) = @_;
$iid = defined $iid ? $iid : '.0';
# prepend dot if necessary to $iid
$iid = ".$iid" unless $iid =~ /^\./;
my $sess = $self->{sess};
return undef unless defined $sess;
my $funcs = $self->funcs();
my $globals = $self->globals();
my $oid = undef;
# Lookup oid
$oid = $globals->{$attr} if defined $globals->{$attr};
$oid = $funcs->{$attr} if defined $funcs->{$attr};
unless (defined $oid) {
print "SNMP::Info::_set($attr,$val) - Failed to find $attr in \%GLOBALS or \%FUNCS \n";
return undef;
}
$oid .= $iid;
print "SNMP::Info::_set $attr$iid ($oid) = $val\n" if $DEBUG;
my $rv = $sess->set($oid,$val);
return $rv;
}
=back =back
=head3 Functions for SNMP Tables (%FUNCS) =head3 Functions for SNMP Tables (%FUNCS)
@@ -1300,6 +1341,7 @@ Example :
=cut =cut
sub AUTOLOAD { sub AUTOLOAD {
my $self = shift;
my $sub_name = $AUTOLOAD; my $sub_name = $AUTOLOAD;
return if $sub_name =~ /DESTROY$/; return if $sub_name =~ /DESTROY$/;
@@ -1310,40 +1352,45 @@ sub AUTOLOAD {
$sub_name =~ s/.*://; $sub_name =~ s/.*://;
my $attr = $sub_name; my $attr = $sub_name;
$attr =~ s/^load_//; $attr =~ s/^(load|set)_//;
# Let's use the %GLOBALS and %FUNCS from the class that # Let's use the %GLOBALS and %FUNCS from the class that
# inherited us. # inherited us.
no strict 'refs'; my (%funcs,%globals);
my %funcs = %{$package.'FUNCS'}; {
my %globals = %{$package.'GLOBALS'}; no strict 'refs';
%funcs = %{$package.'FUNCS'};
return unless( defined $funcs{$attr} or %globals = %{$package.'GLOBALS'};
defined $globals{$attr} );
my $self = shift;
# First check %GLOBALS and return _scalar(global)
if (defined $globals{$attr}) {
return $self->_global( $attr );
} }
# Next see if we're load_ ing. unless( defined $funcs{$attr} or
defined $globals{$attr} ) {
#print "$attr not found in ",join(',',keys %funcs),"\n";
return;
}
# Check for load_ ing.
if ($sub_name =~ /^load_/){ if ($sub_name =~ /^load_/){
$self->_load_attr( $attr,$funcs{$attr} ); $self->_load_attr( $attr,$funcs{$attr} );
return $self->_show_attr( $attr ) if defined wantarray; return $self->_show_attr( $attr ) if defined wantarray;
}
if ($sub_name =~ /^set_/){
return $self->_set( $attr, @_);
}
# First check %GLOBALS and return _scalar(global)
if (defined $globals{$attr} ){
return $self->_global( $attr );
}
# Otherwise we must be listed in %FUNCS # Otherwise we must be listed in %FUNCS
} else {
# Load data if not already cached # Load data if not already cached
$self->_load_attr( $attr, $funcs{$attr} ) $self->_load_attr( $attr, $funcs{$attr} )
unless defined $self->{"_${attr}"}; unless defined $self->{"_${attr}"};
return $self->_show_attr($attr); return $self->_show_attr($attr);
}
} }
1; 1;