diff --git a/src/snmp_core.cc b/src/snmp_core.cc index ffd93c20636..b5ed15261c4 100644 --- a/src/snmp_core.cc +++ b/src/snmp_core.cc @@ -993,17 +993,12 @@ snmpAddNode(oid * name, int len, oid_ParseFn * parsefunction, instance_Fn * inst MemBuf tmp; debugs(49, 6, "snmpAddNode: Children : " << children << ", Oid : " << snmpDebugOid(name, len, tmp)); - const auto entry = static_cast(xmalloc(sizeof(mib_tree_entry))); - entry->name = name; - entry->len = len; + const auto entry = new mib_tree_entry(name, len, aggrType); entry->parsefunction = parsefunction; entry->instancefunction = instancefunction; - entry->children = children; - entry->leaves = nullptr; - entry->parent = nullptr; - entry->aggrType = aggrType; if (children > 0) { + entry->children = children; entry->leaves = static_cast(xmalloc(sizeof(mib_tree_entry *) * children)); va_list args; diff --git a/src/snmp_core.h b/src/snmp_core.h index 2d650bf1a54..e38b47b00f5 100644 --- a/src/snmp_core.h +++ b/src/snmp_core.h @@ -24,21 +24,27 @@ class MemBuf; #define MAX_PROTOSTAT 5 typedef variable_list *(oid_ParseFn) (variable_list *, snint *); -typedef struct _mib_tree_entry mib_tree_entry; +class mib_tree_entry; typedef oid *(instance_Fn) (oid * name, snint * len, mib_tree_entry * current, oid_ParseFn ** Fn); typedef enum {atNone = 0, atSum, atAverage, atMax, atMin} AggrType; -struct _mib_tree_entry { - oid *name; - int len; - oid_ParseFn *parsefunction; - instance_Fn *instancefunction; - int children; - - struct _mib_tree_entry **leaves; +class mib_tree_entry +{ + MEMPROXY_CLASS(mib_tree_entry); +public: + mib_tree_entry(oid *aName, int aLen, AggrType type) : name(aName), len(aLen), aggrType(type) {} + ~mib_tree_entry() = delete; - struct _mib_tree_entry *parent; - AggrType aggrType; +public: + oid * const name; + const int len; + oid_ParseFn *parsefunction = nullptr; + instance_Fn *instancefunction = nullptr; + int children = 0; + + mib_tree_entry **leaves = nullptr; + mib_tree_entry *parent = nullptr; + const AggrType aggrType; }; struct snmp_pdu* snmpAgentResponse(struct snmp_pdu* PDU);