| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- /* Portions of this file are subject to the following copyright(s). See
- * the Net-SNMP's COPYING file for more details and other copyrights
- * that may apply:
- */
- /*
- * Portions of this file are copyrighted by:
- * Copyright © 2003 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms specified in the COPYING file
- * distributed with the Net-SNMP package.
- */
- /**
- * @file table_iterator.h
- * @addtogroup table_iterator
- * @{
- */
- #ifndef _TABLE_ITERATOR_HANDLER_H_
- #define _TABLE_ITERATOR_HANDLER_H_
- #ifdef __cplusplus
- extern "C" {
- #endif
- struct netsnmp_iterator_info_s;
- typedef netsnmp_variable_list *
- (Netsnmp_First_Data_Point) (void **loop_context,
- void **data_context,
- netsnmp_variable_list *,
- struct netsnmp_iterator_info_s *);
- typedef netsnmp_variable_list *
- (Netsnmp_Next_Data_Point) (void **loop_context,
- void **data_context,
- netsnmp_variable_list *,
- struct netsnmp_iterator_info_s *);
- typedef void *(Netsnmp_Make_Data_Context) (void *loop_context,
- struct netsnmp_iterator_info_s *);
- typedef void (Netsnmp_Free_Loop_Context) (void *,
- struct netsnmp_iterator_info_s *);
- typedef void (Netsnmp_Free_Data_Context) (void *,
- struct netsnmp_iterator_info_s *);
- /** @typedef struct netsnmp_iterator_info_s netsnmp_iterator_info
- * Typedefs the netsnmp_iterator_info_s struct into netsnmp_iterator_info */
- /** @struct netsnmp_iterator_info_s
- * Holds iterator information containing functions which should be
- called by the iterator_handler to loop over your data set and
- sort it in a SNMP specific manner.
-
- The netsnmp_iterator_info typedef can be used instead of directly calling this struct if you would prefer.
- */
- typedef struct netsnmp_iterator_info_s {
- /** Number of handlers that own this data structure. */
- int refcnt;
- /** Responsible for: returning the first set of "index" data, a
- loop-context pointer, and optionally a data context
- pointer */
- Netsnmp_First_Data_Point *get_first_data_point;
- /** Given the previous loop context, this should return the
- next loop context, associated index set and optionally a
- data context */
- Netsnmp_Next_Data_Point *get_next_data_point;
- /** If a data context wasn't supplied by the
- get_first_data_point or get_next_data_point functions and
- the make_data_context pointer is defined, it will be called
- to convert a loop context into a data context. */
- Netsnmp_Make_Data_Context *make_data_context;
- /** A function which should free the loop context. This
- function is called at *each* iteration step, which is
- not-optimal for speed purposes. The use of
- free_loop_context_at_end instead is strongly
- encouraged. This can be set to NULL to avoid its usage. */
- Netsnmp_Free_Loop_Context *free_loop_context;
- /** Frees a data context. This will be called at any time a
- data context needs to be freed. This may be at the same
- time as a correspondng loop context is freed, or much much
- later. Multiple data contexts may be kept in existence at
- any time. */
- Netsnmp_Free_Data_Context *free_data_context;
- /** Frees a loop context at the end of the entire iteration
- sequence. Generally, this would free the loop context
- allocated by the get_first_data_point function (which would
- then be updated by each call to the get_next_data_point
- function). It is not called until the get_next_data_point
- function returns a NULL */
- Netsnmp_Free_Loop_Context *free_loop_context_at_end;
- /** This can be used by client handlers to store any
- information they need */
- void *myvoid;
- int flags;
- #define NETSNMP_ITERATOR_FLAG_SORTED 0x01
- #define NETSNMP_HANDLER_OWNS_IINFO 0x02
- /** A pointer to the netsnmp_table_registration_info object
- this iterator is registered along with. */
- netsnmp_table_registration_info *table_reginfo;
- /* Experimental extension - Use At Your Own Risk
- (these two fields may change/disappear without warning) */
- Netsnmp_First_Data_Point *get_row_indexes;
- netsnmp_variable_list *indexes;
- } netsnmp_iterator_info;
- #define TABLE_ITERATOR_NAME "table_iterator"
- /* ============================
- * Iterator API: Table maintenance
- * ============================ */
- /* N/A */
- /* ============================
- * Iterator API: MIB maintenance
- * ============================ */
- void netsnmp_handler_owns_iterator_info(netsnmp_mib_handler *h);
- netsnmp_mib_handler
- *netsnmp_get_table_iterator_handler(netsnmp_iterator_info *iinfo);
- int netsnmp_register_table_iterator(netsnmp_handler_registration *reginfo,
- netsnmp_iterator_info *iinfo);
- void netsnmp_iterator_delete_table(netsnmp_iterator_info *iinfo);
- void *netsnmp_extract_iterator_context(netsnmp_request_info *);
- void netsnmp_insert_iterator_context(netsnmp_request_info *, void *);
- Netsnmp_Node_Handler netsnmp_table_iterator_helper_handler;
- #define netsnmp_register_table_iterator2(reginfo, iinfo) \
- (((iinfo)->flags |= NETSNMP_HANDLER_OWNS_IINFO), \
- netsnmp_register_table_iterator((reginfo), (iinfo)))
- /* ============================
- * Iterator API: Row operations
- * ============================ */
- void *netsnmp_iterator_row_first( netsnmp_iterator_info *);
- void *netsnmp_iterator_row_get( netsnmp_iterator_info *, void *);
- void *netsnmp_iterator_row_next( netsnmp_iterator_info *, void *);
- void *netsnmp_iterator_row_get_byidx( netsnmp_iterator_info *,
- netsnmp_variable_list *);
- void *netsnmp_iterator_row_next_byidx( netsnmp_iterator_info *,
- netsnmp_variable_list *);
- void *netsnmp_iterator_row_get_byoid( netsnmp_iterator_info *, oid *, size_t);
- void *netsnmp_iterator_row_next_byoid( netsnmp_iterator_info *, oid *, size_t);
- int netsnmp_iterator_row_count( netsnmp_iterator_info *);
- /* ============================
- * Iterator API: Index operations
- * ============================ */
- #ifdef __cplusplus
- }
- #endif
- #endif /* _TABLE_ITERATOR_HANDLER_H_ */
- /** @} */
|