#include "snmptable.h" #include "logger.h" using SSMD::SNMPTable; SNMPTable::SNMPTable(Snmp & snmp, const CTarget & target, const Oid & oid) : _valid(false) { Vb vb(oid); Pdu pdu(&vb, 1); while (true) { int c = snmp.get_next(pdu, target); for (size_t i = 0; i < 3 && c != SNMP_CLASS_SUCCESS; ++i) { c = snmp.get_next(pdu, target); } if (c != SNMP_CLASS_SUCCESS) { logger << "SNMPTable::SNMPTable() - failed to invoke Snmp::get_next (oid: '" << oid.get_printable() << "'). Error message: '" << Snmp::error_msg(c) << "'" << std::endl; return; } if (pdu.get_vb(0).get_oid().nCompare(oid.len(), oid) != 0) { break; } _list.push_back(pdu.get_vb(0)); } _valid = true; } SNMPTable::~SNMPTable() { } bool SNMPTable::getByOid(const Oid & oid, Vb & vb) const { SNMPList::const_iterator it; for (it = _list.begin(); it != _list.end(); ++it) { if (it->valid() && it->get_oid() == oid) { vb = *it; return true; } } return false; }