From d6292f03d9d9b58f5d529b47ed1da4e32dc35281 Mon Sep 17 00:00:00 2001 From: bagyenda <> Date: Mon, 2 Apr 2007 05:29:00 +0000 Subject: [PATCH] Added group-id to VAS GW config --- mbuni/ChangeLog | 2 ++ mbuni/doc/userguide.shtml | 16 ++++++++++++++++ mbuni/mmlib/mms_cfg.def | 1 + mbuni/mmlib/mms_msg.c | 2 +- mbuni/mmsbox/bearerbox.c | 29 +++++++++++++++++------------ mbuni/mmsbox/dlr.c | 16 ++++++++-------- mbuni/mmsbox/mmsbox.h | 6 +++--- mbuni/mmsbox/mmsbox_cfg.c | 13 +++++++++++-- mbuni/mmsbox/mmsbox_cfg.h | 1 + 9 files changed, 60 insertions(+), 26 deletions(-) diff --git a/mbuni/ChangeLog b/mbuni/ChangeLog index cab1180..178d02b 100644 --- a/mbuni/ChangeLog +++ b/mbuni/ChangeLog @@ -1,3 +1,5 @@ +2007-04-02 Vincent Chavanis + * Added group-id field to VAS GW MMC config 2007-03-20 P. A. Bagyenda * Major corrections to MM4 functionality, bringing conformance to 3GPP TS 23.140 (Thanks to Deon van der Merwe for funding) 2007-03-09 P. A. Bagyenda diff --git a/mbuni/doc/userguide.shtml b/mbuni/doc/userguide.shtml index a031e5b..072c7da 100644 --- a/mbuni/doc/userguide.shtml +++ b/mbuni/doc/userguide.shtml @@ -1924,6 +1924,7 @@ sent via SMTP to the proxy. group = mmsc
id = testone
+group-id = mmc1
mmsc-url = http://mbuni:test@192.168.129.52:8080/eaif
incoming-username = user
incoming-password = pass
@@ -1974,6 +1975,21 @@ Supported configuration parameters are: + + + group-id + + + + String + + + Optional: + Can be used to group different MMCs for purposes of receiving DLRs, + etc. + + + type diff --git a/mbuni/mmlib/mms_cfg.def b/mbuni/mmlib/mms_cfg.def index d67ffce..51ca4f5 100644 --- a/mbuni/mmlib/mms_cfg.def +++ b/mbuni/mmlib/mms_cfg.def @@ -115,6 +115,7 @@ MULTI_GROUP(send-mms-user, MULTI_GROUP(mmsc, OCTSTR(id) + OCTSTR(group-id) OCTSTR(mmsc-url) OCTSTR(incoming-username) OCTSTR(incoming-password) diff --git a/mbuni/mmlib/mms_msg.c b/mbuni/mmlib/mms_msg.c index 5a87756..cf9f423 100644 --- a/mbuni/mmlib/mms_msg.c +++ b/mbuni/mmlib/mms_msg.c @@ -278,7 +278,7 @@ static int mms_unpack_well_known_field(List *unpacked, int field_type, ret = wsp_field_value(context, &val); if (parse_error(context)) { - warning(0, "Faulty header [code=%d], skipping remaining headers.", field_type); + warning(0, "Faulty header [code = %d], skipping remaining headers.", field_type); parse_skip_to_limit(context); return -1; } diff --git a/mbuni/mmsbox/bearerbox.c b/mbuni/mmsbox/bearerbox.c index f7f18a2..381894c 100644 --- a/mbuni/mmsbox/bearerbox.c +++ b/mbuni/mmsbox/bearerbox.c @@ -78,15 +78,17 @@ done: } static int send_report(Octstr *from, char *report_type, Octstr *status, - Octstr *msgid, Octstr *mmc_id) + Octstr *msgid, Octstr *mmc_id, Octstr *mmc_gid) { - Octstr *url = mms_dlr_url_get(msgid, report_type, mmc_id); + Octstr *url = mms_dlr_url_get(msgid, report_type, mmc_gid); List *rh, *rph = NULL; Octstr *furl = NULL, *rb = NULL; - if (!url) + if (!url) { + info(0, "Sending delivery-report Failed: 'url' is NULL"); return 0; + } rh = http_create_empty_headers(); @@ -113,7 +115,7 @@ static int send_report(Octstr *from, char *report_type, Octstr *status, */ if (strcmp(report_type, "read-report") == 0 || octstr_case_compare(status, octstr_imm("Deferred")) != 0) - mms_dlr_url_remove(msgid, report_type, mmc_id); + mms_dlr_url_remove(msgid, report_type, mmc_gid); return 0; } @@ -140,7 +142,7 @@ static void mm7soap_receive(MmsHTTPClientInfo *h) if (mreq) msgtype = mms_mm7tag_to_cstr(mm7_msgtype(mreq)); debug("mmsbox.mm7sendinterface", 0, - " --> Enterred mm7dispatch interface, mreq=%s mtype = %s <-- ", + " --> Enterred mm7dispatch interface, mreq=[%s] mtype=[%s] <-- ", mreq ? "Ok" : "Null", mreq ? (char *)msgtype : "Null"); @@ -204,7 +206,8 @@ static void mm7soap_receive(MmsHTTPClientInfo *h) info(0, "Sending delivery-report [FROM:%s] [VALUE:%s] [DESC:%s] [MSGID:%s]", octstr_get_cstr(from), octstr_get_cstr(value), octstr_get_cstr(desc), octstr_get_cstr(h->m->id)); - send_report(from, "delivery-report", value, msgid, h->m->id); + send_report(from, "delivery-report", + value, msgid, h->m->id, h->m->group_id); if (desc) octstr_destroy(desc); @@ -219,7 +222,9 @@ static void mm7soap_receive(MmsHTTPClientInfo *h) msgid = mm7_soap_header_value(mreq, octstr_imm("MessageID")); value = mm7_soap_header_value(mreq, octstr_imm("MMStatus")); - send_report(from, "read-report", value, msgid, h->m->id); + send_report(from, + "read-report", value, msgid, + h->m->id, h->m->group_id); if (value) octstr_destroy(value); @@ -397,7 +402,7 @@ static void mm7eaif_receive(MmsHTTPClientInfo *h) case MMS_MSGTYPE_DELIVERY_IND: value = http_header_value(mh, octstr_imm("X-Mms-Status")); value2 = http_header_value(mh, octstr_imm("Message-ID")); - send_report(hfrom, "delivery-report", value, value2, h->m->id); + send_report(hfrom, "delivery-report", value, value2, h->m->id, h->m->group_id); if (value) octstr_destroy(value); @@ -408,7 +413,7 @@ static void mm7eaif_receive(MmsHTTPClientInfo *h) case MMS_MSGTYPE_READ_ORIG_IND: value = http_header_value(mh, octstr_imm("X-Mms-Read-Status")); value2 = http_header_value(mh, octstr_imm("Message-ID")); - send_report(hfrom, "read-report", value, value2, h->m->id); + send_report(hfrom, "read-report", value, value2, h->m->id, h->m->group_id); if (value) octstr_destroy(value); @@ -780,9 +785,9 @@ static int mms_sendtommsc(MmscGrp *mmc, Octstr *from, Octstr *to, Octstr *transi if (id) { if (dlr_url) /* remember the url's for reporting purposes. */ - mms_dlr_url_put(id, "delivery-report", mmc->id, dlr_url); + mms_dlr_url_put(id, "delivery-report", mmc->group_id, dlr_url); if (rr_url) - mms_dlr_url_put(id, "read-report", mmc->id, rr_url); + mms_dlr_url_put(id, "read-report", mmc->group_id, rr_url); octstr_destroy(id); return MMS_SEND_OK; @@ -886,7 +891,7 @@ static int sendMsg(MmsEnvelope *e) send_report(to->rcpt, "delivery-report", (e->expiryt != 0 && e->expiryt < tnow) ? octstr_imm("Expired") : octstr_imm("Rejected"), - e->msgId, mmc->id); + e->msgId, mmc->id, mmc->group_id); if (res == MMS_SEND_ERROR_FATAL) to->process = 0; /* No more attempts. */ diff --git a/mbuni/mmsbox/dlr.c b/mbuni/mmsbox/dlr.c index 8dcdcd7..3649190 100644 --- a/mbuni/mmsbox/dlr.c +++ b/mbuni/mmsbox/dlr.c @@ -24,7 +24,7 @@ #include "mms_queue.h" #define MAXTRIES 10 -static int dlr_entry_fname(char *msgid, char *rtype, Octstr *mmc_id, Octstr **efname) +static int dlr_entry_fname(char *msgid, char *rtype, Octstr *mmc_gid, Octstr **efname) { char d1[2], d2[3], fbuf[512], *p; unsigned long h = _mshash(msgid); @@ -53,7 +53,7 @@ static int dlr_entry_fname(char *msgid, char *rtype, Octstr *mmc_id, Octstr **ef return -1; } - t = octstr_format("%S-%s_%s", mmc_id, msgid, rtype); /* Put mmc id into name. */ + t = octstr_format("%S-%s_%s", mmc_gid, msgid, rtype); /* Put mmc id into name. */ octstr_replace(t, octstr_imm("/"), octstr_imm("$")); /* XXX safe in all cases?? */ s = octstr_format("%s/%S", fbuf, t); @@ -81,9 +81,9 @@ static int dlr_entry_fname(char *msgid, char *rtype, Octstr *mmc_id, Octstr **ef return fd; } -void mms_dlr_url_put(Octstr *msgid, char *rtype, Octstr *mmc_id, Octstr *dlr_url) +void mms_dlr_url_put(Octstr *msgid, char *rtype, Octstr *mmc_gid, Octstr *dlr_url) { - int fd = dlr_entry_fname(octstr_get_cstr(msgid), rtype, mmc_id, NULL); + int fd = dlr_entry_fname(octstr_get_cstr(msgid), rtype, mmc_gid, NULL); if (fd >= 0) { octstr_write_data(dlr_url, fd, 0); @@ -91,9 +91,9 @@ void mms_dlr_url_put(Octstr *msgid, char *rtype, Octstr *mmc_id, Octstr *dlr_url } } -Octstr *mms_dlr_url_get(Octstr *msgid, char *rtype, Octstr *mmc_id) +Octstr *mms_dlr_url_get(Octstr *msgid, char *rtype, Octstr *mmc_gid) { - int fd = dlr_entry_fname(octstr_get_cstr(msgid), rtype, mmc_id, NULL); + int fd = dlr_entry_fname(octstr_get_cstr(msgid), rtype, mmc_gid, NULL); FILE *f; if (fd >= 0 && (f = fdopen(fd, "r+")) != NULL) { @@ -110,10 +110,10 @@ Octstr *mms_dlr_url_get(Octstr *msgid, char *rtype, Octstr *mmc_id) return NULL; } -void mms_dlr_url_remove(Octstr *msgid, char *rtype, Octstr *mmc_id) +void mms_dlr_url_remove(Octstr *msgid, char *rtype, Octstr *mmc_gid) { Octstr *fname = NULL; - int fd = dlr_entry_fname(octstr_get_cstr(msgid), rtype, mmc_id, &fname); + int fd = dlr_entry_fname(octstr_get_cstr(msgid), rtype, mmc_gid, &fname); if (fname) unlink(octstr_get_cstr(fname)); diff --git a/mbuni/mmsbox/mmsbox.h b/mbuni/mmsbox/mmsbox.h index a311b6e..78b61a9 100644 --- a/mbuni/mmsbox/mmsbox.h +++ b/mbuni/mmsbox/mmsbox.h @@ -15,9 +15,9 @@ #include "mmsbox_cfg.h" extern int rstop; -void mms_dlr_url_put(Octstr *msgid, char *rtype, Octstr *mmc_id, Octstr *dlr_url); -Octstr *mms_dlr_url_get(Octstr *msgid, char *rtype, Octstr *mmc_id); -void mms_dlr_url_remove(Octstr *msgid, char *rtype, Octstr *mmc_id); +void mms_dlr_url_put(Octstr *msgid, char *rtype, Octstr *mmc_gid, Octstr *dlr_url); +Octstr *mms_dlr_url_get(Octstr *msgid, char *rtype, Octstr *mmc_gid); +void mms_dlr_url_remove(Octstr *msgid, char *rtype, Octstr *mmc_gid); void mmsc_receive_func(MmscGrp *m); void mmsbox_outgoing_queue_runner(int *rstop); diff --git a/mbuni/mmsbox/mmsbox_cfg.c b/mbuni/mmsbox/mmsbox_cfg.c index 276cde1..456fae2 100644 --- a/mbuni/mmsbox/mmsbox_cfg.c +++ b/mbuni/mmsbox/mmsbox_cfg.c @@ -145,6 +145,12 @@ 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")); + if (octstr_len(m->id) < 1) + panic(0,"Missing required value `mmsc-id' in config file!"); + m->group_id = _mms_cfg_getx(x, octstr_imm("group-id")); + if (octstr_len(m->group_id) < 1) + m->group_id = octstr_duplicate(m->id); + m->mmsc_url = _mms_cfg_getx(x, octstr_imm("mmsc-url")); m->allowed_prefix = mms_cfg_get(x, octstr_imm("allowed-prefix")); @@ -153,8 +159,11 @@ int mms_load_mmsbox_settings(mCfg *cfg, gwthread_func_t *mmsc_handler_func) m->incoming.allow_ip = mms_cfg_get(x, octstr_imm("allow-ip")); m->incoming.deny_ip = mms_cfg_get(x, octstr_imm("deny-ip")); - info(0, "MMSC[%s], allow=[%s], deny=[%s]", octstr_get_cstr(m->id), - octstr_get_cstr(m->incoming.allow_ip), octstr_get_cstr(m->incoming.deny_ip)); + info(0, "MMSC[%s], allow=[%s], deny=[%s] group_id=[%s]", + octstr_get_cstr(m->id), + octstr_get_cstr(m->incoming.allow_ip), + 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")); diff --git a/mbuni/mmsbox/mmsbox_cfg.h b/mbuni/mmsbox/mmsbox_cfg.h index d01a31b..f4d1e38 100644 --- a/mbuni/mmsbox/mmsbox_cfg.h +++ b/mbuni/mmsbox/mmsbox_cfg.h @@ -16,6 +16,7 @@ typedef struct MmscGrp { Octstr *id; /* MMSC id (for logging). */ + Octstr *group_id; /* GROUP MMSC id (used for qf). */ Octstr *mmsc_url; /* URL at which MMSC can be reached. */ struct { Octstr *user, *pass;