/* * Mbuni - Open Source MMS Gateway * * MMSC: Full MMSC startup * * Copyright (C) 2003 - 2008, Digital Solutions Ltd. - http://www.dsmagic.com * * Paul Bagyenda * * This program is free software, distributed under the terms of * the GNU General Public License, with a few exceptions granted (see LICENSE) */ #include #include "mmsc.h" #include "mms_uaprof.h" MmscSettings *settings; List *proxyrelays; static void quit_now(int notused) { stop_mmsrelay(); stop_mmsproxy(); } /* manage the SIGHUP signal */ static void relog_now(int notused) { mms_warning(0, "mmsc", NULL, "SIGHUP received, catching and re-opening logs"); log_reopen(); alog_reopen(); } int main(int argc, char *argv[]) { int cfidx; Octstr *fname; long r_thread = 0; mms_lib_init(); srandom(time(NULL)); cfidx = get_and_set_debugs(argc, argv, NULL); if (argv[cfidx] == NULL) fname = octstr_imm("mbuni.conf"); else fname = octstr_create(argv[cfidx]); mms_info(0, "mmsc", NULL, "----------------------------------------"); mms_info(0, "mmsc", NULL," " MM_NAME " MMSC version %s starting", MMSC_VERSION); settings = mms_load_mmsc_settings(fname,&proxyrelays, 0); octstr_destroy(fname); if (!settings) panic(0, "No MMSC configuration!"); signal(SIGHUP, relog_now); signal(SIGTERM, quit_now); signal(SIGINT, quit_now); signal(SIGPIPE,SIG_IGN); /* Ignore pipe errors. They kill us sometimes for no reason*/ if ((r_thread = gwthread_create((gwthread_func_t *)mmsrelay, NULL)) < 0) panic(0, "Failed to start MMSC Relay component!"); if (mmsproxy() < 0) panic(0, "Failed to start MMSC Relay component!"); /* We are done. Cleanup. */ mms_info(0, "mmsc", NULL, "MMSC shutdown commenced."); gwthread_join(r_thread); gwthread_sleep(2); /* Wait for them to die. */ mms_info(0, "mmsc", NULL, "Final cleanup..."); mms_cleanup_mmsc_settings(settings); /* Stop settings stuff and so on. */ mms_info(0, "mmsc", NULL,"Shutdown complete..."); mms_lib_shutdown(); return 0; }