#!/opt/SUNWstade/bin/perl -I/opt/SUNWstade/lib

use System;
use strict;
use SnmpAgent;
use Report;

System->set_home(System->home_dir());
my($renv, $devs, $hosts,$notifs) = PDM::ConfigFile->read();
System->set_renv($renv);
my ($cmd, $req, $ret, $value, $x  ,@M, @L, @L2, $err);

my $type = "se";
# $map->[0][0] = oid, $map->[0][1] = report_id

opendir(O, System->get_home() . "/DATA/OLD_REPORTS");
my $SE;
my @files = readdir(O); closedir(O);
foreach my $f (@files) {
  if ($f =~ /^se:/) {
     $SE = $f; last;
  }
}
my $R = Report->readLocal($SE);
my $report = $R->content();

my ($error, $base, $map) = SnmpAgent->read($type, $report); # make a map

# $map->[x][0] = oid, $map->[x][1] = fieldname 

sub log1 {
  my($s) = @_;
  open(O2, ">>/tmp/snmplog"); print O2 "$s\n"; close(O2);
}

$|=1;
  
while ($cmd = <>) {
  chomp($cmd);
  $value = undef;
  if ($cmd =~ /^PING/){
     print "PONG\n";
     next;
  }
  $req = <>;
  chomp($req);
  $err = undef;
  #&log1("$cmd $req");
  if ($cmd eq "getnext") {
     if ($req eq $base) {
        $ret = $map->[0][0]; 
        $value = $map->[0][1];
     } else {
        ($err, $ret, $value) = &look($req, $base, $map, 1);
        if ($err) {
           print "NONE\n"; next;
        }
     }
  } else {
     if ($req eq $base) {
        print "NONE\n";
        next;
     } else {
        ($err, $ret, $value) = &look($req, $base, $map, 0);
     }
  }
  print "$ret\n";
  if (exists($report->{$value})) {
    print "string\n" . $report->{$value} . "\n";
  } else {
    print "string\n$value not available!\n";
  }

}

# getnext: $inc = 1 

sub look {
  my($req, $base, $map, $inc) = @_;
  my ($value, $x);       
  my $ret;

  my ($close_ret, $close_value);

  for ($x=0; $x <= $#$map; $x++) {
      my $l1 = length($map->[$x][0]);
      if ($map->[$x][0] eq $req) {
         $ret   = $map->[$x+$inc][0];
         $value = $map->[$x+$inc][1];
         last;
      } elsif (!$close_ret && substr($map->[$x][0],0,length($req)) eq $req) {
         $close_ret = $map->[$x][0];
         $close_value = $map->[$x][1];
      }
  }
  if (!defined($value) && $inc) {
     if ($close_ret) {
        $ret = $close_ret; $value = $close_value;
     } else {
        return (1,$req,"nack... ");
     }
  }
  return (0, $ret, $value);
}
 



