]> git.stg.codes - ssmd.git/blob - src/snmptable.cpp
Fix build on osx.
[ssmd.git] / src / snmptable.cpp
1 #include "snmptable.h"
2 #include "logger.h"
3
4 using SSMD::SNMPTable;
5
6 SNMPTable::SNMPTable(Snmp & snmp,
7                      const CTarget & target,
8                      const Oid & oid)
9     : _valid(false)
10 {
11     Vb vb(oid);
12     Pdu pdu(&vb, 1);
13     while (true) {
14         int c = snmp.get_next(pdu, target);
15         for (size_t i = 0; i < 3 && c != SNMP_CLASS_SUCCESS; ++i) {
16             c = snmp.get_next(pdu, target);
17         }
18         if (c != SNMP_CLASS_SUCCESS) {
19             logger << "SNMPTable::SNMPTable() - failed to invoke Snmp::get_next (oid: '" << oid.get_printable() << "'). Error message: '" << Snmp::error_msg(c) << "'" << std::endl;
20             return;
21         }
22         if (pdu.get_vb(0).get_oid().nCompare(oid.len(), oid) != 0) {
23             break;
24         }
25         _list.push_back(pdu.get_vb(0));
26     }
27
28     _valid = true;
29 }
30
31 SNMPTable::~SNMPTable()
32 {
33 }
34
35 bool SNMPTable::getByOid(const Oid & oid, Vb & vb) const
36 {
37     SNMPList::const_iterator it;
38     for (it = _list.begin(); it != _list.end(); ++it) {
39         if (it->valid() && it->get_oid() == oid) {
40             vb = *it;
41             return true;
42         }
43     }
44     return false;
45 }