115 lines
2.7 KiB
C
115 lines
2.7 KiB
C
/*
|
|
* Mbuni - Open Source MMS Gateway
|
|
*
|
|
* MMS Relay, implements message routing
|
|
*
|
|
* Copyright (C) 2003 - 2005, Digital Solutions Ltd. - http://www.dsmagic.com
|
|
*
|
|
* Paul Bagyenda <bagyenda@dsmagic.com>
|
|
*
|
|
* This program is free software, distributed under the terms of
|
|
* the GNU General Public License, with a few exceptions granted (see LICENSE)
|
|
*/
|
|
#include "mmsrelay.h"
|
|
|
|
static Cfg *cfg;
|
|
MmsBoxSettings *settings;
|
|
List *proxyrelays;
|
|
|
|
|
|
static int rstop = 0; /* Set to 1 to stop relay. */
|
|
static void quit_now(int notused)
|
|
{
|
|
rstop = 1;
|
|
}
|
|
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
int cfidx;
|
|
Octstr *fname;
|
|
CfgGroup *grp;
|
|
Octstr *log, *alog;
|
|
long loglevel;
|
|
|
|
long qthread = 0;
|
|
|
|
mms_lib_init();
|
|
|
|
srandom(time(NULL));
|
|
|
|
cfidx = get_and_set_debugs(argc, argv, NULL);
|
|
|
|
if (argv[cfidx] == NULL)
|
|
fname = octstr_imm("mmsc.conf");
|
|
else
|
|
fname = octstr_create(argv[cfidx]);
|
|
|
|
cfg = cfg_create(fname);
|
|
|
|
if (cfg_read(cfg) == -1)
|
|
panic(0, "Couldn't read configuration from '%s'.", octstr_get_cstr(fname));
|
|
|
|
octstr_destroy(fname);
|
|
|
|
info(0, "----------------------------------------");
|
|
info(0, " " MM_NAME " MMSC Relay version %s starting", MMSC_VERSION);
|
|
|
|
grp = cfg_get_single_group(cfg, octstr_imm("core"));
|
|
log = cfg_get(grp, octstr_imm("log-file"));
|
|
if (log != NULL) {
|
|
if (cfg_get_integer(&loglevel, grp, octstr_imm("log-level")) == -1)
|
|
loglevel = 0;
|
|
log_open(octstr_get_cstr(log), loglevel, GW_NON_EXCL);
|
|
octstr_destroy(log);
|
|
}
|
|
|
|
/* Get access log and open it. */
|
|
alog = cfg_get(grp, octstr_imm("access-log"));
|
|
if (alog) {
|
|
alog_open(octstr_get_cstr(alog), 1, 1);
|
|
octstr_destroy(alog);
|
|
}
|
|
|
|
/* Load proxy relays. */
|
|
|
|
proxyrelays = mms_proxy_relays(cfg);
|
|
/* Load settings. */
|
|
|
|
settings = mms_load_mmsbox_settings(cfg);
|
|
|
|
if (!settings)
|
|
panic(0, "No global MMSC configuration!");
|
|
|
|
mms_start_profile_engine(octstr_get_cstr(settings->ua_profile_cache_dir));
|
|
|
|
|
|
signal(SIGHUP, quit_now);
|
|
signal(SIGTERM, quit_now);
|
|
signal(SIGPIPE,SIG_IGN); /* Ignore pipe errors. They kill us sometimes for nothing*/
|
|
|
|
|
|
/* Start global queue runner. */
|
|
info(0, "Starting Global Queue Runner...");
|
|
qthread = gwthread_create((gwthread_func_t *)mbuni_global_queue_runner, &rstop);
|
|
|
|
|
|
/* Start the local queue runner. */
|
|
info(0, "Starting Local Queue Runner...");
|
|
mbuni_mm1_queue_runner(&rstop);
|
|
|
|
|
|
gwthread_join(qthread); /* Wait for it to die... */
|
|
|
|
sleep(2);
|
|
/* It terminates, so start dying... */
|
|
mms_stop_profile_engine(); /* Stop profile stuff. */
|
|
|
|
sleep(2); /* Wait for them to die. */
|
|
return 0;
|
|
};
|
|
|
|
|
|
|
|
|