1
0
Fork 0

config can be loaded by a module (e.g. from a db)

This commit is contained in:
bagyenda 2008-08-28 16:07:31 +00:00
parent bf9218da78
commit c6591fc15b
10 changed files with 311 additions and 197 deletions

View File

@ -1,3 +1,5 @@
2008-08-28 P. A. Bagyenda <bagyenda@dsmagic.com>
* Added ability to load config from a module rather than from file
2008-08-20 P. A. Bagyenda <bagyenda@dsmagic.com>
* Added default mmsc to send-mms-user (Martin)
2008-08-19 P. A. Bagyenda <bagyenda@dsmagic.com>

View File

@ -1,4 +1,4 @@
noinst_LIBRARIES = libmms.a
libmms_a_SOURCES = mms_mmbox.c mms_msg.c mms_queue.c mms_strings.c mms_uaprof.c mms_util.c mms_mm7soap.c mms_cfg.c
EXTRA_DIST=mms_strings.def mms_mm7soap.h mms_mmbox.h mms_msg.h mms_queue.h mms_strings.h mms_uaprof.h mms_util.h mms_cfg.h mms_cfg.def
EXTRA_DIST=mms_strings.def mms_mm7soap.h mms_mmbox.h mms_msg.h mms_queue.h mms_strings.h mms_uaprof.h mms_util.h mms_cfg.h mms_cfg.def mms_cfg-impl.h

View File

@ -0,0 +1,31 @@
/*
* Mbuni - Open Source MMS Gateway
*
* config file functions (when conf is loaded from another source)
*
* Copyright (C) 2003 - 2008, 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)
*/
#ifndef __MMS_CFG_IMPL__INCLUDED__
#define __MMS_CFG_IMPL__INCLUDED__
#include "mms_cfg.h"
typedef struct mCfgImpl mCfgImpl; /* Implementation-specific struct for config info. */
/* each implementation must export struct, symbol 'cfg_funcs'. */
typedef struct mCfgImpFuncs {
mCfgImpl *(*read)(Octstr *init_param);
void (*destroy)(mCfgImpl *);
mCfgGrp *(*cfg_get_single)(mCfgImpl *cfg, Octstr *name);
List *(*get_multi)(mCfgImpl *cfg,Octstr *name); /* List of mCfgGrp */
mCfgGrp *(*get_multi_by_field)(mCfgImpl *cfg, Octstr *name, Octstr *field, Octstr *value);
Octstr *(*get)(mCfgImpl *cfg, mCfgGrp *grp, Octstr *name);
Octstr *(*get_grp_name)(mCfgImpl *, mCfgGrp *);
} mCfgImpFuncs;
#endif

View File

