serialize.c
上传用户:wxp200602
上传日期:2007-10-30
资源大小:4028k
文件大小:3k
源码类别:

SNMP编程

开发平台:

Unix_Linux

  1. #include <net-snmp/net-snmp-config.h>
  2. #if HAVE_STRING_H
  3. #include <string.h>
  4. #else
  5. #include <strings.h>
  6. #endif
  7. #include <net-snmp/net-snmp-includes.h>
  8. #include <net-snmp/agent/net-snmp-agent-includes.h>
  9. #include <net-snmp/agent/serialize.h>
  10. #if HAVE_DMALLOC_H
  11. #include <dmalloc.h>
  12. #endif
  13. /** @defgroup serialize serialize: Calls sub handlers one request at a time.
  14.  *  @ingroup utilities
  15.  *  This functionally passes in one request at a time
  16.  *  into lower handlers rather than a whole bunch of requests at once.
  17.  *  This is useful for handlers that don't want to iterate through the
  18.  *  request lists themselves.  Generally, this is probably less
  19.  *  efficient so use with caution.  The serialize handler might be
  20.  *  useable to dynamically fix handlers with broken looping code,
  21.  *  however.
  22.  *  @{
  23.  */
  24. /** returns a serialize handler that can be injected into a given
  25.  *  handler chain.  
  26.  */
  27. netsnmp_mib_handler *
  28. netsnmp_get_serialize_handler(void)
  29. {
  30.     return netsnmp_create_handler("serialize",
  31.                                   netsnmp_serialize_helper_handler);
  32. }
  33. /** functionally the same as calling netsnmp_register_handler() but also
  34.  * injects a serialize handler at the same time for you. */
  35. int
  36. netsnmp_register_serialize(netsnmp_handler_registration *reginfo)
  37. {
  38.     netsnmp_inject_handler(reginfo, netsnmp_get_serialize_handler());
  39.     return netsnmp_register_handler(reginfo);
  40. }
  41. /** Implements the serial handler */
  42. int
  43. netsnmp_serialize_helper_handler(netsnmp_mib_handler *handler,
  44.                                  netsnmp_handler_registration *reginfo,
  45.                                  netsnmp_agent_request_info *reqinfo,
  46.                                  netsnmp_request_info *requests)
  47. {
  48.     netsnmp_request_info *request, *requesttmp;
  49.     DEBUGMSGTL(("helper:serialize", "Got requestn"));
  50.     /*
  51.      * loop through requests 
  52.      */
  53.     for (request = requests; request; request = request->next) {
  54.         int             ret;
  55.         /*
  56.          * store next pointer and delete it 
  57.          */
  58.         requesttmp = request->next;
  59.         request->next = NULL;
  60.         /*
  61.          * call the next handler 
  62.          */
  63.         ret =
  64.             netsnmp_call_next_handler(handler, reginfo, reqinfo, request);
  65.         /*
  66.          * restore original next pointer 
  67.          */
  68.         request->next = requesttmp;
  69.         if (ret != SNMP_ERR_NOERROR)
  70.             return ret;
  71.     }
  72.     return SNMP_ERR_NOERROR;
  73. }
  74. /** 
  75.  *  initializes the serialize helper which then registers a serialize
  76.  *  handler as a run-time injectable handler for configuration file
  77.  *  use.
  78.  */
  79. void
  80. netsnmp_init_serialize(void)
  81. {
  82.     netsnmp_register_handler_by_name("serialize",
  83.                                      netsnmp_get_serialize_handler());
  84. }