| #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 */ |