OSDN Git Service

fc032adbead3b566a4794a99e1fad480025dd800
[ultramonkey-l7/ultramonkey-l7-v3.git] / snmpagent / l7snmpagent.cpp
1 #include <signal.h>
2 #include <sstream>
3 #include <string>
4
5 #include "logger.h"
6 #include "parameter.h"
7 #include "subagent.h"
8
9 using namespace l7vs;
10
11 l7ag_subagent *subagent;
12
13 /*!
14  * sig handler
15  */
16 static void
17 handler_sig_exit(int sig)
18 {
19         subagent->stop();
20 }
21
22 /*!
23  * setup signal handler
24  */
25 static int
26 set_sighandler(int sig, void (*handler)(int))
27 {
28         struct sigaction act;
29         int ret;
30
31         ret = sigaction(sig, NULL, &act);
32         if (ret < 0) {
33                 return ret;
34         }
35         act.sa_flags &= ~SA_RESETHAND;
36         act.sa_handler = handler;
37         ret = sigaction(sig, &act, NULL);
38         if (ret < 0) {
39                 return ret;
40         }
41         return 0;
42 }
43
44 /*!
45  *esetup all signal handlers
46  */
47 static int
48 set_sighandlers()
49 {
50         l7vs::Logger    logger;
51         if (LOG_LV_DEBUG == logger.getLogLevel(l7vs::LOG_CAT_SNMPAGENT_START_STOP)) {
52                 std::string debugstr("in_function set_sighandler()");
53                 logger.putLogDebug(l7vs::LOG_CAT_SNMPAGENT_START_STOP, 0, debugstr, __FILE__, __LINE__);
54         }
55
56         int ret;
57
58 #define SET_SIGHANDLER(sig, handler)                                                                    \
59     do {                                                                                                \
60         ret = set_sighandler((sig), (handler));                                                         \
61         if (ret < 0) {                                                                                  \
62             if (LOG_LV_DEBUG == logger.getLogLevel(l7vs::LOG_CAT_SNMPAGENT_SYSTEM_SIGNAL)) {            \
63                 std::ostringstream str; \
64                 str << "out_function: static int set_sighandlers(void) return_value: " << ret; \
65                 logger.putLogDebug(l7vs::LOG_CAT_SNMPAGENT_SYSTEM_SIGNAL, 0, str.str(), __FILE__, __LINE__ );      \
66             }                                                                                           \
67             return ret;                                                                                 \
68         }                                                                                               \
69     } while (0)
70
71         SET_SIGHANDLER(SIGHUP,  handler_sig_exit);
72         SET_SIGHANDLER(SIGINT,  handler_sig_exit);
73         SET_SIGHANDLER(SIGQUIT, handler_sig_exit);
74         SET_SIGHANDLER(SIGTERM, handler_sig_exit);
75         SET_SIGHANDLER(SIGUSR1, SIG_IGN);
76         SET_SIGHANDLER(SIGUSR2, SIG_IGN);
77         SET_SIGHANDLER(SIGALRM, SIG_IGN);
78         SET_SIGHANDLER(SIGCHLD, SIG_IGN);
79
80 #undef SET_SIGHANDLER
81
82         if (LOG_LV_DEBUG == logger.getLogLevel(l7vs::LOG_CAT_SNMPAGENT_START_STOP)) {
83                 std::string debugstr("out_function set_sighandler()");
84                 logger.putLogDebug(l7vs::LOG_CAT_SNMPAGENT_START_STOP, 0, debugstr, __FILE__, __LINE__);
85         }
86         return 0;
87 }
88
89 /*!
90  * l7snmpagent main
91  * @param[in]   argc    number of argument
92  * @param[in]   argv    array of argument
93  */
94 int
95 main(int argc, char *argv[])
96 {
97         l7vs::Logger    logger;
98         logger.putLogInfo(l7vs::LOG_CAT_SNMPAGENT_START_STOP, 0, "start l7snmpagent", __FILE__, __LINE__);
99
100         if (LOG_LV_DEBUG == logger.getLogLevel(l7vs::LOG_CAT_SNMPAGENT_START_STOP)) {
101                 std::string debugstr;
102                 // TODO set debugstr
103                 logger.putLogDebug(l7vs::LOG_CAT_SNMPAGENT_START_STOP, 0, debugstr, __FILE__, __LINE__);
104         }
105
106         set_sighandlers();
107
108         // TODO whats this comment?
109 //  parameter_register_function_pointer();
110
111         subagent = new l7ag_subagent();
112
113         // start subagent
114         if (!subagent->start()) {
115                 // TODO error log
116         }
117
118         logger.putLogInfo(l7vs::LOG_CAT_SNMPAGENT_START_STOP, 0, "stop l7snmpagent", __FILE__, __LINE__);
119
120         delete subagent;
121         subagent = NULL;
122         return 0;
123 }
124
125 // TODO remove unit test code!!!
126 int
127 l7snmp_main(int argc, char *argv[])
128 {
129         return main(argc, argv);
130 }