summaryrefslogtreecommitdiffstats
path: root/src/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c41
1 files changed, 40 insertions, 1 deletions
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;
}