| #include <net-snmp/net-snmp-config.h> |
| |
| #if HAVE_STRING_H |
| #include <string.h> |
| #else |
| #include <strings.h> |
| #endif |
| |
| #include <net-snmp/net-snmp-includes.h> |
| #include <net-snmp/agent/net-snmp-agent-includes.h> |
| |
| #include <net-snmp/agent/serialize.h> |
| |
| /** @defgroup serialize serialize |
| * Calls sub handlers one request at a time. |
| * @ingroup utilities |
| * This functionally passes in one request at a time |
| * into lower handlers rather than a whole bunch of requests at once. |
| * This is useful for handlers that don't want to iterate through the |
| * request lists themselves. Generally, this is probably less |
| * efficient so use with caution. The serialize handler might be |
| * useable to dynamically fix handlers with broken looping code, |
| * however. |
| * @{ |
| */ |
| |
| /** returns a serialize handler that can be injected into a given |
| * handler chain. |
| */ |
| netsnmp_mib_handler * |
| netsnmp_get_serialize_handler(void) |
| { |
| return netsnmp_create_handler("serialize", |
| netsnmp_serialize_helper_handler); |
| } |
| |
| /** functionally the same as calling netsnmp_register_handler() but also |
| * injects a serialize handler at the same time for you. */ |
| int |
| netsnmp_register_serialize(netsnmp_handler_registration *reginfo) |
| { |
| netsnmp_inject_handler(reginfo, netsnmp_get_serialize_handler()); |
| return netsnmp_register_handler(reginfo); |
| } |
| |
| /** Implements the serial handler */ |
| int |
| netsnmp_serialize_helper_handler(netsnmp_mib_handler *handler, |
| netsnmp_handler_registration *reginfo, |
| netsnmp_agent_request_info *reqinfo, |
| netsnmp_request_info *requests) |
| { |
| |
| netsnmp_request_info *request, *requesttmp; |
| |
| DEBUGMSGTL(("helper:serialize", "Got request\n")); |
| /* |
| * loop through requests |
| */ |
| for (request = requests; request; request = request->next) { |
| int ret; |
| |
| /* |
| * store next pointer and delete it |
| */ |
| requesttmp = request->next; |
| request->next = NULL; |
| |
| /* |
| * call the next handler |
| */ |
| ret = |
| netsnmp_call_next_handler(handler, reginfo, reqinfo, request); |
| |
| /* |
| * restore original next pointer |
| */ |
| request->next = requesttmp; |
| |
| if (ret != SNMP_ERR_NOERROR) |
| return ret; |
| } |
| |
| return SNMP_ERR_NOERROR; |
| } |
| |
| /** |
| * initializes the serialize helper which then registers a serialize |
| * handler as a run-time injectable handler for configuration file |
| * use. |
| */ |
| void |
| netsnmp_init_serialize(void) |
| { |
| netsnmp_register_handler_by_name("serialize", |
| netsnmp_get_serialize_handler()); |
| } |
| /** @} */ |
| |