1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
  
12
  
13
  
14
  
15
  
16
  
17
  
18
  
19
  
20
  
21
  
22
  
23
  
24
  
25
  
26
  
27
  
28
  
29
  
30
  
31
  
32
  
33
  
34
  
35
  
36
  
37
  
38
  
39
  
40
  
41
  
42
  
43
  
44
  
45
  
46
  
47
  
48
  
49
  
50
  
51
  
52
  
53
  
54
  
55
  
56
  
57
  
58
  
59
  
60
  
#pike __REAL_VERSION__ 
 
// 
// getcmd.pike 
// Example of using low level SNMP API 
// 
// 
 
 
object o; 
mixed rv, co; 
 
void rc(mapping rdata, int idx) { 
 
  o->set_blocking(); 
  o->to_pool(rdata); 
  rv = o->read_response(idx); 
 
  write("Returned object: %O\n", rv); 
 
  exit(0); 
} 
 
void tt() { 
 
  remove_call_out(co); 
  o->set_blocking(); 
 
  write("Timed out!\n"); 
  exit(1); 
} 
 
int main(int argc, array(string) argv) { 
 
  string host = sizeof(argv) > 1 ? argv[1] : "localhost"; 
  string comm = sizeof(argv) > 2 ? argv[2] : "public"; 
 
  o = Protocols.SNMP.protocol(); 
  o->snmp_community = comm; 
  int idx = o->get_request(({ 
    "1.3.6.1.2.1.1.1.0",    // system.sysDescr  -> String 
    "1.3.6.1.2.1.1.3.0",    // system.sysUpTime -> TimeTicks 
    "1.3.6.1.2.1.6.9.0"             // tcp.tcpCurrEstab -> Gauge 
   }), host,161); 
write("Index: "+(string)idx+"\n"); 
 
#define NONBLOCK 
#ifdef NONBLOCK 
  o->set_read_callback(rc, idx); 
  o->set_nonblocking(); 
  co = call_out(tt, 2); 
  return -13; 
#else 
  rv = o->read_response(idx); 
  write("Returned object: %O\n", rv); 
#endif 
 
}