1
0
Fork 0

Moved all config file handling out of Kannel into a Mbuni module

This commit is contained in:
bagyenda 2006-02-17 11:48:33 +00:00
parent 2188c0c6c8
commit d89834bda1
17 changed files with 776 additions and 225 deletions

View File

@ -28,7 +28,7 @@ billing-module-parameters = "/tmp/log/cdr.log"
# billing-library = billdemo.so
#prov-server-notify-script = ~/src/mmprov/provnotify.sh
#prov-server-sub-status-script = ~/src/mmprov/rcptstatus.sh
content-adaptation = yes
content-adaptation = true
notify-unprovisioned = yes
mms-notify-text = "You have received a multimedia message from %S, go to XXX to view it"
mm-box-host = local.ds.co.ug
@ -43,6 +43,11 @@ username = tester
password = foobar
# faked-sender = 100
group = send-mms-user
username = binary
password = "user"
faked-sender = 111
group = mmsc
id = testone
mmsc-url = http://mbuni:test@192.168.129.52:8080/eaif

View File

@ -715,125 +715,89 @@ diff -Naur gateway-1.4.0/gw/xml_shared.h gateway-1.4.0-patched/gw/xml_shared.h
};
/*
diff -Naur gateway-1.4.0/gwlib/cfg.def gateway-1.4.0-patched/gwlib/cfg.def
--- gateway-1.4.0/gwlib/cfg.def 2004-06-28 18:18:35.000000000 +0300
+++ gateway-1.4.0-patched/gwlib/cfg.def 2005-10-25 13:10:00.000000000 +0300
@@ -544,6 +544,115 @@
OCTSTR(unified-prefix)
)
diff -Naur gateway-1.4.0/gwlib/conn.c gateway-1.4.0-patched/gwlib/conn.c
--- gateway-1.4.0/gwlib/conn.c 2004-02-18 19:52:33.000000000 +0300
+++ gateway-1.4.0-patched/gwlib/conn.c 2006-02-17 08:39:38.000000000 +0300
@@ -1315,6 +1315,7 @@
info(0, "Using global server SSL key from file `%s'", octstr_get_cstr(keyfile));
}
+SINGLE_GROUP(mbuni,
+ OCTSTR(name)
+ OCTSTR(hostname)
+ OCTSTR(host-alias)
+ OCTSTR(local-mmsc-domains)
+ OCTSTR(local-prefixes)
+ OCTSTR(storage-directory)
+ OCTSTR(max-send-threads)
+ OCTSTR(send-mail-prog)
+ OCTSTR(unified-prefix)
+ OCTSTR(maximum-send-attempts)
+ OCTSTR(default-message-expiry)
+ OCTSTR(queue-run-interval)
+ OCTSTR(send-attempt-back-off)
+ OCTSTR(sendsms-url)
+ OCTSTR(sendsms-username)
+ OCTSTR(sendsms-password)
+ OCTSTR(sendsms-global-sender)
+ OCTSTR(mms-port)
+ OCTSTR(mm7-port)
+ OCTSTR(allow-ip)
+ OCTSTR(deny-ip)
+ OCTSTR(email2mms-relay-prefixes)
+ OCTSTR(billing-module-parameters)
+ OCTSTR(billing-library)
+ OCTSTR(resolver-module-parameters)
+ OCTSTR(resolver-library)
+ OCTSTR(detokenizer-module-parameters)
+ OCTSTR(detokenizer-library)
+ OCTSTR(prov-server-notify-script)
+ OCTSTR(prov-server-sub-status-script)
+ OCTSTR(notify-unprovisioned)
+ OCTSTR(mms-notify-text)
+ OCTSTR(mms-notify-unprovisioned-text)
+ OCTSTR(mm-box-host)
+ OCTSTR(mms-to-email-txt)
+ OCTSTR(mms-to-email-html)
+ OCTSTR(mms-message-too-large-txt)
+ OCTSTR(mms-client-msisdn-header)
+ OCTSTR(mms-client-ip-header)
+ OCTSTR(allow-ip-type)
+ OCTSTR(optimize-notification-size)
+ OCTSTR(content-adaptation)
+
+ OCTSTR(sendmms-port)
+ OCTSTR(sendmms-port-ssl)
+)
static int verify_callback(int preverify_ok, X509_STORE_CTX *ctx)
{
char subject[256];
@@ -1331,6 +1332,28 @@
return preverify_ok;
}
+void use_global_trusted_ca_file(Octstr *ssl_trusted_ca_file)
+{
+ if (ssl_trusted_ca_file != NULL) {
+ if (!SSL_CTX_load_verify_locations(global_ssl_context,
+ octstr_get_cstr(ssl_trusted_ca_file),
+ NULL)) {
+ panic(0, "Failed to load SSL CA file: %s", octstr_get_cstr(ssl_trusted_ca_file));
+ } else {
+ info(0, "Using CA root certificates from file %s",
+ octstr_get_cstr(ssl_trusted_ca_file));
+ SSL_CTX_set_verify(global_ssl_context,
+ SSL_VERIFY_PEER,
+ verify_callback);
+ }
+
+ } else {
+ SSL_CTX_set_verify(global_ssl_context,
+ SSL_VERIFY_NONE,
+ NULL);
+ }
+}
+
+MULTI_GROUP(mmsproxy,
+ OCTSTR(name)
+ OCTSTR(host)
+ OCTSTR(allowed-prefix)
+ OCTSTR(denied-prefix)
+)
void conn_config_ssl (CfgGroup *grp)
{
Octstr *ssl_client_certkey_file = NULL;
@@ -1357,25 +1380,8 @@
ssl_trusted_ca_file = cfg_get(grp, octstr_imm("ssl-trusted-ca-file"));
- if (ssl_trusted_ca_file != NULL) {
- if (!SSL_CTX_load_verify_locations(global_ssl_context,
- octstr_get_cstr(ssl_trusted_ca_file),
- NULL)) {
- panic(0, "Failed to load SSL CA file: %s", octstr_get_cstr(ssl_trusted_ca_file));
- } else {
- info(0, "Using CA root certificates from file %s",
- octstr_get_cstr(ssl_trusted_ca_file));
- SSL_CTX_set_verify(global_ssl_context,
- SSL_VERIFY_PEER,
- verify_callback);
- }
-
- } else {
- SSL_CTX_set_verify(global_ssl_context,
- SSL_VERIFY_NONE,
- NULL);
- }
-
+ use_global_trusted_ca_file(ssl_trusted_ca_file);
+
+MULTI_GROUP(mms-vasp,
+ OCTSTR(vasp-id)
+ OCTSTR(type)
+ OCTSTR(short-code)
+ OCTSTR(vasp-username)
+ OCTSTR(vasp-password)
+ OCTSTR(vasp-url)
+ OCTSTR(mms-to-email-handler)
+ OCTSTR(mms-to-local-copy-handler)
+ OCTSTR(mmsc-username)
+ OCTSTR(mmsc-password)
+)
octstr_destroy(ssl_client_certkey_file);
octstr_destroy(ssl_server_cert_file);
octstr_destroy(ssl_server_key_file);
diff -Naur gateway-1.4.0/gwlib/conn.h gateway-1.4.0-patched/gwlib/conn.h
--- gateway-1.4.0/gwlib/conn.h 2004-02-16 22:41:26.000000000 +0300
+++ gateway-1.4.0-patched/gwlib/conn.h 2006-02-17 08:42:32.000000000 +0300
@@ -307,6 +307,11 @@
*/
void use_global_server_certkey_file(Octstr *certfile, Octstr *keyfile);
+/* Specifies files containing certificates Kannel is willing to trusted when
+ * actins as https clients
+ */
+void use_global_trusted_ca_file(Octstr *ssl_trusted_ca_file);
+
+MULTI_GROUP(send-mms-user,
+ OCTSTR(username)
+ OCTSTR(password)
+ OCTSTR(faked-sender)
+ OCTSTR(delivery-report-url)
+ OCTSTR(read-report-url)
+)
+
+MULTI_GROUP(mmsc,
+ OCTSTR(id)
+ OCTSTR(mmsc-url)
+ OCTSTR(incoming-username)
+ OCTSTR(incoming-password)
+ OCTSTR(incoming-port)
+ OCTSTR(allow-ip)
+ OCTSTR(deny-ip)
+ OCTSTR(allowed-prefix)
+ OCTSTR(denied-prefix)
+ OCTSTR(incoming-port-ssl)
+ OCTSTR(max-throughput)
+ OCTSTR(type)
+)
+
+MULTI_GROUP(mms-service,
+ OCTSTR(name)
+ OCTSTR(get-url)
+ OCTSTR(post-url)
+ OCTSTR(exec)
+ OCTSTR(file)
+ OCTSTR(text)
+ OCTSTR(faked-sender)
+ OCTSTR(catch-all)
+ OCTSTR(omit-empty)
+ OCTSTR(accept-x-mbuni-headers)
+ OCTSTR(assume-plain-text)
+ OCTSTR(accepted-mmscs)
+ OCTSTR(denied-mmscs)
+ OCTSTR(keyword)
+ OCTSTR(aliases)
+ OCTSTR(http-post-parameters)
+)
#undef OCTSTR
#undef SINGLE_GROUP
#undef MULTI_GROUP
/* Configures all global variables for client and server SSL mode
* from the values specified within the configuration file.
*/
diff -Naur gateway-1.4.0/gwlib/mime.c gateway-1.4.0-patched/gwlib/mime.c
--- gateway-1.4.0/gwlib/mime.c 2004-08-11 19:41:29.000000000 +0300
+++ gateway-1.4.0-patched/gwlib/mime.c 2005-09-09 15:31:17.000000000 +0300