@ -16,7 +16,8 @@
#include <errno.h>
#include "mms_cfg.h"
#include "mms_cfg-impl.h"
#include "mms_util.h"
/* config file representation.
* 'grps' var is indexed by group name.
@ -26,11 +27,14 @@
struct mCfg {
Octstr *file;
Dict *grps;
mCfgImpl *xcfg; /* If set, then this is the real source of conf info. */
mCfgImpFuncs *cfg_funcs; /* Config funcs or NULL */
};
struct mCfgGrp {
struct mCfgGrp { /* when using file-based, this is our implementation of a group. */
Octstr *name;
Dict *fields;
Dict *fields;
};
static void fixup_value(Octstr *value, int lineno)
@ -138,6 +142,9 @@ mCfg *mms_cfg_read(Octstr *file)
cfg = gw_malloc(sizeof *cfg);
cfg->file = octstr_duplicate(file);
cfg->grps = dict_create(7, NULL);
cfg->xcfg = NULL;
cfg->cfg_funcs = NULL;
lines = octstr_split(sf, octstr_imm("\n"));
for (i = 0, n = gwlist_len(lines); i < n; i++) {
@ -209,6 +216,23 @@ mCfg *mms_cfg_read(Octstr *file)
gwlist_destroy(lines, (gwlist_item_destructor_t *)octstr_destroy);
octstr_destroy(sf);
/* Now check if config-source is set, use that. */
if ((grp = mms_cfg_get_single(cfg, octstr_imm("config-source"))) != NULL) {
Octstr *init = mms_cfg_get(cfg, grp, octstr_imm("config-library-init-param"));
cfg->cfg_funcs = _mms_load_module(cfg, grp, "config-library", "cfg_funcs", NULL);
if (cfg->cfg_funcs == NULL ||
cfg->cfg_funcs->read == NULL ||
(cfg->xcfg = cfg->cfg_funcs->read(init)) == NULL) {
error(0, "Failed to load cfg reader library from conf!");
mms_cfg_destroy(cfg);
cfg = NULL;
}
octstr_destroy(init);
}
return cfg;
}
@ -241,6 +265,11 @@ void mms_cfg_destroy(mCfg *cfg)
gwlist_destroy(l, (gwlist_item_destructor_t *)octstr_destroy);
dict_destroy(cfg->grps);
octstr_destroy(cfg->file);
if (cfg->xcfg && cfg->cfg_funcs &&
cfg->cfg_funcs->destroy)
cfg->cfg_funcs->destroy(cfg->xcfg);
gw_free(cfg);
}
@ -249,46 +278,86 @@ mCfgGrp *mms_cfg_get_single(mCfg *cfg, Octstr *name)
gw_assert(name);
gw_assert(is_multigroup(name) == 0);
return dict_get(cfg->grps, name);
if (cfg->xcfg == NULL)
return dict_get(cfg->grps, name);
else
return cfg->cfg_funcs->cfg_get_single(cfg->xcfg, name);
}
List *mms_cfg_get_multi(mCfg *cfg, Octstr *name)
{
List *l = NULL, *r;
int i;
gw_assert(name);
gw_assert(is_multigroup(name) == 1);
r = dict_get(cfg->grps, name);
if (r)
for (i = 0, l = gwlist_create(); i < gwlist_len(r); i++)
gwlist_append(l, gwlist_get(r,i));
return l;
if (cfg->xcfg == NULL) {
List *l = NULL, *r;
int i;
r = dict_get(cfg->grps, name);
if (r)
for (i = 0, l = gwlist_create(); i < gwlist_len(r); i++)
gwlist_append(l, gwlist_get(r,i));
return l;
} else
return cfg->cfg_funcs->get_multi(cfg->xcfg, name);
}
Octstr *mms_cfg_get(mCfgGrp *grp, Octstr *name)
mCfgGrp *mms_get_multi_by_field(mCfg *cfg, Octstr *name, Octstr *field, Octstr *value)
{
gw_assert(name);
gw_assert(is_multigroup(name) == 1);
if (!valid_in_group(name, field))
panic(0, "Request for invalid field/variable `%s' in group `%s', unexpected!",
octstr_get_cstr(field), octstr_get_cstr(name));
if (cfg->xcfg == NULL) {
mCfgGrp *grp;
Octstr *val;
List *r;
int i;
r = dict_get(cfg->grps, name);
if (r)
for (i = 0; i < gwlist_len(r); i++)
if ((grp = gwlist_get(r, i)) != NULL &&
(val = dict_get(grp->fields, field)) != NULL &&
octstr_compare(val, value) == 0)
return grp;
return NULL;
} else
return cfg->cfg_funcs->get_multi_by_field(cfg->xcfg, name, field, value);
}
Octstr *mms_cfg_get(mCfg *cfg, mCfgGrp *grp, Octstr *name)
{
Octstr *val;
gw_assert(grp);
if (!valid_in_group(grp->name, name))
Octstr *grp_name = cfg->xcfg ? cfg->cfg_funcs->get_grp_name(cfg->xcfg, grp) :
octstr_duplicate(grp->name);
if (!valid_in_group(grp_name, name))
panic(0, "Request for invalid field/variable `%s' in group `%s', unexpected!",
octstr_get_cstr(name), octstr_get_cstr(grp->name));
octstr_get_cstr(name), octstr_get_cstr(grp_name));
val = dict_get(grp->fields, name);
if (!val)
return NULL;
else
return octstr_duplicate(val);
octstr_destroy(grp_name);
if (cfg->xcfg == NULL) {
gw_assert(grp);
val = dict_get(grp->fields, name);
val = octstr_duplicate(val);
} else {
val = cfg->cfg_funcs->get(cfg->xcfg, grp, name);
if (val)
fixup_value(val, 0);
}
return val;
}
int mms_cfg_get_int(mCfgGrp *grp, Octstr *name, long *n)
int mms_cfg_get_int(mCfg *cfg, mCfgGrp *grp, Octstr *name, long *n)
{
Octstr *val = mms_cfg_get(grp, name);
Octstr *val = mms_cfg_get(cfg, grp, name);
int ret;
if (!val)
return -1;
@ -298,9 +367,9 @@ int mms_cfg_get_int(mCfgGrp *grp, Octstr *name, long *n)
}
int mms_cfg_get_bool(mCfgGrp *grp, Octstr *name, int *bool)
int mms_cfg_get_bool(mCfg *cfg, mCfgGrp *grp, Octstr *name, int *bool)
{
Octstr *val = mms_cfg_get(grp, name);
Octstr *val = mms_cfg_get(cfg, grp, name);
int ret = 0;
if (!val)
return -1;
@ -323,9 +392,9 @@ int mms_cfg_get_bool(mCfgGrp *grp, Octstr *name, int *bool)
return ret;
}
List *mms_cfg_get_list(mCfgGrp *grp, Octstr *name)
List *mms_cfg_get_list(mCfg *cfg, mCfgGrp *grp, Octstr *name)
{
Octstr *val = mms_cfg_get(grp, name);
Octstr *val = mms_cfg_get(cfg, grp, name);
List *l;
if (val == NULL)

View File

@ -3,7 +3,7 @@
*
* MMS Config structure definitions
*
* Copyright (C) 2003 - 2005, Digital Solutions Ltd. - http://www.dsmagic.com
* Copyright (C) 2003 - 20058 Digital Solutions Ltd. - http://www.dsmagic.com
*
* Paul Bagyenda <bagyenda@dsmagic.com>
*
@ -23,6 +23,16 @@
#error MULTI_GROUP not defined.
#endif
/* config-source: If it exists, the rest of the conf file is
* ignored. Instead, use the provided lib as the reader of the
* config info. (See mms_cfg-impl.h for details)
*/
SINGLE_GROUP(config-source,
OCTSTR(config-library)
OCTSTR(config-library-init-param)
)
SINGLE_GROUP(core,
OCTSTR(log-file)
OCTSTR(log-level)

View File

@ -34,22 +34,24 @@ mCfgGrp *mms_cfg_get_single(mCfg *cfg, Octstr *name);
/* Get a multiple groups all of same name. */
List *mms_cfg_get_multi(mCfg *cfg,Octstr *name);
mCfgGrp *mms_get_multi_by_field(mCfg *cfg, Octstr *name, Octstr *field, Octstr *value);
/* Get a string field value from a group. */
Octstr *mms_cfg_get(mCfgGrp *grp, Octstr *name);
Octstr *mms_cfg_get(mCfg *cfg, mCfgGrp *grp, Octstr *name);
/* Get an integer field value from a group.
* returns 0 on success, -1 on error.
*/
int mms_cfg_get_int(mCfgGrp *grp, Octstr *name, long *n);
int mms_cfg_get_int(mCfg *cfg, mCfgGrp *grp, Octstr *name, long *n);
/* Get a boolean field value from a group.
* returns 0 on success, -1 on error
*/
int mms_cfg_get_bool(mCfgGrp *grp, Octstr *name, int *bool);
int mms_cfg_get_bool(mCfg *cfg, mCfgGrp *grp, Octstr *name, int *bool);
/* Get a field value from a group. */
List *mms_cfg_get_list(mCfgGrp *grp, Octstr *name);
List *mms_cfg_get_list(mCfg *cfg, mCfgGrp *grp, Octstr *name);
#endif

View File

@ -30,9 +30,9 @@
#include "mms_queue.h"
#include "mms_uaprof.h"
Octstr *_mms_cfg_getx(mCfgGrp *grp, Octstr *item)
Octstr *_mms_cfg_getx(mCfg *cfg, mCfgGrp *grp, Octstr *item)
{
Octstr *v = mms_cfg_get(grp, item);
Octstr *v = mms_cfg_get(cfg, grp, item);
void *x = v ? v : octstr_create("");
@ -40,7 +40,7 @@ Octstr *_mms_cfg_getx(mCfgGrp *grp, Octstr *item)
}
int mms_load_core_settings(mCfgGrp *cgrp)
int mms_load_core_settings(mCfg *cfg, mCfgGrp *cgrp)
{
Octstr *log, *alog;
Octstr *http_proxy_host;
@ -51,40 +51,40 @@ int mms_load_core_settings(mCfgGrp *cgrp)
panic(0,"Missing required group `core' in config file!");
/* Set the log file. */
log = mms_cfg_get(cgrp, octstr_imm("log-file"));
log = mms_cfg_get(cfg, cgrp, octstr_imm("log-file"));
if (log != NULL) {
if (mms_cfg_get_int(cgrp, octstr_imm("log-level"), &loglevel) == -1)
if (mms_cfg_get_int(cfg, cgrp, octstr_imm("log-level"), &loglevel) == -1)
loglevel = 0;
log_open(octstr_get_cstr(log), loglevel, GW_NON_EXCL);
octstr_destroy(log);
}
/* Get access log and open it. */
alog = mms_cfg_get(cgrp, octstr_imm("access-log"));
alog = mms_cfg_get(cfg, cgrp, octstr_imm("access-log"));
if (alog) {
alog_open(octstr_get_cstr(alog), 1, 1);
octstr_destroy(alog);
}
if ((our_interface = mms_cfg_get(cgrp, octstr_imm("http-interface-name"))) != NULL) {
if ((our_interface = mms_cfg_get(cfg, cgrp, octstr_imm("http-interface-name"))) != NULL) {
http_set_interface(our_interface);
octstr_destroy(our_interface);
}
/* look for http proxy. If set, use it. */
if ((http_proxy_host = mms_cfg_get(cgrp, octstr_imm("http-proxy-host"))) != NULL) {
if ((http_proxy_host = mms_cfg_get(cfg, cgrp, octstr_imm("http-proxy-host"))) != NULL) {
Octstr *username = mms_cfg_get(cgrp,
Octstr *username = mms_cfg_get(cfg, cgrp,
octstr_imm("http-proxy-username"));
Octstr *password = mms_cfg_get(cgrp,
Octstr *password = mms_cfg_get(cfg, cgrp,
octstr_imm("http-proxy-password"));
List *exceptions = mms_cfg_get_list(cgrp,
List *exceptions = mms_cfg_get_list(cfg, cgrp,
octstr_imm("http-proxy-exceptions"));
Octstr *except_regex = mms_cfg_get(cgrp,
Octstr *except_regex = mms_cfg_get(cfg, cgrp,
octstr_imm("http-proxy-exceptions-regex"));
long http_proxy_port = -1;
mms_cfg_get_int(cgrp, octstr_imm("http-proxy-port"), &http_proxy_port);
mms_cfg_get_int(cfg, cgrp, octstr_imm("http-proxy-port"), &http_proxy_port);
if (http_proxy_port > 0)
http_use_proxy(http_proxy_host, http_proxy_port, 0,
@ -112,18 +112,18 @@ int mms_load_core_settings(mCfgGrp *cgrp)
* load SSL client and SSL server public certificates
* and private keys
*/
ssl_client_certkey_file = mms_cfg_get(cgrp, octstr_imm("ssl-client-certkey-file"));
ssl_client_certkey_file = mms_cfg_get(cfg, cgrp, octstr_imm("ssl-client-certkey-file"));
if (ssl_client_certkey_file != NULL)
use_global_client_certkey_file(ssl_client_certkey_file);
ssl_server_cert_file = mms_cfg_get(cgrp, octstr_imm("ssl-server-cert-file"));
ssl_server_key_file = mms_cfg_get(cgrp, octstr_imm("ssl-server-key-file"));
ssl_server_cert_file = mms_cfg_get(cfg, cgrp, octstr_imm("ssl-server-cert-file"));
ssl_server_key_file = mms_cfg_get(cfg, cgrp, octstr_imm("ssl-server-key-file"));
if (ssl_server_cert_file != NULL && ssl_server_key_file != NULL)
use_global_server_certkey_file(ssl_server_cert_file,
ssl_server_key_file);
ssl_trusted_ca_file = mms_cfg_get(cgrp, octstr_imm("ssl-trusted-ca-file"));
ssl_trusted_ca_file = mms_cfg_get(cfg, cgrp, octstr_imm("ssl-trusted-ca-file"));
use_global_trusted_ca_file(ssl_trusted_ca_file);
@ -1826,13 +1826,13 @@ void strip_non_essential_headers(MIMEEntity *mime)
}
void *_mms_load_module(mCfgGrp *grp, char *config_key, char *symbolname,
void *_mms_load_module(mCfg *cfg, mCfgGrp *grp, char *config_key, char *symbolname,
void *shell_builtin)
{
Octstr *s = NULL;
void *retval = NULL;
s = mms_cfg_get(grp, octstr_imm(config_key));
s = mms_cfg_get(cfg, grp, octstr_imm(config_key));
if (s) {
void *x;

View File

@ -66,7 +66,7 @@
enum mms_loc_t {MMS_LOC_MMBOX = 1, MMS_LOC_MQUEUE=2};
extern int mms_load_core_settings(mCfgGrp *cgrp);
extern int mms_load_core_settings(mCfg *cfg, mCfgGrp *cgrp);
extern Octstr *mms_maketransid(char *qf, Octstr *mmscname);
@ -144,7 +144,7 @@ int mm_lockfile(int fd, char *fname, int shouldblock);
int _mms_gw_isprint(int c);
/* Special form of cfg_get which returns zero-length string when there is nothing. */
Octstr *_mms_cfg_getx(mCfgGrp *grp, Octstr *item);
Octstr *_mms_cfg_getx(mCfg *cfg, mCfgGrp *grp, Octstr *item);
/* Get envelope data from message headers. */
void mms_collect_envdata_from_msgheaders(List *mh, List **xto,
@ -224,7 +224,7 @@ void add_multipart_form_field(MIMEEntity *multipart, char *field_name,
MIMEEntity *multipart_from_urls(List *url_list);
/* load a shared object, then load a symbol from it. */
void *_mms_load_module(mCfgGrp *grp, char *config_key, char *symbolname,
void *_mms_load_module(mCfg *cfg, mCfgGrp *grp, char *config_key, char *symbolname,
void *shell_builtin);

View File

@ -59,28 +59,28 @@ int mms_load_mmsbox_settings(mCfg *cfg, gwthread_func_t *mmsc_handler_func)
if (grp == NULL)
panic(0,"Missing required group `mbuni' in config file!");
mms_load_core_settings(cgrp);
mms_load_core_settings(cfg, cgrp);
sendmms_users = gwlist_create();
mms_services = gwlist_create();
mmscs = gwlist_create();
if (mms_cfg_get_int(grp,
if (mms_cfg_get_int(cfg, grp,
octstr_imm("maximum-send-attempts"), &mmsbox_maxsendattempts) < 0)
mmsbox_maxsendattempts = MAXQTRIES;
if (mms_cfg_get_int(grp,
if (mms_cfg_get_int(cfg, grp,
octstr_imm("send-attempt-back-off"), &mmsbox_send_back_off) == -1)
mmsbox_send_back_off = BACKOFF_FACTOR;
if (mms_cfg_get_int(grp, octstr_imm("default-message-expiry"), &default_msgexpiry) == -1)
if (mms_cfg_get_int(cfg, grp, octstr_imm("default-message-expiry"), &default_msgexpiry) == -1)
default_msgexpiry = DEFAULT_EXPIRE;
if (mms_cfg_get_int(grp, octstr_imm("max-send-threads"), &maxthreads) < 0 ||
if (mms_cfg_get_int(cfg, grp, octstr_imm("max-send-threads"), &maxthreads) < 0 ||
maxthreads < 1)
maxthreads = 10;
s = mms_cfg_get(grp, octstr_imm("queue-run-interval"));
s = mms_cfg_get(cfg, grp, octstr_imm("queue-run-interval"));
if (s) {
queue_interval = atof(octstr_get_cstr(s));
@ -89,14 +89,14 @@ int mms_load_mmsbox_settings(mCfg *cfg, gwthread_func_t *mmsc_handler_func)
if (queue_interval <= 0)
queue_interval = QUEUERUN_INTERVAL;
if ((sendmail_cmd = mms_cfg_get(grp, octstr_imm("send-mail-prog"))) == NULL)
if ((sendmail_cmd = mms_cfg_get(cfg, grp, octstr_imm("send-mail-prog"))) == NULL)
sendmail_cmd = octstr_imm("/usr/sbin/sendmail -f '%f' '%t'");
if ((myhostname = mms_cfg_get(grp, octstr_imm("hostname"))) == NULL)
if ((myhostname = mms_cfg_get(cfg, grp, octstr_imm("hostname"))) == NULL)
myhostname = octstr_imm("localhost");
gdir = mms_cfg_get(grp, octstr_imm("storage-directory"));
gdir = mms_cfg_get(cfg, grp, octstr_imm("storage-directory"));
if (gdir == NULL)
gdir = octstr_imm(".");
@ -107,11 +107,11 @@ int mms_load_mmsbox_settings(mCfg *cfg, gwthread_func_t *mmsc_handler_func)
panic(0, "Failed to create MMSBox storage directory: %s - %s!",
octstr_get_cstr(gdir), strerror(errno));
if ((qfs = _mms_load_module(grp, "queue-manager-module", "qfuncs", NULL)) == NULL) {
if ((qfs = _mms_load_module(cfg, grp, "queue-manager-module", "qfuncs", NULL)) == NULL) {
qfs = &default_qfuncs; /* default queue handler. */
qfs->mms_init_queue_module(gdir, maxthreads);
} else {
Octstr *s = _mms_cfg_getx(grp, octstr_imm("queue-module-init-data"));
Octstr *s = _mms_cfg_getx(cfg, grp, octstr_imm("queue-module-init-data"));
if (qfs->mms_init_queue_module(s, maxthreads) != 0)
panic(0, "failed to initialise queue module, with data: %s",
octstr_get_cstr(s));
@ -137,37 +137,37 @@ int mms_load_mmsbox_settings(mCfg *cfg, gwthread_func_t *mmsc_handler_func)
octstr_get_cstr(dlr_dir), strerror(errno));
unified_prefix = _mms_cfg_getx(grp, octstr_imm("unified-prefix"));
unified_prefix = _mms_cfg_getx(cfg, grp, octstr_imm("unified-prefix"));
if ((s = mms_cfg_get(grp, octstr_imm("strip-prefixes"))) != NULL) {
if ((s = mms_cfg_get(cfg, grp, octstr_imm("strip-prefixes"))) != NULL) {
strip_prefixes = octstr_split(s, octstr_imm(";"));
octstr_destroy(s);
} else
strip_prefixes = NULL;
mms_cfg_get_int(grp, octstr_imm("sendmms-port"), &sendmms_port.port);
mms_cfg_get_int(cfg, grp, octstr_imm("sendmms-port"), &sendmms_port.port);
#ifdef HAVE_LIBSSL
mms_cfg_get_bool(grp, octstr_imm("sendmms-port-ssl"), &send_port_ssl);
mms_cfg_get_bool(cfg, grp, octstr_imm("sendmms-port-ssl"), &send_port_ssl);
#endif
if (http_open_port(sendmms_port.port, send_port_ssl) < 0)
error(0, "MMSBox: Failed to start sendmms HTTP server on %ld: %s!",
sendmms_port.port,
strerror(errno));
sendmms_port.allow_ip = mms_cfg_get(grp, octstr_imm("allow-ip"));
sendmms_port.deny_ip = mms_cfg_get(grp, octstr_imm("deny-ip"));
sendmms_port.allow_ip = mms_cfg_get(cfg, grp, octstr_imm("allow-ip"));
sendmms_port.deny_ip = mms_cfg_get(cfg, grp, octstr_imm("deny-ip"));
/* load the filter if any. */
if ((mt_filter = _mms_load_module(grp, "mmsbox-mt-filter-library", "mmsbox_mt_filter", NULL)) != NULL)
if ((mt_filter = _mms_load_module(cfg, grp, "mmsbox-mt-filter-library", "mmsbox_mt_filter", NULL)) != NULL)
info(0, "MMSBox: Loaded MT Filter [%s]", mt_filter->name);
mms_cfg_get_bool(grp, octstr_imm("mmsbox-mt-always-multipart"), &mt_multipart);
mms_cfg_get_bool(cfg, grp, octstr_imm("mmsbox-mt-always-multipart"), &mt_multipart);
/* load the resolver module. */
if ((rfs = _mms_load_module(grp, "resolver-library", "mmsbox_resolvefuncs", &mmsbox_resolvefuncs_shell)) == NULL)
if ((rfs = _mms_load_module(cfg, grp, "resolver-library", "mmsbox_resolvefuncs", &mmsbox_resolvefuncs_shell)) == NULL)
rfs = &mmsbox_resolvefuncs;
rfs_settings = _mms_cfg_getx(grp, octstr_imm("resolver-module-parameters"));
rfs_settings = _mms_cfg_getx(cfg, grp, octstr_imm("resolver-module-parameters"));
rfs_data = rfs->mmsbox_resolvermodule_init(rfs_settings ? octstr_get_cstr(rfs_settings) : NULL);
/* Now get sendmms users. */
@ -178,12 +178,12 @@ int mms_load_mmsbox_settings(mCfg *cfg, gwthread_func_t *mmsc_handler_func)
memset(u, 0, sizeof *u);
u->user = _mms_cfg_getx(x, octstr_imm("username"));
u->pass = _mms_cfg_getx(x, octstr_imm("password"));
u->faked_sender = mms_cfg_get(x, octstr_imm("faked-sender"));
u->dlr_url = _mms_cfg_getx(x, octstr_imm("delivery-report-url"));
u->rr_url = _mms_cfg_getx(x, octstr_imm("read-report-url"));
u->mmsc = mms_cfg_get(x, octstr_imm("mmsc"));
u->user = _mms_cfg_getx(cfg, x, octstr_imm("username"));
u->pass = _mms_cfg_getx(cfg, x, octstr_imm("password"));
u->faked_sender = mms_cfg_get(cfg, x, octstr_imm("faked-sender"));
u->dlr_url = _mms_cfg_getx(cfg, x, octstr_imm("delivery-report-url"));
u->rr_url = _mms_cfg_getx(cfg, x, octstr_imm("read-report-url"));
u->mmsc = mms_cfg_get(cfg, x, octstr_imm("mmsc"));
gwlist_append(sendmms_users, u);
}
gwlist_destroy(l, NULL);
@ -200,23 +200,23 @@ int mms_load_mmsbox_settings(mCfg *cfg, gwthread_func_t *mmsc_handler_func)
memset(m, 0, sizeof *m);
m->id = _mms_cfg_getx(x, octstr_imm("id"));
m->id = _mms_cfg_getx(cfg, x, octstr_imm("id"));
if (octstr_len(m->id) < 1)
panic(0,"Missing required value `id' in config file!");
m->group_id = mms_cfg_get(x, octstr_imm("group-id"));
m->group_id = mms_cfg_get(cfg, x, octstr_imm("group-id"));
if (m->group_id == NULL)
m->group_id = octstr_duplicate(m->id);
m->mmsc_url = _mms_cfg_getx(x, octstr_imm("mmsc-url"));
m->mmsc_url = _mms_cfg_getx(cfg, x, octstr_imm("mmsc-url"));
m->allowed_prefix = mms_cfg_get(x, octstr_imm("allowed-prefix"));
m->denied_prefix = mms_cfg_get(x, octstr_imm("denied-prefix"));
m->allowed_prefix = mms_cfg_get(cfg, x, octstr_imm("allowed-prefix"));
m->denied_prefix = mms_cfg_get(cfg, x, octstr_imm("denied-prefix"));
m->allowed_sender_prefix = mms_cfg_get(x, octstr_imm("allowed-sender-prefix"));
m->denied_sender_prefix = mms_cfg_get(x, octstr_imm("denied-sender-prefix"));
m->allowed_sender_prefix = mms_cfg_get(cfg, x, octstr_imm("allowed-sender-prefix"));
m->denied_sender_prefix = mms_cfg_get(cfg, x, octstr_imm("denied-sender-prefix"));
m->incoming.allow_ip = mms_cfg_get(x, octstr_imm("allow-ip"));
m->incoming.deny_ip = mms_cfg_get(x, octstr_imm("deny-ip"));
m->incoming.allow_ip = mms_cfg_get(cfg, x, octstr_imm("allow-ip"));
m->incoming.deny_ip = mms_cfg_get(cfg, x, octstr_imm("deny-ip"));
info(0, "MMSC[%s], allow=[%s], deny=[%s] group_id=[%s]",
octstr_get_cstr(m->id),
@ -224,13 +224,13 @@ int mms_load_mmsbox_settings(mCfg *cfg, gwthread_func_t *mmsc_handler_func)
octstr_get_cstr(m->incoming.deny_ip),
octstr_get_cstr(m->group_id));
m->incoming.user = _mms_cfg_getx(x, octstr_imm("incoming-username"));
m->incoming.pass = _mms_cfg_getx(x, octstr_imm("incoming-password"));
mms_cfg_get_int(x, octstr_imm("incoming-port"), &m->incoming.port);
m->incoming.user = _mms_cfg_getx(cfg, x, octstr_imm("incoming-username"));
m->incoming.pass = _mms_cfg_getx(cfg, x, octstr_imm("incoming-password"));
mms_cfg_get_int(cfg, x, octstr_imm("incoming-port"), &m->incoming.port);
#ifdef HAVE_LIBSSL
mms_cfg_get_bool(x, octstr_imm("incoming-port-ssl"), &ssl);
mms_cfg_get_bool(cfg, x, octstr_imm("incoming-port-ssl"), &ssl);
#endif
if ((tmp = mms_cfg_get(x, octstr_imm("max-throughput"))) != NULL) {
if ((tmp = mms_cfg_get(cfg, x, octstr_imm("max-throughput"))) != NULL) {
if (octstr_parse_double(&m->throughput, tmp, 0) == -1)
m->throughput = 0;
info(0, "Set throughput to %.3f for mmsc id <%s>",
@ -238,21 +238,21 @@ int mms_load_mmsbox_settings(mCfg *cfg, gwthread_func_t *mmsc_handler_func)
octstr_destroy(tmp);
}
type = _mms_cfg_getx(x, octstr_imm("type"));
type = _mms_cfg_getx(cfg, x, octstr_imm("type"));
if (octstr_case_compare(type, octstr_imm("eaif")) == 0)
m->type = EAIF_MMSC;
else if (octstr_case_compare(type, octstr_imm("soap")) == 0)
m->type = SOAP_MMSC;
else if (octstr_case_compare(type, octstr_imm("custom")) == 0) {
m->type = CUSTOM_MMSC;
m->settings = _mms_cfg_getx(x, octstr_imm("custom-settings"));
m->settings = _mms_cfg_getx(cfg, x, octstr_imm("custom-settings"));
/* also load the libary. */
if ((m->fns = _mms_load_module(x, "mmsc-library", "mmsc_funcs", NULL)) == NULL)
if ((m->fns = _mms_load_module(cfg, x, "mmsc-library", "mmsc_funcs", NULL)) == NULL)
panic(0, "failed to load MMSC libary functions from module!");
} else
warning(0, "MMSBox: Unknown MMSC type [%s]!",
octstr_get_cstr(type));
if ((xver = _mms_cfg_getx(x, octstr_imm("mm7-version"))) != NULL &&
if ((xver = _mms_cfg_getx(cfg, x, octstr_imm("mm7-version"))) != NULL &&
octstr_len(xver) > 0)
sscanf(octstr_get_cstr(xver),
"%d.%d.%d",
@ -268,7 +268,7 @@ int mms_load_mmsbox_settings(mCfg *cfg, gwthread_func_t *mmsc_handler_func)
}
}
if ((s = mms_cfg_get(x, octstr_imm("mm7-soap-xmlns"))) != NULL) {
if ((s = mms_cfg_get(cfg, x, octstr_imm("mm7-soap-xmlns"))) != NULL) {
strncpy(m->ver.xmlns, octstr_get_cstr(s), sizeof m->ver.xmlns);
m->ver.xmlns[-1 + sizeof m->ver.xmlns] = 0; /* NULL terminate, just in case. */
octstr_destroy(s);
@ -276,13 +276,13 @@ int mms_load_mmsbox_settings(mCfg *cfg, gwthread_func_t *mmsc_handler_func)
m->ver.xmlns[0] = 0;
m->ver.use_mm7_namespace = 1;
mms_cfg_get_bool(x, octstr_imm("use-mm7-soap-namespace-prefix"), &m->ver.use_mm7_namespace);
mms_cfg_get_bool(cfg, x, octstr_imm("use-mm7-soap-namespace-prefix"), &m->ver.use_mm7_namespace);
octstr_destroy(xver);
octstr_destroy(type);
/* Init for filter. */
if ((s = mms_cfg_get(x, octstr_imm("mm7-mt-filter-params"))) != NULL) {
if ((s = mms_cfg_get(cfg, x, octstr_imm("mm7-mt-filter-params"))) != NULL) {
if (mt_filter)
m->use_mt_filter = (mt_filter->init(m->mmsc_url, m->id, s) == 1);
else
@ -296,13 +296,13 @@ int mms_load_mmsbox_settings(mCfg *cfg, gwthread_func_t *mmsc_handler_func)
} else
m->use_mt_filter = 0;
mms_cfg_get_bool(x, octstr_imm("reroute"), &m->reroute);
mms_cfg_get_bool(x, octstr_imm("reroute-add-sender-to-subject"), &m->reroute_mod_subject);
m->reroute_mmsc_id = mms_cfg_get(x, octstr_imm("reroute-mmsc-id"));
mms_cfg_get_bool(cfg, x, octstr_imm("reroute"), &m->reroute);
mms_cfg_get_bool(cfg, x, octstr_imm("reroute-add-sender-to-subject"), &m->reroute_mod_subject);
m->reroute_mmsc_id = mms_cfg_get(cfg, x, octstr_imm("reroute-mmsc-id"));
if (m->reroute_mmsc_id != NULL && m->reroute == 0)
warning(0, "MMSBox: reroute-mmsc-id parameter set but reroute=false!");
mms_cfg_get_bool(x, octstr_imm("no-sender-address"), &m->no_senderaddress);
mms_cfg_get_bool(cfg, x, octstr_imm("no-sender-address"), &m->no_senderaddress);
m->mutex = mutex_create();
/* finally start the thingie. */
@ -341,73 +341,73 @@ int mms_load_mmsbox_settings(mCfg *cfg, gwthread_func_t *mmsc_handler_func)
MmsService *m = gw_malloc(sizeof *m);
Octstr *s;
m->name = _mms_cfg_getx(x, octstr_imm("name"));
if ((m->url = mms_cfg_get(x, octstr_imm("get-url"))) != NULL)
m->name = _mms_cfg_getx(cfg, x, octstr_imm("name"));
if ((m->url = mms_cfg_get(cfg, x, octstr_imm("get-url"))) != NULL)
m->type = TRANS_TYPE_GET_URL;
else if ((m->url = mms_cfg_get(x, octstr_imm("post-url"))) != NULL)
else if ((m->url = mms_cfg_get(cfg, x, octstr_imm("post-url"))) != NULL)
m->type = TRANS_TYPE_POST_URL;
else if ((m->url = mms_cfg_get(x, octstr_imm("file"))) != NULL)
else if ((m->url = mms_cfg_get(cfg, x, octstr_imm("file"))) != NULL)
m->type = TRANS_TYPE_FILE;
else if ((m->url = mms_cfg_get(x, octstr_imm("exec"))) != NULL)
else if ((m->url = mms_cfg_get(cfg, x, octstr_imm("exec"))) != NULL)
m->type = TRANS_TYPE_EXEC;
else if ((m->url = mms_cfg_get(x, octstr_imm("text"))) != NULL)
else if ((m->url = mms_cfg_get(cfg, x, octstr_imm("text"))) != NULL)
m->type = TRANS_TYPE_TEXT;
else
panic(0, "MMSBox: Service [%s] has no url!", octstr_get_cstr(m->name));
m->faked_sender = mms_cfg_get(x, octstr_imm("faked-sender"));
m->faked_sender = mms_cfg_get(cfg, x, octstr_imm("faked-sender"));
m->isdefault = 0;
mms_cfg_get_bool(x, octstr_imm("catch-all"), &m->isdefault);
mms_cfg_get_bool(cfg, x, octstr_imm("catch-all"), &m->isdefault);
if (m->isdefault) {
if (catchall)
warning(0, "MMSBox: Multiple default mms services defined!");
catchall = m;
}
if (mms_cfg_get_bool(x, octstr_imm("omit-empty"), &m->omitempty) < 0)
if (mms_cfg_get_bool(cfg, x, octstr_imm("omit-empty"), &m->omitempty) < 0)
m->omitempty = 0;
if (mms_cfg_get_bool(x, octstr_imm("suppress-reply"), &m->noreply) < 0)
if (mms_cfg_get_bool(cfg, x, octstr_imm("suppress-reply"), &m->noreply) < 0)
m->noreply = 0;
mms_cfg_get_bool(x, octstr_imm("accept-x-mbuni-headers"), &m->accept_x_headers);
mms_cfg_get_bool(cfg, x, octstr_imm("accept-x-mbuni-headers"), &m->accept_x_headers);
if ((s = mms_cfg_get(x, octstr_imm("pass-thro-headers"))) != NULL) {
if ((s = mms_cfg_get(cfg, x, octstr_imm("pass-thro-headers"))) != NULL) {
m->passthro_headers = octstr_split(s, octstr_imm(","));
octstr_destroy(s);
} else
m->passthro_headers = NULL;
mms_cfg_get_bool(x, octstr_imm("assume-plain-text"), &m->assume_plain_text);
mms_cfg_get_bool(cfg, x, octstr_imm("assume-plain-text"), &m->assume_plain_text);
if ((s = mms_cfg_get(x, octstr_imm("accepted-mmscs"))) != NULL) {
if ((s = mms_cfg_get(cfg, x, octstr_imm("accepted-mmscs"))) != NULL) {
m->allowed_mmscs = octstr_split(s, octstr_imm(";"));
octstr_destroy(s);
} else
m->allowed_mmscs = NULL; /* means allow all. */
if ((s = mms_cfg_get(x, octstr_imm("denied-mmscs"))) != NULL) {
if ((s = mms_cfg_get(cfg, x, octstr_imm("denied-mmscs"))) != NULL) {
m->denied_mmscs = octstr_split(s, octstr_imm(";"));
octstr_destroy(s);
} else
m->denied_mmscs = NULL; /* means allow all. */
m->allowed_receiver_prefix = mms_cfg_get(x, octstr_imm("allowed-receiver-prefix"));
m->denied_receiver_prefix = mms_cfg_get(x, octstr_imm("denied-receiver-prefix"));
m->allowed_receiver_prefix = mms_cfg_get(cfg, x, octstr_imm("allowed-receiver-prefix"));
m->denied_receiver_prefix = mms_cfg_get(cfg, x, octstr_imm("denied-receiver-prefix"));
/* Get key words. Start with aliases to make life easier. */
if ((s = mms_cfg_get(x, octstr_imm("aliases"))) != NULL) {
if ((s = mms_cfg_get(cfg, x, octstr_imm("aliases"))) != NULL) {
m->keywords = octstr_split(s, octstr_imm(";"));
octstr_destroy(s);
} else
m->keywords = gwlist_create();
s = mms_cfg_get(x, octstr_imm("keyword"));
s = mms_cfg_get(cfg, x, octstr_imm("keyword"));
if (!s)
panic(0, "MMSBox: Service [%s] has no keyword!", octstr_get_cstr(m->name));
else
gwlist_append(m->keywords, s);
if ((s = mms_cfg_get(x, octstr_imm("http-post-parameters"))) != NULL) {
if ((s = mms_cfg_get(cfg, x, octstr_imm("http-post-parameters"))) != NULL) {
List *r = octstr_split(s, octstr_imm("&"));
int i, n;
m->params = gwlist_create();
@ -470,7 +470,7 @@ int mms_load_mmsbox_settings(mCfg *cfg, gwthread_func_t *mmsc_handler_func)
} else
m->params = NULL;
m->service_code = mms_cfg_get(x, octstr_imm("service-code"));
m->service_code = mms_cfg_get(cfg, x, octstr_imm("service-code"));
gwlist_append(mms_services, m);
}

View File

@ -52,37 +52,37 @@ MmscSettings *mms_load_mmsc_settings(mCfg *cfg, List **proxyrelays)
if (grp == NULL)
panic(0,"Missing required group `mbuni' in config file!");
mms_load_core_settings(cgrp);
mms_load_core_settings(cfg, cgrp);
m->hostname = mms_cfg_get(grp, octstr_imm("hostname"));
m->hostname = mms_cfg_get(cfg, grp, octstr_imm("hostname"));
if (octstr_len(m->hostname) == 0)
m->hostname = octstr_create("localhost");
if ((m->host_alias = mms_cfg_get(grp, octstr_imm("host-alias"))) == NULL)
if ((m->host_alias = mms_cfg_get(cfg, grp, octstr_imm("host-alias"))) == NULL)
m->host_alias = octstr_duplicate(m->hostname);
if (proxyrelays)
*proxyrelays = mms_proxy_relays(cfg, m->hostname);
if (mms_cfg_get_int(grp, octstr_imm("max-send-threads"), &m->maxthreads) == -1)
if (mms_cfg_get_int(cfg, grp, octstr_imm("max-send-threads"), &m->maxthreads) == -1)
m->maxthreads = 10;
m->unified_prefix = _mms_cfg_getx(grp, octstr_imm("unified-prefix"));
m->local_prefix = _mms_cfg_getx(grp, octstr_imm("local-prefixes"));
m->unified_prefix = _mms_cfg_getx(cfg, grp, octstr_imm("unified-prefix"));
m->local_prefix = _mms_cfg_getx(cfg, grp, octstr_imm("local-prefixes"));
if ((s = mms_cfg_get(grp, octstr_imm("strip-prefixes"))) != NULL) {
if ((s = mms_cfg_get(cfg, grp, octstr_imm("strip-prefixes"))) != NULL) {
m->strip_prefixes = octstr_split(s, octstr_imm(";"));
octstr_destroy(s);
} else
m->strip_prefixes = NULL;
m->name = _mms_cfg_getx(grp, octstr_imm("name"));
m->name = _mms_cfg_getx(cfg, grp, octstr_imm("name"));
m->sendmail = _mms_cfg_getx(grp, octstr_imm("send-mail-prog"));
m->sendmail = _mms_cfg_getx(cfg, grp, octstr_imm("send-mail-prog"));
qdir = _mms_cfg_getx(grp, octstr_imm("storage-directory"));
qdir = _mms_cfg_getx(cfg, grp, octstr_imm("storage-directory"));
if (qdir && octstr_len(qdir) >= QFNAMEMAX)
warning(0, "storage-directory name too long. Max length is %d", QFNAMEMAX);
@ -92,11 +92,11 @@ MmscSettings *mms_load_mmsc_settings(mCfg *cfg, List **proxyrelays)
panic(0, "Failed to create queue directory: %s - %s!",
octstr_get_cstr(qdir), strerror(errno));
if ((m->qfs = _mms_load_module(grp, "queue-manager-module", "qfuncs", NULL)) == NULL) {
if ((m->qfs = _mms_load_module(cfg, grp, "queue-manager-module", "qfuncs", NULL)) == NULL) {
m->qfs = &default_qfuncs; /* default queue handler. */
m->qfs->mms_init_queue_module(qdir, m->maxthreads);
} else {
Octstr *s = _mms_cfg_getx(grp, octstr_imm("queue-module-init-data"));
Octstr *s = _mms_cfg_getx(cfg, grp, octstr_imm("queue-module-init-data"));
if (m->qfs->mms_init_queue_module(s, m->maxthreads) != 0)
panic(0, "failed to initialise queue module, with data: %s",
octstr_get_cstr(s));
@ -126,28 +126,28 @@ MmscSettings *mms_load_mmsc_settings(mCfg *cfg, List **proxyrelays)
panic(0, "Failed to initialise UA Profile directory, error: %s!",
strerror(errno));
if (mms_cfg_get_int(grp, octstr_imm("maximum-send-attempts"), &m->maxsendattempts) == -1)
if (mms_cfg_get_int(cfg, grp, octstr_imm("maximum-send-attempts"), &m->maxsendattempts) == -1)
m->maxsendattempts = MAXQTRIES;
if (mms_cfg_get_int(grp, octstr_imm("default-message-expiry"), &m->default_msgexpiry) == -1)
if (mms_cfg_get_int(cfg, grp, octstr_imm("default-message-expiry"), &m->default_msgexpiry) == -1)
m->default_msgexpiry = DEFAULT_EXPIRE;
s = _mms_cfg_getx(grp, octstr_imm("queue-run-interval"));
s = _mms_cfg_getx(cfg, grp, octstr_imm("queue-run-interval"));
if (!s || (m->queue_interval = atof(octstr_get_cstr(s))) <= 0)
m->queue_interval = QUEUERUN_INTERVAL;
octstr_destroy(s);
if (mms_cfg_get_int(grp, octstr_imm("send-attempt-back-off"), &m->send_back_off) == -1)
if (mms_cfg_get_int(cfg, grp, octstr_imm("send-attempt-back-off"), &m->send_back_off) == -1)
m->send_back_off = BACKOFF_FACTOR;
/* Make send sms url. */
m->sendsms_url = _mms_cfg_getx(grp, octstr_imm("sendsms-url"));
m->sendsms_url = _mms_cfg_getx(cfg, grp, octstr_imm("sendsms-url"));
user = mms_cfg_get(grp, octstr_imm("sendsms-username"));
pass = mms_cfg_get(grp, octstr_imm("sendsms-password"));
from = mms_cfg_get(grp, octstr_imm("sendsms-global-sender"));
user = mms_cfg_get(cfg, grp, octstr_imm("sendsms-username"));
pass = mms_cfg_get(cfg, grp, octstr_imm("sendsms-password"));
from = mms_cfg_get(cfg, grp, octstr_imm("sendsms-global-sender"));
i = octstr_search_char(m->sendsms_url, '?', 0); /* If ? is in there, omit below. */
@ -166,45 +166,45 @@ MmscSettings *mms_load_mmsc_settings(mCfg *cfg, List **proxyrelays)
octstr_destroy(pass);
octstr_destroy(from);
mms_cfg_get_int(grp, octstr_imm("mms-port"), &port);
mms_cfg_get_int(cfg, grp, octstr_imm("mms-port"), &port);
m->port = (port > 0) ? port : MMS_PORT;
m->mm7port = -1;
mms_cfg_get_int(grp, octstr_imm("mm7-port"), &m->mm7port);
mms_cfg_get_int(cfg, grp, octstr_imm("mm7-port"), &m->mm7port);
m->allow_ip = _mms_cfg_getx(grp, octstr_imm("allow-ip"));
m->deny_ip = _mms_cfg_getx(grp, octstr_imm("deny-ip"));
m->allow_ip = _mms_cfg_getx(cfg, grp, octstr_imm("allow-ip"));
m->deny_ip = _mms_cfg_getx(cfg, grp, octstr_imm("deny-ip"));
m->email2mmsrelay_hosts = _mms_cfg_getx(grp,
m->email2mmsrelay_hosts = _mms_cfg_getx(cfg, grp,
octstr_imm("email2mms-relay-hosts"));
m->prov_notify = _mms_cfg_getx(grp,octstr_imm("prov-server-notify-script"));
m->prov_notify = _mms_cfg_getx(cfg, grp,octstr_imm("prov-server-notify-script"));
m->prov_getstatus = _mms_cfg_getx(grp,octstr_imm("prov-server-sub-status-script"));
m->mms_notify_txt = _mms_cfg_getx(grp, octstr_imm("mms-notify-text"));
m->mms_notify_unprov_txt = _mms_cfg_getx(grp, octstr_imm("mms-notify-unprovisioned-text"));
m->prov_getstatus = _mms_cfg_getx(cfg, grp,octstr_imm("prov-server-sub-status-script"));
m->mms_notify_txt = _mms_cfg_getx(cfg, grp, octstr_imm("mms-notify-text"));
m->mms_notify_unprov_txt = _mms_cfg_getx(cfg, grp, octstr_imm("mms-notify-unprovisioned-text"));
m->mms_email_txt = _mms_cfg_getx(grp, octstr_imm("mms-to-email-txt"));
m->mms_email_html = _mms_cfg_getx(grp, octstr_imm("mms-to-email-html"));
m->mms_email_subject = mms_cfg_get(grp, octstr_imm("mms-to-email-default-subject"));
m->mms_email_txt = _mms_cfg_getx(cfg, grp, octstr_imm("mms-to-email-txt"));
m->mms_email_html = _mms_cfg_getx(cfg, grp, octstr_imm("mms-to-email-html"));
m->mms_email_subject = mms_cfg_get(cfg, grp, octstr_imm("mms-to-email-default-subject"));
m->mms_toolarge = _mms_cfg_getx(grp, octstr_imm("mms-message-too-large-txt"));
m->mms_toolarge = _mms_cfg_getx(cfg, grp, octstr_imm("mms-message-too-large-txt"));
m->wap_gw_msisdn_header = mms_cfg_get(grp, octstr_imm("mms-client-msisdn-header"));
m->wap_gw_msisdn_header = mms_cfg_get(cfg, grp, octstr_imm("mms-client-msisdn-header"));
if (!m->wap_gw_msisdn_header) m->wap_gw_msisdn_header = octstr_imm(XMSISDN_HEADER);
m->wap_gw_ip_header = mms_cfg_get(grp, octstr_imm("mms-client-ip-header"));
m->wap_gw_ip_header = mms_cfg_get(cfg, grp, octstr_imm("mms-client-ip-header"));
if (!m->wap_gw_ip_header) m->wap_gw_ip_header = octstr_imm(XIP_HEADER);
mms_cfg_get_bool(grp, octstr_imm("notify-unprovisioned"), &m->notify_unprovisioned);
mms_cfg_get_bool(cfg, grp, octstr_imm("notify-unprovisioned"), &m->notify_unprovisioned);
m->billing_params = _mms_cfg_getx(grp,
m->billing_params = _mms_cfg_getx(cfg, grp,
octstr_imm("billing-module-parameters"));
/* Get and load the billing lib if any. */
if ((m->mms_billfuncs = _mms_load_module(grp, "billing-library", "mms_billfuncs",
if ((m->mms_billfuncs = _mms_load_module(cfg, grp, "billing-library", "mms_billfuncs",
&mms_billfuncs_shell)) != NULL) {
if (m->mms_billfuncs->mms_billingmodule_init == NULL ||
m->mms_billfuncs->mms_billmsg == NULL ||
@ -216,11 +216,11 @@ MmscSettings *mms_load_mmsc_settings(mCfg *cfg, List **proxyrelays)
m->mms_bill_module_data = m->mms_billfuncs->mms_billingmodule_init(octstr_get_cstr(m->billing_params));
m->resolver_params = _mms_cfg_getx(grp,
m->resolver_params = _mms_cfg_getx(cfg, grp,
octstr_imm("resolver-module-parameters"));
/* Get and load the resolver lib if any. */
if ((m->mms_resolvefuncs = _mms_load_module(grp, "resolver-library",
if ((m->mms_resolvefuncs = _mms_load_module(cfg, grp, "resolver-library",
"mms_resolvefuncs",
&mms_resolvefuncs_shell)) != NULL) {
if (m->mms_resolvefuncs->mms_resolvermodule_init == NULL ||
@ -232,10 +232,10 @@ MmscSettings *mms_load_mmsc_settings(mCfg *cfg, List **proxyrelays)
m->mms_resolver_module_data = m->mms_resolvefuncs->mms_resolvermodule_init(octstr_get_cstr(m->resolver_params));
m->detokenizer_params = _mms_cfg_getx(grp, octstr_imm("detokenizer-module-parameters"));
m->detokenizer_params = _mms_cfg_getx(cfg, grp, octstr_imm("detokenizer-module-parameters"));
/* Get and load the detokenizer lib if any. */
if ((m->mms_detokenizefuncs = _mms_load_module(grp, "detokenizer-library",
if ((m->mms_detokenizefuncs = _mms_load_module(cfg, grp, "detokenizer-library",
"mms_detokenizefuncs",
&mms_detokenizefuncs_shell)) != NULL) {
if (m->mms_detokenizefuncs->mms_detokenizer_init == NULL ||
@ -248,16 +248,16 @@ MmscSettings *mms_load_mmsc_settings(mCfg *cfg, List **proxyrelays)
} else
m->mms_detokenizefuncs = NULL;
if (mms_cfg_get_bool(grp, octstr_imm("allow-ip-type"), &m->allow_ip_type) < 0)
if (mms_cfg_get_bool(cfg, grp, octstr_imm("allow-ip-type"), &m->allow_ip_type) < 0)
m->allow_ip_type = 1;
mms_cfg_get_bool(grp, octstr_imm("optimize-notification-size"),
mms_cfg_get_bool(cfg, grp, octstr_imm("optimize-notification-size"),
&m->optimize_notification_size);
if (mms_cfg_get_bool(grp, octstr_imm("content-adaptation"), &m->content_adaptation) < 0)
if (mms_cfg_get_bool(cfg, grp, octstr_imm("content-adaptation"), &m->content_adaptation) < 0)
m->content_adaptation = 1;
if (mms_cfg_get_bool(grp, octstr_imm("send-dlr-on-fetch"), &m->dlr_on_fetch) < 0)
if (mms_cfg_get_bool(cfg, grp, octstr_imm("send-dlr-on-fetch"), &m->dlr_on_fetch) < 0)
m->dlr_on_fetch = 0;
@ -272,16 +272,16 @@ MmscSettings *mms_load_mmsc_settings(mCfg *cfg, List **proxyrelays)
Octstr *s;
int ibool = 0;
mv->id = _mms_cfg_getx(grp, octstr_imm("vasp-id"));
mv->id = _mms_cfg_getx(cfg, grp, octstr_imm("vasp-id"));
mv->short_code = -1;
mms_cfg_get_int(grp, octstr_imm("short-code"), &mv->short_code);
mms_cfg_get_int(cfg, grp, octstr_imm("short-code"), &mv->short_code);
mv->vasp_username = _mms_cfg_getx(grp, octstr_imm("vasp-username"));
mv->vasp_password = _mms_cfg_getx(grp, octstr_imm("vasp-password"));
mv->vasp_username = _mms_cfg_getx(cfg, grp, octstr_imm("vasp-username"));
mv->vasp_password = _mms_cfg_getx(cfg, grp, octstr_imm("vasp-password"));
mv->vasp_url = _mms_cfg_getx(grp, octstr_imm("vasp-url"));
mv->vasp_url = _mms_cfg_getx(cfg, grp, octstr_imm("vasp-url"));
s = _mms_cfg_getx(grp, octstr_imm("type"));
s = _mms_cfg_getx(cfg, grp, octstr_imm("type"));
if (octstr_case_compare(s, octstr_imm("soap")) == 0)
mv->type = SOAP_VASP;
@ -292,7 +292,7 @@ MmscSettings *mms_load_mmsc_settings(mCfg *cfg, List **proxyrelays)
octstr_destroy(s);
mv->ver.major = mv->ver.minor1 = mv->ver.minor2 = 0;
if ((s = mms_cfg_get(grp, octstr_imm("mm7-version"))) != NULL &&
if ((s = mms_cfg_get(cfg, grp, octstr_imm("mm7-version"))) != NULL &&
octstr_len(s) > 0)
sscanf(octstr_get_cstr(s), "%d.%d.%d", &mv->ver.major, &mv->ver.minor1, &mv->ver.minor2);
else {
@ -307,7 +307,7 @@ MmscSettings *mms_load_mmsc_settings(mCfg *cfg, List **proxyrelays)
}
octstr_destroy(s);
if ((s = mms_cfg_get(grp, octstr_imm("mm7-soap-xmlns"))) != NULL) {
if ((s = mms_cfg_get(cfg, grp, octstr_imm("mm7-soap-xmlns"))) != NULL) {
strncpy(mv->ver.xmlns, octstr_get_cstr(s), sizeof mv->ver.xmlns);
mv->ver.xmlns[-1 + sizeof mv->ver.xmlns] = 0; /* NULL terminate, just in case. */
@ -316,23 +316,23 @@ MmscSettings *mms_load_mmsc_settings(mCfg *cfg, List **proxyrelays)
mv->ver.xmlns[0] = 0;
mv->ver.use_mm7_namespace = 1;
mms_cfg_get_bool(grp, octstr_imm("use-mm7-soap-namespace-prefix"), &mv->ver.use_mm7_namespace);
mms_cfg_get_bool(cfg, grp, octstr_imm("use-mm7-soap-namespace-prefix"), &mv->ver.use_mm7_namespace);
/* Set the handler vasp accounts. */
if (mms_cfg_get_bool(grp, octstr_imm("mms-to-email-handler"), &ibool) == 0 &&
if (mms_cfg_get_bool(cfg, grp, octstr_imm("mms-to-email-handler"), &ibool) == 0 &&
ibool) {
if (m->mms2email)
warning(0, "mms-to-email handler VASP specified more than once! Only last config taken.");
m->mms2email = mv;
}
if (mms_cfg_get_bool(grp, octstr_imm("mms-to-local-copy-handler"), &ibool) == 0 &&
if (mms_cfg_get_bool(cfg, grp, octstr_imm("mms-to-local-copy-handler"), &ibool) == 0 &&
ibool) {
if (m->mms2mobile)
warning(0, "mms-to-mobile copy handler VASP specified more than once! Only last config taken.");
m->mms2mobile = mv;
}
if ((s = mms_cfg_get(grp, octstr_imm("send-uaprof"))) != NULL){
if ((s = mms_cfg_get(cfg, grp, octstr_imm("send-uaprof"))) != NULL){
if (octstr_str_case_compare(s, "url") == 0)
mv->send_uaprof = UAProf_URL;
else if (octstr_str_case_compare(s, "ua") == 0)
@ -361,16 +361,16 @@ List *mms_proxy_relays(mCfg *cfg, Octstr *myhostname)
MmsProxyRelay *m = gw_malloc(sizeof *m);
Octstr *s;
m->host = _mms_cfg_getx(grp, octstr_imm("host"));
m->name = _mms_cfg_getx(grp, octstr_imm("name"));
m->allowed_prefix = _mms_cfg_getx(grp, octstr_imm("allowed-prefix"));
m->denied_prefix = _mms_cfg_getx(grp, octstr_imm("denied-prefix"));
if (mms_cfg_get_bool(grp, octstr_imm("confirmed-delivery"), &m->confirmed_mm4) < 0)
m->host = _mms_cfg_getx(cfg, grp, octstr_imm("host"));
m->name = _mms_cfg_getx(cfg, grp, octstr_imm("name"));
m->allowed_prefix = _mms_cfg_getx(cfg, grp, octstr_imm("allowed-prefix"));
m->denied_prefix = _mms_cfg_getx(cfg, grp, octstr_imm("denied-prefix"));
if (mms_cfg_get_bool(cfg, grp, octstr_imm("confirmed-delivery"), &m->confirmed_mm4) < 0)
m->confirmed_mm4 = 1;
m->sendmail = mms_cfg_get(grp, octstr_imm("send-mail-prog"));
m->unified_prefix = mms_cfg_get(grp, octstr_imm("unified-prefix"));
if ((s = mms_cfg_get(grp, octstr_imm("strip-prefixes"))) != NULL) {
m->sendmail = mms_cfg_get(cfg, grp, octstr_imm("send-mail-prog"));
m->unified_prefix = mms_cfg_get(cfg, grp, octstr_imm("unified-prefix"));
if ((s = mms_cfg_get(cfg, grp, octstr_imm("strip-prefixes"))) != NULL) {
m->strip_prefixes = octstr_split(s, octstr_imm(";"));
octstr_destroy(s);
} else