aboutsummaryrefslogtreecommitdiffstats
path: root/include/FixedSNMP.pm
diff options
context:
space:
mode:
Diffstat (limited to 'include/FixedSNMP.pm')
-rw-r--r--include/FixedSNMP.pm125
1 files changed, 0 insertions, 125 deletions
diff --git a/include/FixedSNMP.pm b/include/FixedSNMP.pm
deleted file mode 100644
index 1ea3089..0000000
--- a/include/FixedSNMP.pm
+++ /dev/null
@@ -1,125 +0,0 @@
-# A bugfix to the gettable functions of SNMP.pm, that deals properly
-# with bulk responses being overridden. Original copyright:
-#
-# Copyright (c) 1995-2006 G. S. Marzot. All rights reserved.
-# This program is free software; you can redistribute it and/or
-# modify it under the same terms as Perl itself.
-#
-# To use, just "use FixedSNMP;" and then use SNMP::Session as usual.
-
-use strict;
-use warnings;
-use SNMP;
-
-package FixedSNMP::Session;
-
-sub _gettable_do_it() {
- my ($this, $vbl, $parse_indexes, $textnode, $state) = @_;
-
- my ($res);
-
- $vbl = $_[$#_] if ($state->{'options'}{'callback'});
-
- my $num_vbls = scalar @$vbl;
- my $num_stopconds = scalar @{$state->{'stopconds'}};
-
- while ($num_vbls > 0 && !$this->{ErrorNum}) {
- my @found_eof = (0) x $num_stopconds;
-
- for (my $i = 0; $i <= $#$vbl; $i++) {
- my $row_oid = SNMP::translateObj($vbl->[$i][0]);
- my $row_text = $vbl->[$i][0];
- my $row_index = $vbl->[$i][1];
- my $row_value = $vbl->[$i][2];
- my $row_type = $vbl->[$i][3];
-
- my $stopcond_num = $i % $num_stopconds;
- my $stopcond = $state->{'stopconds'}[$stopcond_num];
- if ($row_oid !~ /^\Q$stopcond\E/ || $row_value eq 'ENDOFMIBVIEW') {
- $found_eof[$stopcond_num] = 1;
- } else {
-
- if ($row_type eq "OBJECTID") {
-
- # If the value returned is an OID, translate this
- # back in to a textual OID
-
- $row_value = SNMP::translateObj($row_value);
-
- }
-
- # continue past this next time
-
- $state->{'varbinds'}[$stopcond_num] = [ $row_text, $row_index ];
-
- # Place the results in a hash
-
- $state->{'result_hash'}{$row_index}{$row_text} = $row_value;
- }
- }
-
- my @newstopconds = ();
- my @newvarbinds = ();
- for (my $i = 0; $i < $num_stopconds; ++$i) {
- unless ($found_eof[$i]) {
- push @newstopconds, $state->{'stopconds'}[$i];
- push @newvarbinds, $state->{'varbinds'}[$i];
- }
- }
- if ($#newstopconds == -1) {
- last;
- }
- $state->{'varbinds'} = \@newvarbinds;
- $state->{'stopconds'} = \@newstopconds;
- $vbl = $state->{'varbinds'};
- $num_vbls = scalar @newvarbinds;
- $num_stopconds = scalar @newstopconds;
-
- #
- # if we've been configured with a callback, then call the
- # sub-functions with a callback to our own "next" processing
- # function (_gettable_do_it). or else call the blocking method and
- # call the next processing function ourself.
- #
- if ($state->{'options'}{'callback'}) {
- if ($this->{Version} ne '1' && !$state->{'options'}{'nogetbulk'}) {
- $res = $this->getbulk(0, $state->{'repeatcount'}, $vbl,
- [\&_gettable_do_it, $this, $vbl,
- $parse_indexes, $textnode, $state]);
- } else {
- $res = $this->getnext($vbl,
- [\&_gettable_do_it, $this, $vbl,
- $parse_indexes, $textnode, $state]);
- }
- return;
- } else {
- if ($this->{Version} ne '1' && !$state->{'options'}{'nogetbulk'}) {
- $res = $this->getbulk(0, $state->{'repeatcount'}, $vbl);
- } else {
- $res = $this->getnext($vbl);
- }
- }
- }
-
- # finish up
- _gettable_end_routine($state, $parse_indexes, $textnode);
-
- # return the hash if no callback was specified
- if (!$state->{'options'}{'callback'}) {
- return($state->{'result_hash'});
- }
-
- #
- # if they provided a callback, call it
- # (if an array pass the args as well)
- #
- if (ref($state->{'options'}{'callback'}) eq 'ARRAY') {
- my $code = shift @{$state->{'options'}{'callback'}};
- $code->(@{$state->{'options'}{'callback'}}, $state->{'result_hash'});
- } else {
- $state->{'options'}{'callback'}->($state->{'result_hash'});
- }
-}
-
-*FixedSNMP::Session::_gettable_end_routine = *SNMP::Session::_gettable_end_routine;
-*SNMP::Session::_gettable_do_it = *FixedSNMP::Session::_gettable_do_it;