View File

@ -1,4 +1,4 @@
noinst_LTLIBRARIES = libmms.la
libmms_la_SOURCES = mms_mmbox.c mms_msg.c mms_queue.c mms_strings.c mms_uaprof.c mms_util.c mms_mm7soap.c
libmms_la_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
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

337
mbuni/mmlib/mms_cfg.c Normal file
View File

@ -0,0 +1,337 @@
/*
* Mbuni - Open Source MMS Gateway
*
* MMS Config file reader functions
*
* 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 <stdlib.h>
#include <string.h>
#include "mms_cfg.h"
/* config file representation.
* 'grps' var is indexed by group name.
* for multi the value is a list of groups,
* for single it is a struct
*/
struct mCfg {
Octstr *file;
Dict *grps;
};
struct mCfgGrp {
Octstr *name;
Dict *fields;
};
static void fixup_value(Octstr *value, int lineno)
{
Octstr *tmp;
int i,n;
octstr_strip_blanks(value);
if (octstr_get_char(value, 0) != '"')
return;
if (octstr_get_char(value, octstr_len(value) - 1) != '"')
error(0, "Missing enclosing '\"' at line %d in conf file", lineno);
octstr_delete(value, 0,1); /* strip quotes. */
octstr_delete(value, octstr_len(value) - 1, 1);
tmp = octstr_duplicate(value);
octstr_delete(value, 0, octstr_len(value));
for (i = 0, n = octstr_len(tmp); i < n; i++) {
int ch = octstr_get_char(tmp, i);
if (ch != '\\') {
octstr_append_char(value, ch);
continue;
}
i++; /* skip forward. */
ch = octstr_get_char(tmp,i);
switch(ch) {
case '"':
case '\\':
default:
octstr_append_char(value, ch);
break;
case 'n':
octstr_append_char(value, '\n');
break;
case 't':
octstr_append_char(value, '\t');
break;
}
}
octstr_destroy(tmp);
}
static int is_multigroup(Octstr *grpname)
{
#define OCTSTR(x)
#define SINGLE_GROUP(name, fields) \
if (octstr_case_compare(grpname, octstr_imm(#name)) == 0) return 0;
#define MULTI_GROUP(name, fields) \
if (octstr_case_compare(grpname, octstr_imm(#name)) == 0) return 1;
#include "mms_cfg.def"
return -1;
}
static int valid_in_group(Octstr *grp, Octstr *field)
{
/* first validate whether field is permitted in the group. */
#define OCTSTR(parm) else if (octstr_case_compare(field,octstr_imm(#parm)) == 0) return 1;
#define SINGLE_GROUP(grpname, fields) \
else if (octstr_case_compare(grp, octstr_imm(#grpname)) == 0) { \
if (0) (void)0; \
fields \
}
#define MULTI_GROUP(name, fields) SINGLE_GROUP(name, fields)
if (0)
(void)0;
#include "mms_cfg.def"
return 0;
}
static void check_and_add_field(mCfgGrp *grp, Octstr *field, Octstr *value, int lineno)
{
if (!valid_in_group(grp->name, field))
info(0, "field `%s' is not expected within group `%s' at line %d in conf file - skipped",
octstr_get_cstr(field), octstr_get_cstr(grp->name), lineno);
else if (dict_put_once(grp->fields, field, octstr_duplicate(value)) == 0)
panic(0, "Duplicate field `%s' at line %d in conf file",
octstr_get_cstr(field), lineno);
}
mCfg *mms_cfg_read(Octstr *file)
{
Octstr *sf;
List *lines;
int i, n;
mCfg *cfg;
mCfgGrp *grp = NULL;
int skip = 0;
gw_assert(file);
if ((sf = octstr_read_file(octstr_get_cstr(file))) == NULL) {
error(errno, "failed to read config from `%s'", octstr_get_cstr(file));
return NULL;
}
cfg = gw_malloc(sizeof *cfg);
cfg->file = octstr_duplicate(file);
cfg->grps = dict_create(7, NULL);
lines = octstr_split(sf, octstr_imm("\n"));
for (i = 0, n = list_len(lines); i < n; i++) {
Octstr *current = list_get(lines,i);
int pos;
octstr_strip_blanks(current);
if (octstr_len(current) == 0) { /* end of group. */
grp = NULL;
skip = 0;
continue;
} else if (skip || octstr_get_char(current, 0) == '#')
continue;
if ((pos = octstr_search_char(current, '=',0)) > 0) {
/* a field name. first see if start of grp */
Octstr *field = octstr_copy(current,0,pos);
Octstr *value = octstr_copy(current,pos+1,octstr_len(current));
octstr_strip_blanks(field);
fixup_value(value, i+1);
#if 0
info(0, "field/value: [%s - %s]", octstr_get_cstr(field),
octstr_get_cstr(value));
#endif
if (octstr_case_compare(field, octstr_imm("group")) == 0)
if (grp == NULL) { /* grp name. */
int ismulti = is_multigroup(value);
if (ismulti < 0) {
info(0, "Skipping unknown group `%s' at line %d of conf file",
octstr_get_cstr(value), i+1);
skip = 1;
} else {
grp = gw_malloc(sizeof *grp);
grp->name = octstr_duplicate(value);
grp->fields = dict_create(23, (void (*)(void *))octstr_destroy);
if (ismulti) {
List *l = dict_get(cfg->grps, value);
if (l == NULL) {
l = list_create();
dict_put(cfg->grps, value, l);
}
list_append(l, grp);
} else if (dict_put_once(cfg->grps, value, grp) == 0)
panic(0, "Group `%s' [at line %d] cannot appear more "
"than once in config!",
octstr_get_cstr(value), i+1);
}
} else
panic(0,"`group' is an illegal field name "
"within a group at line %d in config file!",
i+1);
else if (grp) /* an ordinary field name. */
check_and_add_field(grp, field, value,i+1);
else
panic(0, "A group must begin with a `group = group_name' "
"clause [at line %d in config file]", i+1);
octstr_destroy(field);
octstr_destroy(value);
} else
panic(0, "mal-formed entry in conf file at line %d!", i+1);
}
list_destroy(lines, (list_item_destructor_t *)octstr_destroy);
octstr_destroy(sf);
return cfg;
}
static void mGrp_destroy(mCfgGrp *grp)
{
octstr_destroy(grp->name);
dict_destroy(grp->fields);
gw_free(grp);
}
void mms_cfg_destroy(mCfg *cfg)
{
List *l;
int i, n;
gw_assert(cfg);
for (i = 0, l = dict_keys(cfg->grps), n = list_len(l); i < n; i++) {
Octstr *grpname = list_get(l, i);
void *val = dict_get(cfg->grps, grpname);
if (is_multigroup(grpname)) {
List *gl = val;
int j, m = list_len(gl);
for (j = 0; j < m; j++)
mGrp_destroy(list_get(gl, j));
} else
mGrp_destroy(val);
}
list_destroy(l, (list_item_destructor_t *)octstr_destroy);
dict_destroy(cfg->grps);
octstr_destroy(cfg->file);
gw_free(cfg);
}
mCfgGrp *mms_cfg_get_single(mCfg *cfg, Octstr *name)
{
gw_assert(name);
if (is_multigroup(name))
gw_assert("Can't call this function with a multi-group name!" && 0);
return dict_get(cfg->grps, name);
}
List *mms_cfg_get_multi(mCfg *cfg, Octstr *name)
{
List *l = NULL, *r;
int i;
gw_assert(name);
if (!is_multigroup(name))
gw_assert("Can't call this function with a single-group name!" && 0);
r = dict_get(cfg->grps, name);
if (r)
for (i = 0, l = list_create(); i < list_len(r); i++)
list_append(l, list_get(r,i));
return l;
}
Octstr *mms_cfg_get(mCfgGrp *grp, Octstr *name)
{
Octstr *val;
gw_assert(grp);
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));
val = dict_get(grp->fields, name);
if (!val)
return NULL;
else
return octstr_duplicate(val);
}
int mms_cfg_get_int(mCfgGrp *grp, Octstr *name, long *n)
{
Octstr *val = mms_cfg_get(grp, name);
int ret;
if (!val)
return -1;
ret = octstr_parse_long(n, val, 0, 0);
octstr_destroy(val);
return (ret == -1) ? -1 : 0;
}
int mms_cfg_get_bool(mCfgGrp *grp, Octstr *name, int *bool)
{
Octstr *val = mms_cfg_get(grp, name);
int ret = 0;
if (!val)
return -1;
if (octstr_case_compare(val, octstr_imm("yes")) == 0 ||
octstr_case_compare(val, octstr_imm("true")) == 0 ||
octstr_case_compare(val, octstr_imm("1")) == 0)
*bool = 1;
else if (octstr_case_compare(val, octstr_imm("no")) == 0 ||
octstr_case_compare(val, octstr_imm("false")) == 0 ||
octstr_case_compare(val, octstr_imm("0")) == 0)
*bool = 0;
else {
error(0, "Unable to convert value `%s' to boolean for field `%s' in group `%s'",
octstr_get_cstr(val), octstr_get_cstr(name), octstr_get_cstr(grp->name));
ret = -1;
}
octstr_destroy(val);
return ret;
}
List *mms_cfg_get_list(mCfgGrp *grp, Octstr *name)
{
Octstr *val = mms_cfg_get(grp, name);
List *l;
if (val == NULL)
return NULL;
l = octstr_split_words(val);
octstr_destroy(val);
return l;
}

154
mbuni/mmlib/mms_cfg.def Normal file
View File

@ -0,0 +1,154 @@
/*
* Mbuni - Open Source MMS Gateway
*
* MMS Config structure definitions
*
* 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)
*/
#ifndef OCTSTR
#error OCTSTR not defined.
#endif
#ifndef SINGLE_GROUP
#error SINGLE_GROUP not defined.
#endif
#ifndef MULTI_GROUP
#error MULTI_GROUP not defined.
#endif
SINGLE_GROUP(core,
OCTSTR(log-file)
OCTSTR(log-level)
OCTSTR(access-log)
OCTSTR(http-proxy-host)
OCTSTR(http-proxy-port)
OCTSTR(http-proxy-exceptions)
OCTSTR(http-proxy-username)
OCTSTR(http-proxy-password)
OCTSTR(ssl-client-certkey-file)
OCTSTR(ssl-server-cert-file)
OCTSTR(ssl-server-key-file)
OCTSTR(ssl-trusted-ca-file)
)
SINGLE_GROUP(mbuni,
OCTSTR(name)
OCTSTR(hostname)
OCTSTR(host-alias)
OCTSTR(local-mmsc-domains)
OCTSTR(local-prefixes)
OCTSTR(storage-directory)
OCTSTR(max-send-threads)
OCTSTR(send-mail-prog)
OCTSTR(unified-prefix)
OCTSTR(maximum-send-attempts)
OCTSTR(default-message-expiry)
OCTSTR(queue-run-interval)
OCTSTR(send-attempt-back-off)
OCTSTR(sendsms-url)
OCTSTR(sendsms-username)
OCTSTR(sendsms-password)
OCTSTR(sendsms-global-sender)
OCTSTR(mms-port)
OCTSTR(mm7-port)
OCTSTR(allow-ip)
OCTSTR(deny-ip)
OCTSTR(email2mms-relay-prefixes)
OCTSTR(billing-module-parameters)
OCTSTR(billing-library)
OCTSTR(resolver-module-parameters)
OCTSTR(resolver-library)
OCTSTR(detokenizer-module-parameters)
OCTSTR(detokenizer-library)
OCTSTR(prov-server-notify-script)
OCTSTR(prov-server-sub-status-script)
OCTSTR(notify-unprovisioned)
OCTSTR(mms-notify-text)
OCTSTR(mms-notify-unprovisioned-text)
OCTSTR(mm-box-host)
OCTSTR(mms-to-email-txt)
OCTSTR(mms-to-email-html)
OCTSTR(mms-message-too-large-txt)
OCTSTR(mms-client-msisdn-header)
OCTSTR(mms-client-ip-header)
OCTSTR(allow-ip-type)
OCTSTR(optimize-notification-size)
OCTSTR(content-adaptation)
OCTSTR(sendmms-port)
OCTSTR(sendmms-port-ssl)
)
MULTI_GROUP(mmsproxy,
OCTSTR(name)
OCTSTR(host)
OCTSTR(allowed-prefix)
OCTSTR(denied-prefix)
)
MULTI_GROUP(mms-vasp,
OCTSTR(vasp-id)
OCTSTR(type)
OCTSTR(short-code)
OCTSTR(vasp-username)
OCTSTR(vasp-password)
OCTSTR(vasp-url)
OCTSTR(mms-to-email-handler)
OCTSTR(mms-to-local-copy-handler)
OCTSTR(mmsc-username)
OCTSTR(mmsc-password)
)
MULTI_GROUP(send-mms-user,
OCTSTR(username)
OCTSTR(password)
OCTSTR(faked-sender)
OCTSTR(delivery-report-url)
OCTSTR(read-report-url)
)
MULTI_GROUP(mmsc,
OCTSTR(id)
OCTSTR(mmsc-url)
OCTSTR(incoming-username)
OCTSTR(incoming-password)
OCTSTR(incoming-port)
OCTSTR(allow-ip)
OCTSTR(deny-ip)
OCTSTR(allowed-prefix)
OCTSTR(denied-prefix)
OCTSTR(incoming-port-ssl)
OCTSTR(max-throughput)
OCTSTR(type)
)
MULTI_GROUP(mms-service,
OCTSTR(name)
OCTSTR(get-url)
OCTSTR(post-url)
OCTSTR(exec)
OCTSTR(file)
OCTSTR(text)
OCTSTR(faked-sender)
OCTSTR(catch-all)
OCTSTR(omit-empty)
OCTSTR(accept-x-mbuni-headers)
OCTSTR(assume-plain-text)
OCTSTR(accepted-mmscs)
OCTSTR(denied-mmscs)
OCTSTR(keyword)
OCTSTR(aliases)
OCTSTR(http-post-parameters)
)
#undef OCTSTR
#undef SINGLE_GROUP
#undef MULTI_GROUP

56
mbuni/mmlib/mms_cfg.h Normal file
View File

@ -0,0 +1,56 @@
/*
* Mbuni - Open Source MMS Gateway
*
* config file functions
*
* Copyright (C) 2003 - 2006, 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__INCLUDED__
#define __MMS_CFG__INCLUDED__
#include "gwlib/gwlib.h"
#include "gwlib/mime.h"
#include "config.h"
typedef struct mCfg mCfg; /* config file structure. */
typedef struct mCfgGrp mCfgGrp; /* A config group. */
/* Read a config file, return the structure. */
mCfg *mms_cfg_read(Octstr *file);
/* Destroy it all . */
void mms_cfg_destroy(mCfg *cfg);
/* Get a single group object by name. */
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);
/* Get a string field value from a group. */
Octstr *mms_cfg_get(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);
/* 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);
/* Get a field value from a group. */
List *mms_cfg_get_list(mCfgGrp *grp, Octstr *name);
#endif

View File

@ -27,48 +27,48 @@
#include "mms_uaprof.h"
Octstr *_mms_cfg_getx(CfgGroup *grp, Octstr *item)
Octstr *_mms_cfg_getx(mCfgGrp *grp, Octstr *item)
{
Octstr *v = cfg_get(grp, item);
Octstr *v = mms_cfg_get(grp, item);
return v ? v : octstr_create("");
}
int mms_load_core_settings(CfgGroup *cgrp)
int mms_load_core_settings(mCfgGrp *cgrp)
{
Octstr *log, *alog;
Octstr *http_proxy_host;
long loglevel;
/* Set the log file. */
log = cfg_get(cgrp, octstr_imm("log-file"));
log = mms_cfg_get(cgrp, octstr_imm("log-file"));
if (log != NULL) {
if (cfg_get_integer(&loglevel, cgrp, octstr_imm("log-level")) == -1)
if (mms_cfg_get_int(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 = cfg_get(cgrp, octstr_imm("access-log"));
alog = mms_cfg_get(cgrp, octstr_imm("access-log"));
if (alog) {
alog_open(octstr_get_cstr(alog), 1, 1);
octstr_destroy(alog);
}
/* look for http proxy. If set, use it. */
if ((http_proxy_host = cfg_get(cgrp, octstr_imm("http-proxy-host"))) != NULL) {
if ((http_proxy_host = mms_cfg_get(cgrp, octstr_imm("http-proxy-host"))) != NULL) {
Octstr *username = cfg_get(cgrp,
Octstr *username = mms_cfg_get(cgrp,
octstr_imm("http-proxy-username"));
Octstr *password = cfg_get(cgrp,
Octstr *password = mms_cfg_get(cgrp,
octstr_imm("http-proxy-password"));
List *exceptions = cfg_get_list(cgrp,
List *exceptions = mms_cfg_get_list(cgrp,
octstr_imm("http-proxy-exceptions"));
long http_proxy_port = -1;
cfg_get_integer(&http_proxy_port, cgrp, octstr_imm("http-proxy-port"));
mms_cfg_get_int(cgrp, octstr_imm("http-proxy-port"), &http_proxy_port);
if (http_proxy_port > 0)
http_use_proxy(http_proxy_host, http_proxy_port,
@ -80,7 +80,41 @@ int mms_load_core_settings(CfgGroup *cgrp)
}
#ifdef HAVE_LIBSSL
conn_config_ssl(cgrp);
/* We expect that gwlib_init() has been called already, so only need
* to setup cert files.
* -- adapted from gwlib/conn.c
*/
{
Octstr *ssl_client_certkey_file = NULL;
Octstr *ssl_server_cert_file = NULL;
Octstr *ssl_server_key_file = NULL;
Octstr *ssl_trusted_ca_file = NULL;
/*
* check if SSL is desired for HTTP servers and then
* 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"));
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"));
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"));
use_global_trusted_ca_file(ssl_trusted_ca_file);
octstr_destroy(ssl_client_certkey_file);
octstr_destroy(ssl_server_cert_file);
octstr_destroy(ssl_server_key_file);
octstr_destroy(ssl_trusted_ca_file);
}
#endif
return 0;

View File

@ -20,7 +20,7 @@
#include "mms_strings.h"
#include "mms_msg.h"
#include "mms_mm7soap.h"
#include "mms_cfg.h"
#include "mms_mmbox.h"
/* Send errors */
@ -50,7 +50,7 @@
enum mms_loc_t {MMS_LOC_MMBOX = 1, MMS_LOC_MQUEUE=2};
extern int mms_load_core_settings(CfgGroup *cgrp);
extern int mms_load_core_settings(mCfgGrp *cgrp);
extern Octstr *mms_maketransid(char *qf, Octstr *mmscname);
@ -125,7 +125,7 @@ extern MIMEEntity *mime_entity_duplicate(MIMEEntity *m);
int _mms_gw_isprint(int c);
/* Special form of cfg_get which returns zero-length string when there is nothing. */
Octstr *_mms_cfg_getx(CfgGroup *grp, Octstr *item);
Octstr *_mms_cfg_getx(mCfgGrp *grp, Octstr *item);
/* Get envelope data from message headers. */
void mms_collect_envdata_from_msgheaders(List *mh, List **xto,

View File

@ -456,7 +456,7 @@ int main(int argc, char *argv[])
{
Octstr *fname;
int cfidx;
Cfg *cfg;
mCfg *cfg;
long qthread = 0, sthread = 0;
@ -471,9 +471,9 @@ int main(int argc, char *argv[])
else
fname = octstr_create(argv[cfidx]);
cfg = cfg_create(fname);
cfg = mms_cfg_read(fname);
if (cfg_read(cfg) == -1)
if (cfg == NULL)
panic(0, "Couldn't read configuration from '%s'.", octstr_get_cstr(fname));
octstr_destroy(fname);
@ -484,7 +484,7 @@ int main(int argc, char *argv[])
mms_load_mmsbox_settings(cfg,(gwthread_func_t *)mmsc_receive_func);
cfg_destroy(cfg);
mms_cfg_destroy(cfg);
signal(SIGHUP, quit_now);
signal(SIGTERM, quit_now);

View File

@ -34,10 +34,10 @@ Octstr *unified_prefix;
struct SendMmsPortInfo sendmms_port;
int mms_load_mmsbox_settings(Cfg *cfg, gwthread_func_t *mmsc_handler_func)
int mms_load_mmsbox_settings(mCfg *cfg, gwthread_func_t *mmsc_handler_func)
{
CfgGroup *grp = cfg_get_single_group(cfg, octstr_imm("mbuni"));
CfgGroup *cgrp = cfg_get_single_group(cfg, octstr_imm("core"));
mCfgGrp *grp = mms_cfg_get_single(cfg, octstr_imm("mbuni"));
mCfgGrp *cgrp = mms_cfg_get_single(cfg, octstr_imm("core"));
Octstr *gdir, *s;
int send_port_ssl = 0;
List *l;
@ -50,7 +50,7 @@ int mms_load_mmsbox_settings(Cfg *cfg, gwthread_func_t *mmsc_handler_func)
mms_services = list_create();
mmscs = list_create();
gdir = cfg_get(grp, octstr_imm("storage-directory"));
gdir = mms_cfg_get(grp, octstr_imm("storage-directory"));
if (gdir == NULL)
gdir = octstr_imm(".");
@ -77,19 +77,19 @@ int mms_load_mmsbox_settings(Cfg *cfg, gwthread_func_t *mmsc_handler_func)
panic(0, "Failed to initialise dlr storage directory: %s - %s!",
octstr_get_cstr(dlr_dir), strerror(errno));
if (cfg_get_integer(&mmsbox_maxsendattempts, grp,
octstr_imm("maximum-send-attempts")) < 0)
if (mms_cfg_get_int(grp,
octstr_imm("maximum-send-attempts"), &mmsbox_maxsendattempts) < 0)
mmsbox_maxsendattempts = MAXQTRIES;
if (cfg_get_integer(&mmsbox_send_back_off, grp,
octstr_imm("send-attempt-back-off")) == -1)
if (mms_cfg_get_int(grp,
octstr_imm("send-attempt-back-off"), &mmsbox_send_back_off) == -1)
mmsbox_send_back_off = BACKOFF_FACTOR;
if (cfg_get_integer(&maxthreads, grp, octstr_imm("max-send-threads")) == -1)
if (mms_cfg_get_int(grp, octstr_imm("max-send-threads"), &maxthreads) == -1)
maxthreads = 10;
s = cfg_get(grp, octstr_imm("queue-run-interval"));
s = mms_cfg_get(grp, octstr_imm("queue-run-interval"));
if (s) {
queue_interval = atof(octstr_get_cstr(s));
octstr_destroy(s);
@ -101,30 +101,30 @@ int mms_load_mmsbox_settings(Cfg *cfg, gwthread_func_t *mmsc_handler_func)
unified_prefix = _mms_cfg_getx(grp, octstr_imm("unified-prefix"));
cfg_get_integer(&sendmms_port.port, grp, octstr_imm("sendmms-port"));
mms_cfg_get_int(grp, octstr_imm("sendmms-port"), &sendmms_port.port);
#ifdef HAVE_LIBSSL
cfg_get_bool(&send_port_ssl, grp, octstr_imm("sendmms-port-ssl"));
mms_cfg_get_bool(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 = cfg_get(grp, octstr_imm("allow-ip"));
sendmms_port.deny_ip = cfg_get(grp, octstr_imm("deny-ip"));
sendmms_port.allow_ip = mms_cfg_get(grp, octstr_imm("allow-ip"));
sendmms_port.deny_ip = mms_cfg_get(grp, octstr_imm("deny-ip"));
/* Now get sendmms users. */
l = cfg_get_multi_group(cfg, octstr_imm("send-mms-user"));
l = mms_cfg_get_multi(cfg, octstr_imm("send-mms-user"));
for (i = 0, n = list_len(l); i < n; i++) {
CfgGroup *x = list_get(l, i);
mCfgGrp *x = list_get(l, i);
SendMmsUser *u = gw_malloc(sizeof *u);
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 = cfg_get(x, octstr_imm("faked-sender"));
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"));
list_append(sendmms_users, u);
@ -132,9 +132,9 @@ int mms_load_mmsbox_settings(Cfg *cfg, gwthread_func_t *mmsc_handler_func)
list_destroy(l, NULL);
/* Get mmsc list. */
l = cfg_get_multi_group(cfg, octstr_imm("mmsc"));
l = mms_cfg_get_multi(cfg, octstr_imm("mmsc"));
for (i = 0, n = list_len(l); i < n; i++) {
CfgGroup *x = list_get(l, i);
mCfgGrp *x = list_get(l, i);
MmscGrp *m = gw_malloc(sizeof *m);
int ssl = 0;
Octstr *type;
@ -144,19 +144,19 @@ int mms_load_mmsbox_settings(Cfg *cfg, gwthread_func_t *mmsc_handler_func)
m->id = _mms_cfg_getx(x, octstr_imm("id"));
m->mmsc_url = _mms_cfg_getx(x, octstr_imm("mmsc-url"));
m->allowed_prefix = cfg_get(x, octstr_imm("allowed-prefix"));
m->denied_prefix = cfg_get(x, octstr_imm("denied-prefix"));
m->allowed_prefix = mms_cfg_get(x, octstr_imm("allowed-prefix"));
m->denied_prefix = mms_cfg_get(x, octstr_imm("denied-prefix"));
m->incoming.allow_ip = cfg_get(x, octstr_imm("allow-ip"));
m->incoming.deny_ip = cfg_get(x, octstr_imm("deny-ip"));
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.user = _mms_cfg_getx(x, octstr_imm("incoming-username"));
m->incoming.pass = _mms_cfg_getx(x, octstr_imm("incoming-password"));
cfg_get_integer(&m->incoming.port, x, octstr_imm("incoming-port"));
mms_cfg_get_int(x, octstr_imm("incoming-port"), &m->incoming.port);
#ifdef HAVE_LIBSSL
cfg_get_bool(&ssl, x, octstr_imm("incoming-port-ssl"));
mms_cfg_get_bool(x, octstr_imm("incoming-port-ssl"), &ssl);
#endif
cfg_get_integer(&m->throughput, x, octstr_imm("max-throughput"));
mms_cfg_get_int(x, octstr_imm("max-throughput"), &m->throughput);
type = _mms_cfg_getx(x, octstr_imm("type"));
if (octstr_case_compare(type, octstr_imm("eaif")) == 0)
@ -191,28 +191,28 @@ int mms_load_mmsbox_settings(Cfg *cfg, gwthread_func_t *mmsc_handler_func)
list_destroy(l, NULL);
l = cfg_get_multi_group(cfg, octstr_imm("mms-service"));
l = mms_cfg_get_multi(cfg, octstr_imm("mms-service"));
for (i = 0, n = list_len(l); i < n; i++) {
CfgGroup *x = list_get(l, i);
mCfgGrp *x = list_get(l, i);
MmsService *m = gw_malloc(sizeof *m);
Octstr *s;
m->name = _mms_cfg_getx(x, octstr_imm("name"));
if ((m->url = cfg_get(x, octstr_imm("get-url"))) != NULL)
if ((m->url = mms_cfg_get(x, octstr_imm("get-url"))) != NULL)
m->type = TRANS_TYPE_GET_URL;
else if ((m->url = cfg_get(x, octstr_imm("post-url"))) != NULL)
else if ((m->url = mms_cfg_get(x, octstr_imm("post-url"))) != NULL)
m->type = TRANS_TYPE_POST_URL;
else if ((m->url = cfg_get(x, octstr_imm("file"))) != NULL)
else if ((m->url = mms_cfg_get(x, octstr_imm("file"))) != NULL)
m->type = TRANS_TYPE_FILE;
else if ((m->url = cfg_get(x, octstr_imm("exec"))) != NULL)
else if ((m->url = mms_cfg_get(x, octstr_imm("exec"))) != NULL)
m->type = TRANS_TYPE_EXEC;
else if ((m->url = cfg_get(x, octstr_imm("text"))) != NULL)
else if ((m->url = mms_cfg_get(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 = cfg_get(x, octstr_imm("faked-sender"));
cfg_get_bool(&m->isdefault, x, octstr_imm("catch-all"));
m->faked_sender = mms_cfg_get(x, octstr_imm("faked-sender"));
mms_cfg_get_bool(x, octstr_imm("catch-all"), &m->isdefault);
if (m->isdefault) {
if (catchall)
@ -220,36 +220,36 @@ int mms_load_mmsbox_settings(Cfg *cfg, gwthread_func_t *mmsc_handler_func)
catchall = m;
}
cfg_get_bool(&m->omitempty, x, octstr_imm("omit-empty"));
cfg_get_bool(&m->accept_x_headers, x, octstr_imm("accept-x-mbuni-headers"));
cfg_get_bool(&m->assume_plain_text, x, octstr_imm("assume-plain-text"));
mms_cfg_get_bool(x, octstr_imm("omit-empty"), &m->omitempty);
mms_cfg_get_bool(x, octstr_imm("accept-x-mbuni-headers"), &m->accept_x_headers);
mms_cfg_get_bool(x, octstr_imm("assume-plain-text"), &m->assume_plain_text);
if ((s = cfg_get(x, octstr_imm("accepted-mmscs"))) != NULL) {
if ((s = mms_cfg_get(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 = cfg_get(x, octstr_imm("denied-mmscs"))) != NULL) {
if ((s = mms_cfg_get(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. */
/* Get key words. Start with aliases to make life easier. */
if ((s = cfg_get(x, octstr_imm("aliases"))) != NULL) {
if ((s = mms_cfg_get(x, octstr_imm("aliases"))) != NULL) {
m->keywords = octstr_split(s, octstr_imm(";"));
octstr_destroy(s);
} else
m->keywords = list_create();
s = cfg_get(x, octstr_imm("keyword"));
s = mms_cfg_get(x, octstr_imm("keyword"));
if (!s)
panic(0, "MMSBox: Service [%s] has no keyword!", octstr_get_cstr(m->name));
else
list_append(m->keywords, s);
if ((s = cfg_get(x, octstr_imm("http-post-parameters"))) != NULL) {
if ((s = mms_cfg_get(x, octstr_imm("http-post-parameters"))) != NULL) {
List *r = octstr_split(s, octstr_imm("&"));
int i, n;
m->params = list_create();

View File

@ -79,5 +79,5 @@ extern struct SendMmsPortInfo {
} sendmms_port;
extern int mms_load_mmsbox_settings(Cfg *cfg, gwthread_func_t *mmsc_handler_func);
extern int mms_load_mmsbox_settings(mCfg *cfg, gwthread_func_t *mmsc_handler_func);
#endif

View File

@ -27,12 +27,12 @@
static void *load_module(CfgGroup *grp, char *config_key, char *symbolname)
static void *load_module(mCfgGrp *grp, char *config_key, char *symbolname)
{
Octstr *s;
void *retval = NULL;
s = cfg_get(grp, octstr_imm(config_key));
s = mms_cfg_get(grp, octstr_imm(config_key));
if (s) {
void *x = dlopen(octstr_get_cstr(s), RTLD_LAZY);
void *y = NULL;
@ -60,13 +60,13 @@ static void *load_module(CfgGroup *grp, char *config_key, char *symbolname)
return retval;
}
MmscSettings *mms_load_mmsc_settings(Cfg *cfg, List **proxyrelays)
MmscSettings *mms_load_mmsc_settings(mCfg *cfg, List **proxyrelays)
{
Octstr *s;
List *l;
CfgGroup *grp = cfg_get_single_group(cfg, octstr_imm("mbuni"));
CfgGroup *cgrp = cfg_get_single_group(cfg, octstr_imm("core"));
mCfgGrp *grp = mms_cfg_get_single(cfg, octstr_imm("mbuni"));
mCfgGrp *cgrp = mms_cfg_get_single(cfg, octstr_imm("core"));
MmscSettings *m = gw_malloc(sizeof *m);
long port = -1;
Octstr *from, *user, *pass;
@ -89,7 +89,7 @@ MmscSettings *mms_load_mmsc_settings(Cfg *cfg, List **proxyrelays)
l = list_create();
m->local_domains = l;
if (cfg_get_integer(&m->maxthreads, grp, octstr_imm("max-send-threads")) == -1)
if (mms_cfg_get_int(grp, octstr_imm("max-send-threads"), &m->maxthreads) == -1)
m->maxthreads = 10;
m->unified_prefix = _mms_cfg_getx(grp, octstr_imm("unified-prefix"));
@ -143,10 +143,10 @@ MmscSettings *mms_load_mmsc_settings(Cfg *cfg, List **proxyrelays)
panic(0, "Failed to initialise UA Profile directory, error: %s!",
strerror(errno));
if (cfg_get_integer(&m->maxsendattempts, grp, octstr_imm("maximum-send-attempts")) == -1)
if (mms_cfg_get_int(grp, octstr_imm("maximum-send-attempts"), &m->maxsendattempts) == -1)
m->maxsendattempts = MAXQTRIES;
if (cfg_get_integer(&m->default_msgexpiry, grp, octstr_imm("default-message-expiry")) == -1)
if (mms_cfg_get_int(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"));
@ -156,7 +156,7 @@ MmscSettings *mms_load_mmsc_settings(Cfg *cfg, List **proxyrelays)
if (s)
octstr_destroy(s);
if (cfg_get_integer(&m->send_back_off, grp, octstr_imm("send-attempt-back-off")) == -1)
if (mms_cfg_get_int(grp, octstr_imm("send-attempt-back-off"), &m->send_back_off) == -1)
m->send_back_off = BACKOFF_FACTOR;
/* Make send sms url. */
@ -164,7 +164,7 @@ MmscSettings *mms_load_mmsc_settings(Cfg *cfg, List **proxyrelays)
user = _mms_cfg_getx(grp, octstr_imm("sendsms-username"));
pass = _mms_cfg_getx(grp, octstr_imm("sendsms-password"));
from = cfg_get(grp, octstr_imm("sendsms-global-sender"));
from = mms_cfg_get(grp, octstr_imm("sendsms-global-sender"));
if (user && octstr_len(user) > 1)
octstr_url_encode(user);
@ -187,12 +187,12 @@ MmscSettings *mms_load_mmsc_settings(Cfg *cfg, List **proxyrelays)
octstr_destroy(pass);
if (from) octstr_destroy(from);
cfg_get_integer(&port, grp, octstr_imm("mms-port"));
mms_cfg_get_int(grp, octstr_imm("mms-port"), &port);
m->port = (port > 0) ? port : MMS_PORT;
m->mm7port = -1;
cfg_get_integer(&m->mm7port, grp, octstr_imm("mm7-port"));
mms_cfg_get_int(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"));
@ -212,13 +212,13 @@ MmscSettings *mms_load_mmsc_settings(Cfg *cfg, List **proxyrelays)
m->mms_toolarge = _mms_cfg_getx(grp, octstr_imm("mms-message-too-large-txt"));
m->wap_gw_msisdn_header = cfg_get(grp, octstr_imm("mms-client-msisdn-header"));
m->wap_gw_msisdn_header = mms_cfg_get(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 = cfg_get(grp, octstr_imm("mms-client-ip-header"));
m->wap_gw_ip_header = mms_cfg_get(grp, octstr_imm("mms-client-ip-header"));
if (!m->wap_gw_ip_header) m->wap_gw_ip_header = octstr_imm(XIP_HEADER);
cfg_get_bool(&m->notify_unprovisioned, grp, octstr_imm("notify-unprovisioned"));
mms_cfg_get_bool(grp, octstr_imm("notify-unprovisioned"), &m->notify_unprovisioned);
m->billing_params = _mms_cfg_getx(grp,
octstr_imm("billing-module-parameters"));
@ -263,29 +263,30 @@ MmscSettings *mms_load_mmsc_settings(Cfg *cfg, List **proxyrelays)
} else
m->mms_detokenizefuncs = NULL;
if (cfg_get_bool(&m->allow_ip_type, grp, octstr_imm("allow-ip-type")) < 0)
if (mms_cfg_get_bool(grp, octstr_imm("allow-ip-type"), &m->allow_ip_type) < 0)
m->allow_ip_type = 1;
cfg_get_bool(&m->optimize_notification_size, grp, octstr_imm("optimize-notification-size"));
mms_cfg_get_bool(grp, octstr_imm("optimize-notification-size"),
&m->optimize_notification_size);
if (cfg_get_bool(&m->content_adaptation, grp, octstr_imm("content-adaptation")) < 0)
if (mms_cfg_get_bool(grp, octstr_imm("content-adaptation"), &m->content_adaptation) < 0)
m->content_adaptation = 1;
if (qdir)
octstr_destroy(qdir);
/* Now load the VASP list. */
l = cfg_get_multi_group(cfg, octstr_imm("mms-vasp"));
l = mms_cfg_get_multi(cfg, octstr_imm("mms-vasp"));
m->vasp_list = list_create();
for (i=0, n=list_len(l); i<n; i++) {
CfgGroup *grp = list_get(l, i);
mCfgGrp *grp = list_get(l, i);
MmsVasp *mv = gw_malloc(sizeof *mv);
Octstr *s;
int ibool = 0;
mv->id = _mms_cfg_getx(grp, octstr_imm("vasp-id"));
mv->short_code = -1;
cfg_get_integer(&mv->short_code, grp, octstr_imm("short-code"));
mms_cfg_get_int(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"));
@ -306,13 +307,13 @@ MmscSettings *mms_load_mmsc_settings(Cfg *cfg, List **proxyrelays)
octstr_destroy(s);
/* Set the handler vasp accounts. */
if (cfg_get_bool(&ibool, grp, octstr_imm("mms-to-email-handler")) == 0 &&
if (mms_cfg_get_bool(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 (cfg_get_bool(&ibool, grp, octstr_imm("mms-to-local-copy-handler")) == 0 &&
if (mms_cfg_get_bool(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.");
@ -324,14 +325,14 @@ MmscSettings *mms_load_mmsc_settings(Cfg *cfg, List **proxyrelays)
return m;
}
List *mms_proxy_relays(Cfg *cfg)
List *mms_proxy_relays(mCfg *cfg)
{
List *gl = cfg_get_multi_group(cfg, octstr_imm("mmsproxy"));
List *gl = mms_cfg_get_multi(cfg, octstr_imm("mmsproxy"));
int i, n;
List *l = list_create();
for (i = 0, n = list_len(gl); i < n; i++) {
CfgGroup *grp = list_get(gl, i);
mCfgGrp *grp = list_get(gl, i);
MmsProxyRelay *m = gw_malloc(sizeof *m);
m->host = _mms_cfg_getx(grp, octstr_imm("host"));

View File

@ -98,10 +98,10 @@ typedef struct MmscSettings {
} MmscSettings;
/* Returns mmsc settings. */
MmscSettings *mms_load_mmsc_settings(Cfg *cfg, List **proxyrelays);
MmscSettings *mms_load_mmsc_settings(mCfg *cfg, List **proxyrelays);
/* Returns list of MmsProxyRelay */
extern List *mms_proxy_relays(Cfg *cfg);
extern List *mms_proxy_relays(mCfg *cfg);
extern Octstr *mms_makefetchurl(char *qf, Octstr *token, int loc,
Octstr *to,

View File

@ -28,7 +28,7 @@ static int find_own(int i, int argc, char *argv[]);
static void fixup_recipient(void);
static void fixup_sender(void);
static Cfg *cfg;
static mCfg *cfg;
static List *proxyrelays;
int main(int argc, char *argv[])
{
@ -51,9 +51,9 @@ int main(int argc, char *argv[])
else
fname = octstr_create(argv[cfidx]);
cfg = cfg_create(fname);
cfg = mms_cfg_read(fname);
if (cfg_read(cfg) == -1)
if (cfg == NULL)
panic(0, "Couldn't read configuration from '%s'.", octstr_get_cstr(fname));
octstr_destroy(fname);
@ -64,7 +64,7 @@ int main(int argc, char *argv[])
/* Load settings. */
settings = mms_load_mmsc_settings(cfg, &proxyrelays);
cfg_destroy(cfg);
mms_cfg_destroy(cfg);
if (!settings)
panic(0, "No global MMSC configuration!");

View File

@ -37,7 +37,7 @@ typedef struct MmsHTTPClientInfo {
MmsVasp *vasp;
} MmsHTTPClientInfo;
static Cfg *cfg;
static mCfg *cfg;
static List *proxyrelays;
static MmscSettings *settings;
@ -76,9 +76,9 @@ int main(int argc, char *argv[])
else
fname = octstr_create(argv[cfidx]);
cfg = cfg_create(fname);
cfg = mms_cfg_read(fname);
if (cfg_read(cfg) == -1)
if (cfg == NULL)
panic(0, "Couldn't read configuration from '%s'.", octstr_get_cstr(fname));
octstr_destroy(fname);
@ -90,7 +90,7 @@ int main(int argc, char *argv[])
/* Load settings. */
settings = mms_load_mmsc_settings(cfg, &proxyrelays);
cfg_destroy(cfg);
mms_cfg_destroy(cfg);
if (!settings)
panic(0, "No global MMSC configuration!");
@ -1696,7 +1696,7 @@ static void mm7soap_dispatch(MmsHTTPClientInfo *h)
octstr_compare(e->vaspid, h->vasp->id) != 0) {
status = 2001;
error(0, "MMS Proxy(MM7): CancelReq: Found message[id=%s]"
" bxut vaspid id=%s does not match!",
" but vaspid id=%s does not match!",
octstr_get_cstr(msgid), octstr_get_cstr(h->vasp->id));
} else { /* Kill it. */
int i, n;

View File

@ -12,7 +12,7 @@
*/
#include "mmsrelay.h"
static Cfg *cfg;
static mCfg *cfg;
MmscSettings *settings;
List *proxyrelays;
@ -41,9 +41,9 @@ int main(int argc, char *argv[])
else
fname = octstr_create(argv[cfidx]);
cfg = cfg_create(fname);
cfg = mms_cfg_read(fname);
if (cfg_read(cfg) == -1)
if (cfg == NULL)
panic(0, "Couldn't read configuration from '%s'.", octstr_get_cstr(fname));
octstr_destroy(fname);
@ -54,7 +54,7 @@ int main(int argc, char *argv[])
settings = mms_load_mmsc_settings(cfg,&proxyrelays);
cfg_destroy(cfg);
mms_cfg_destroy(cfg);
if (!settings)
panic(0, "No global MMSC configuration!");

View File

@ -66,7 +66,7 @@ static int find_own(int i, int argc, char *argv[])
return -1;
}
static Cfg *cfg;
static mCfg *cfg;
static List *proxyrelays;
@ -91,9 +91,9 @@ int main(int argc, char *argv[])
else
fname = octstr_create(argv[cfidx]);
cfg = cfg_create(fname);
cfg = mms_cfg_read(fname);
if (cfg_read(cfg) == -1)
if (cfg == NULL)
panic(0, "Couldn't read configuration from '%s'.", octstr_get_cstr(fname));
octstr_destroy(fname);
@ -105,7 +105,7 @@ int main(int argc, char *argv[])
/* Load settings. */
settings = mms_load_mmsc_settings(cfg, &proxyrelays);
cfg_destroy(cfg);
mms_cfg_destroy(cfg);
if (!settings)
panic(0, "No global MMSC configuration!");