blob: eeab49043fa663b3b3b03ec04fc0c064c47ddcdc [file] [log] [blame]
#ifndef OID_STASH_H
#define OID_STASH_H
/*
* designed to store/retrieve information associated with a given oid.
* Storage is done in an efficient tree manner for fast lookups.
*/
#define OID_STASH_CHILDREN_SIZE 31
#ifdef __cplusplus
extern "C" {
#endif
struct netsnmp_oid_stash_node_s;
/* args: buffer, sizeof(buffer), yourdata, stashnode */
typedef int (NetSNMPStashDump) (char *, size_t,
void *,
struct netsnmp_oid_stash_node_s *);
typedef void (NetSNMPStashFreeNode) (void *);
typedef struct netsnmp_oid_stash_node_s {
oid value;
struct netsnmp_oid_stash_node_s **children; /* array of children */
size_t children_size;
struct netsnmp_oid_stash_node_s *next_sibling; /* cache too small links */
struct netsnmp_oid_stash_node_s *prev_sibling;
struct netsnmp_oid_stash_node_s *parent;
void *thedata;
} netsnmp_oid_stash_node;
typedef struct netsnmp_oid_stash_save_info_s {
const char *token;
netsnmp_oid_stash_node **root;
NetSNMPStashDump *dumpfn;
} netsnmp_oid_stash_save_info;
int netsnmp_oid_stash_add_data(netsnmp_oid_stash_node **root,
const oid * lookup,
size_t lookup_len,
void *mydata);
SNMPCallback netsnmp_oid_stash_store_all;
netsnmp_oid_stash_node
*netsnmp_oid_stash_get_node(netsnmp_oid_stash_node *root,
const oid * lookup, size_t lookup_len);
void *netsnmp_oid_stash_get_data(netsnmp_oid_stash_node *root,
const oid * lookup,
size_t lookup_len);
netsnmp_oid_stash_node *
netsnmp_oid_stash_getnext_node(netsnmp_oid_stash_node *root,
oid * lookup, size_t lookup_len);
netsnmp_oid_stash_node *netsnmp_oid_stash_create_sized_node(size_t
mysize);
netsnmp_oid_stash_node *netsnmp_oid_stash_create_node(void); /* returns a malloced node */
void netsnmp_oid_stash_store(netsnmp_oid_stash_node *root,
const char *tokenname,
NetSNMPStashDump *dumpfn,
oid *curoid, size_t curoid_len);
/* frees all data in the stash and cleans it out. Sets root = NULL */
void netsnmp_oid_stash_free(netsnmp_oid_stash_node **root,
NetSNMPStashFreeNode *freefn);
/* a noop function that can be passed to netsnmp_oid_stash_node to
NOT free the data */
NetSNMPStashFreeNode netsnmp_oid_stash_no_free;
#ifdef __cplusplus
}
#endif
#endif /* OID_STASH_H */