]> git.stg.codes - ssmd.git/blob - src/snmptable.cpp
5937270e23defc60d9adb4f2da33f14acb05e8f0
[ssmd.git] / src / snmptable.cpp
1 #include "snmptable.h"
2 #include "logger.h"
3
4 using GTS::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         if (int c = snmp.get_next(pdu, target) != SNMP_CLASS_SUCCESS) {
15             logger << "SNMPTable::SNMPTable() - failed to invoke Snmp::get_next (oid: '" << oid.get_printable() << "'). Error message: '" << Snmp::error_msg(c) << "'" << std::endl;
16             return;
17         }
18         if (pdu.get_vb(0).get_oid().nCompare(oid.len(), oid) != 0) {
19             break;
20         }
21         _list.push_back(pdu.get_vb(0));
22     }
23
24     _valid = true;
25 }
26
27 SNMPTable::~SNMPTable()
28 {
29 }
30
31 bool SNMPTable::getByOid(const Oid & oid, Vb & vb) const
32 {
33     SNMPList::const_iterator it;
34     for (it = _list.begin(); it != _list.end(); ++it) {
35         if (it->valid() && it->get_oid() == oid) {
36             vb = *it;
37             return true;
38         }
39     }
40     return false;
41 }