OSDN Git Service

ソースツリー再構成中(ほぼOK?)
[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 }