2 #include <signal.h> /* signal constants */
3 #include <stdlib.h> /* exit() */
5 /* Workaround for libevent 1.1a: the header assumes u_char is typedef'ed to an
6 * unsigned char, and that "struct timeval" is in scope. */
7 typedef unsigned char u_char
;
20 static void exit_sighandler(int fd
, short event
, void *arg
)
22 wlog("Got signal! Puf!\n");
26 static void passive_to_active_sighandler(int fd
, short event
, void *arg
)
28 wlog("Passive toggle!\n");
29 settings
.passive
= !settings
.passive
;
32 static void logfd_reopen_sighandler(int fd
, short event
, void *arg
)
35 wlog("Log reopened\n");
38 static void enable_read_only_sighandler(int fd
, short event
, void *arg
)
40 if (!settings
.read_only
) {
41 wlog("Changing to read-only mode\n");
42 settings
.read_only
= 1;
44 wlog("Got signal, but already in read-only mode\n");
54 struct event tipc_evt
, tcp_evt
, udp_evt
, sctp_evt
,
55 sigterm_evt
, sigint_evt
,
56 sighup_evt
, sigusr1_evt
, sigusr2_evt
;
60 /* ENABLE_* are preprocessor constants defined on the command line by
64 tipc_fd
= tipc_init();
66 errlog("Error initializing TIPC");
70 event_set(&tipc_evt
, tipc_fd
, EV_READ
| EV_PERSIST
, tipc_recv
,
72 event_add(&tipc_evt
, NULL
);
78 errlog("Error initializing TCP");
82 event_set(&tcp_evt
, tcp_fd
, EV_READ
| EV_PERSIST
,
83 tcp_newconnection
, &tcp_evt
);
84 event_add(&tcp_evt
, NULL
);
90 errlog("Error initializing UDP");
94 event_set(&udp_evt
, udp_fd
, EV_READ
| EV_PERSIST
, udp_recv
,
96 event_add(&udp_evt
, NULL
);
100 sctp_fd
= sctp_init();
102 errlog("Error initializing SCTP");
106 event_set(&sctp_evt
, sctp_fd
, EV_READ
| EV_PERSIST
, sctp_recv
,
108 event_add(&sctp_evt
, NULL
);
111 signal_set(&sigterm_evt
, SIGTERM
, exit_sighandler
, &sigterm_evt
);
112 signal_add(&sigterm_evt
, NULL
);
113 signal_set(&sigint_evt
, SIGINT
, exit_sighandler
, &sigint_evt
);
114 signal_add(&sigint_evt
, NULL
);
115 signal_set(&sighup_evt
, SIGHUP
, logfd_reopen_sighandler
,
117 signal_add(&sighup_evt
, NULL
);
118 signal_set(&sigusr1_evt
, SIGUSR1
, enable_read_only_sighandler
,
120 signal_add(&sigusr1_evt
, NULL
);
121 signal_set(&sigusr2_evt
, SIGUSR2
, passive_to_active_sighandler
,
123 signal_add(&sigusr2_evt
, NULL
);
128 event_del(&tipc_evt
);
134 event_del(&sctp_evt
);
136 signal_del(&sigterm_evt
);
137 signal_del(&sigint_evt
);
138 signal_del(&sigusr1_evt
);
139 signal_del(&sigusr2_evt
);