diff options
author | Lennart Poettering <lennart@poettering.net> | 2004-01-05 22:24:10 +0000 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2004-01-05 22:24:10 +0000 |
commit | d24a3f265ec4344b5502ec57df3cf8358f6f1499 (patch) | |
tree | b869285f72044966ceaa4f6d2d7ab2cb998c03f3 /src/main.c | |
parent | e44bcf6a233173911c2a52f314025abd28281485 (diff) |
many changes
git-svn-id: file:///home/lennart/svn/public/ivam2/trunk@14 dbf6933d-3bce-0310-9bcc-ed052ba35b35
Diffstat (limited to 'src/main.c')
-rw-r--r-- | src/main.c | 41 |
1 files changed, 40 insertions, 1 deletions
@@ -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; } |