From d24a3f265ec4344b5502ec57df3cf8358f6f1499 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 5 Jan 2004 22:24:10 +0000 Subject: many changes git-svn-id: file:///home/lennart/svn/public/ivam2/trunk@14 dbf6933d-3bce-0310-9bcc-ed052ba35b35 --- src/main.c | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) (limited to 'src/main.c') diff --git a/src/main.c b/src/main.c index 9710be9..4f5a273 100644 --- a/src/main.c +++ b/src/main.c @@ -5,22 +5,45 @@ #include "main.h" #include "exec.h" #include "modemman.h" +#include "msntab.h" #define CHANNELS 1 oop_source* event_source = NULL; +#define MSNTABLE "../conf/msntab" + static void *oop_exit_cb(oop_source *source, int sig, void *user) { daemon_log(LOG_ERR, "Recieved signal %s", sig == SIGINT ? "SIGINT" : (sig == SIGTERM ? "SIGTERM" : "UNKNWON")); return OOP_HALT; } +static void *oop_reload_cb(oop_source *source, int sig, void *user) { + daemon_log(LOG_ERR, "Reloading MSN table."); + msntab_flush(); + + if (msntab_load(MSNTABLE) < 0) { + daemon_log(LOG_ERR, "Ignoring all calls."); + msntab_flush(); + } + + return OOP_CONTINUE; +} + +static void *oop_dump_cb(oop_source *source, int sig, void *user) { + msntab_dump(); + return OOP_CONTINUE; +} + + int main_loop(void) { int r = -1; oop_source_sys *sys = NULL; + daemon_log(LOG_INFO, "Starting up."); + if (!(sys = oop_sys_new())) { - daemon_log(LOG_ERR, "Failed to create system source"); + daemon_log(LOG_ERR, "Failed to create system source."); goto finish; } @@ -30,12 +53,19 @@ int main_loop(void) { if (child_process_init() < 0) goto finish; + if (msntab_load(MSNTABLE) < 0) + goto finish; + if (modem_manager_init(CHANNELS) < 0) goto finish; event_source->on_signal(event_source, SIGINT, oop_exit_cb, NULL); event_source->on_signal(event_source, SIGTERM, oop_exit_cb, NULL); + event_source->on_signal(event_source, SIGHUP, oop_reload_cb, NULL); + event_source->on_signal(event_source, SIGUSR1, oop_dump_cb, NULL); signal(SIGPIPE, SIG_IGN); + + daemon_log(LOG_INFO, "Start up complete."); if (oop_sys_run(sys) == OOP_ERROR) { daemon_log(LOG_ERR, "oop_sys_new() returned OOP_ERROR"); @@ -45,8 +75,15 @@ int main_loop(void) { r = 0; finish: + + daemon_log(LOG_INFO, "Shutting down."); + event_source->cancel_signal(event_source, SIGTERM, oop_exit_cb, NULL); event_source->cancel_signal(event_source, SIGINT, oop_exit_cb, NULL); + event_source->cancel_signal(event_source, SIGHUP, oop_reload_cb, NULL); + event_source->cancel_signal(event_source, SIGUSR1, oop_dump_cb, NULL); + + msntab_flush(); modem_manager_done(); child_process_done(); @@ -55,6 +92,8 @@ finish: event_source = NULL; oop_sys_delete(sys); } + + daemon_log(LOG_INFO, "Shut down complete."); return r; } -- cgit