#include #include #include #include "main.h" #include "exec.h" #include "modemman.h" #define CHANNELS 1 oop_source* event_source = NULL; 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; } int main_loop(void) { int r = -1; oop_source_sys *sys = NULL; if (!(sys = oop_sys_new())) { daemon_log(LOG_ERR, "Failed to create system source"); goto finish; } event_source = oop_sys_source(sys); assert(event_source); if (child_process_init() < 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); signal(SIGPIPE, SIG_IGN); if (oop_sys_run(sys) == OOP_ERROR) { daemon_log(LOG_ERR, "oop_sys_new() returned OOP_ERROR"); goto finish; } r = 0; finish: event_source->cancel_signal(event_source, SIGTERM, oop_exit_cb, NULL); event_source->cancel_signal(event_source, SIGINT, oop_exit_cb, NULL); modem_manager_done(); child_process_done(); if (sys) { event_source = NULL; oop_sys_delete(sys); } return r; } int main(int argc, char*argv[]) { return main_loop() < 0 ? 1 : 0; }