multiplexer.c

00001 #include <net-snmp/net-snmp-config.h>
00002 
00003 #include <sys/types.h>
00004 
00005 #include <net-snmp/net-snmp-includes.h>
00006 #include <net-snmp/agent/net-snmp-agent-includes.h>
00007 
00008 #include <net-snmp/agent/multiplexer.h>
00009 
00032 netsnmp_mib_handler *
00033 netsnmp_get_multiplexer_handler(netsnmp_mib_handler_methods *req)
00034 {
00035     netsnmp_mib_handler *ret = NULL;
00036 
00037     if (!req) {
00038         snmp_log(LOG_INFO,
00039                  "netsnmp_get_multiplexer_handler(NULL) called\n");
00040         return NULL;
00041     }
00042 
00043     ret =
00044         netsnmp_create_handler("multiplexer",
00045                                netsnmp_multiplexer_helper_handler);
00046     if (ret) {
00047         ret->myvoid = (void *) req;
00048     }
00049     return ret;
00050 }
00051 
00053 int
00054 netsnmp_multiplexer_helper_handler(netsnmp_mib_handler *handler,
00055                                    netsnmp_handler_registration *reginfo,
00056                                    netsnmp_agent_request_info *reqinfo,
00057                                    netsnmp_request_info *requests)
00058 {
00059 
00060     netsnmp_mib_handler_methods *methods;
00061 
00062     if (!handler->myvoid) {
00063         snmp_log(LOG_INFO, "improperly registered multiplexer found\n");
00064         return SNMP_ERR_GENERR;
00065     }
00066 
00067     methods = (netsnmp_mib_handler_methods *) handler->myvoid;
00068 
00069     switch (reqinfo->mode) {
00070     case MODE_GETBULK:
00071         handler = methods->getbulk_handler;
00072         if (handler)
00073             break;
00074         /* Deliberate fallthrough to use GetNext handler */
00075     case MODE_GETNEXT:
00076         handler = methods->getnext_handler;
00077         if (handler)
00078             break;
00079         /* Deliberate fallthrough to use Get handler */
00080     case MODE_GET:
00081         handler = methods->get_handler;
00082         if (!handler) {
00083             netsnmp_request_set_error_all(requests, SNMP_NOSUCHOBJECT);
00084         }
00085         break;
00086 
00087     case MODE_SET_RESERVE1:
00088     case MODE_SET_RESERVE2:
00089     case MODE_SET_ACTION:
00090     case MODE_SET_COMMIT:
00091     case MODE_SET_FREE:
00092     case MODE_SET_UNDO:
00093         handler = methods->set_handler;
00094         if (!handler) {
00095             netsnmp_request_set_error_all(requests, SNMP_ERR_NOTWRITABLE);
00096             return SNMP_ERR_NOERROR;
00097         }
00098         break;
00099 
00100         /*
00101          * XXX: process SETs specially, and possibly others 
00102          */
00103     default:
00104         snmp_log(LOG_ERR, "unsupported mode for multiplexer: %d\n",
00105                  reqinfo->mode);
00106         return SNMP_ERR_GENERR;
00107     }
00108     if (!handler) {
00109         snmp_log(LOG_ERR,
00110                  "No handler enabled for mode %d in multiplexer\n",
00111                  reqinfo->mode);
00112         return SNMP_ERR_GENERR;
00113     }
00114     return netsnmp_call_handler(handler, reginfo, reqinfo, requests);
00115 }

net-snmpに対してSat Sep 5 13:14:22 2009に生成されました。  doxygen 1.4.7