diff --git a/mbuni/ChangeLog b/mbuni/ChangeLog index 652e4f4..5aa0e56 100644 --- a/mbuni/ChangeLog +++ b/mbuni/ChangeLog @@ -1,3 +1,6 @@ +2009-02-25 P. A. Bagyenda + * Added ChargedParty MM7/SOAP param to mmsbox + * Fixed: Improper setting of log level 2009-02-24 P. A. Bagyenda * Pass MM7/SOAP LinkedID to service url in mmsbox * Minor improvements in pgsql-queue error reporting diff --git a/mbuni/doc/userguide.shtml b/mbuni/doc/userguide.shtml index caf9a9a..fbfb99b 100644 --- a/mbuni/doc/userguide.shtml +++ b/mbuni/doc/userguide.shtml @@ -3080,6 +3080,15 @@ faked-sender = 100
+ + + charged-party + + + Optional. Set to the MM7/SOAP ChargedParty parameter. + + +

@@ -3735,6 +3744,29 @@ Strings + + + X-Mbuni-DistributionIndicator + + + + Should be set to the DistributionIndicator value to be + passed to the MMSC in the MM7/SOAP message submission. + + + + + + + X-Mbuni-Charged-Party + + + + Should be set to the ChargedParty value to be + passed to the MMSC in the MM7/SOAP message submission. + + +

diff --git a/mbuni/mmlib/mms_cfg.h b/mbuni/mmlib/mms_cfg.h index 906bcc0..ff7ef9f 100644 --- a/mbuni/mmlib/mms_cfg.h +++ b/mbuni/mmlib/mms_cfg.h @@ -53,7 +53,7 @@ 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(mCfg *cfg, mCfgGrp *grp, Octstr *name, int *bool); +int mms_cfg_get_bool(mCfg *cfg, mCfgGrp *grp, Octstr *name, int *val); /* Get a field value from a group. */ List *mms_cfg_get_list(mCfg *cfg, mCfgGrp *grp, Octstr *name); diff --git a/mbuni/mmlib/mms_mm7soap.c b/mbuni/mmlib/mms_mm7soap.c index 31e77c7..7f7b33c 100644 --- a/mbuni/mmlib/mms_mm7soap.c +++ b/mbuni/mmlib/mms_mm7soap.c @@ -1017,13 +1017,13 @@ MSoapMsg_t *mm7_mmsmsg_to_soap(MmsMsg *msg, Octstr *from, List *xto, char *vaspid, char *vasid, Octstr *uaprof, time_t uaprof_tstamp, - Octstr *distrib_indicator) + List *hdrs) { int i, n, mtype = mms_messagetype(msg); MSoapMsg_t *m = NULL; Octstr *xfrom = (from != NULL) ? octstr_format("+ %S", from) : NULL, *s; Octstr *xuaprof_val = (uaprof) ? octstr_format("%S,%ld", uaprof, uaprof_tstamp) : NULL; - + switch(mtype) { case MMS_MSGTYPE_SEND_REQ: case MMS_MSGTYPE_RETRIEVE_CONF: @@ -1054,6 +1054,8 @@ MSoapMsg_t *mm7_mmsmsg_to_soap(MmsMsg *msg, Octstr *from, List *xto, if (isclientside) { + Octstr *distrib_indicator = hdrs ? http_header_value(hdrs, octstr_imm("X-Mbuni-DistributionIndicator")) : NULL; + Octstr *cparty = hdrs ? http_header_value(hdrs, octstr_imm("X-Mbuni-Charged-Party")) : NULL; if (vaspid) http_header_add(m->envelope, "VASPID", vaspid); if (vasid) @@ -1075,6 +1077,12 @@ MSoapMsg_t *mm7_mmsmsg_to_soap(MmsMsg *msg, Octstr *from, List *xto, if (distrib_indicator) http_header_add(m->envelope, "DistributionIndicator", octstr_str_case_compare(distrib_indicator, "true") == 0 ? "true" : "false"); + if (cparty) + http_header_add(m->envelope, "ChargedParty", + octstr_get_cstr(cparty)); + + octstr_destroy(distrib_indicator); + octstr_destroy(cparty); } else { /* not clientside. */ if (xuaprof_val) /* only on DeliverReq. */ http_header_add(m->envelope, "UACapabilities", octstr_get_cstr(xuaprof_val)); @@ -1182,7 +1190,8 @@ MSoapMsg_t *mm7_mmsmsg_to_soap(MmsMsg *msg, Octstr *from, List *xto, octstr_destroy(xfrom); octstr_destroy(xuaprof_val); - + + return m; } diff --git a/mbuni/mmlib/mms_mm7soap.h b/mbuni/mmlib/mms_mm7soap.h index a087559..b591a28 100644 --- a/mbuni/mmlib/mms_mm7soap.h +++ b/mbuni/mmlib/mms_mm7soap.h @@ -73,7 +73,7 @@ MSoapMsg_t *mm7_mmsmsg_to_soap(MmsMsg *msg, Octstr *from, List *xto, char *vaspid, char *vasid, Octstr *uaprof, time_t uaprof_tstamp, - Octstr *distrib_indicator); + List *extra_hdrs); MSoapMsg_t *mm7_make_resp(MSoapMsg_t *mreq, int status, Octstr *msgid, int isclientside); /* Return the header value for some header. */ Octstr *mm7_soap_header_value(MSoapMsg_t *m, Octstr *header); diff --git a/mbuni/mmlib/mms_util.c b/mbuni/mmlib/mms_util.c index ad13c7a..5db7ed5 100644 --- a/mbuni/mmlib/mms_util.c +++ b/mbuni/mmlib/mms_util.c @@ -56,7 +56,6 @@ int mms_load_core_settings(mCfg *cfg, mCfgGrp *cgrp) 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); - log_set_log_level(GW_INFO); octstr_destroy(log); } diff --git a/mbuni/mmsbox/bearerbox.c b/mbuni/mmsbox/bearerbox.c index e80e27c..d2f5657 100644 --- a/mbuni/mmsbox/bearerbox.c +++ b/mbuni/mmsbox/bearerbox.c @@ -1041,7 +1041,7 @@ static Octstr *mm7soap_send(MmscGrp *mmc, Octstr *from, Octstr *to, MSoapMsg_t *mreq = NULL, *mresp = NULL; List *rh = NULL, *ph = NULL; Octstr *body = NULL, *rbody = NULL, *url = NULL; - Octstr *s, *distrib = NULL; + Octstr *s; char *xvasid = vasid ? vasid : (mmc->default_vasid ? octstr_get_cstr(mmc->default_vasid) : NULL); mms_info(0, "MM7", mmc->id, "MMSBox: Send[soap] to MMSC[%s], msg type [%s], from %s, to %s", @@ -1051,14 +1051,12 @@ static Octstr *mm7soap_send(MmscGrp *mmc, Octstr *from, Octstr *to, gwlist_append(xto, to); - if (hdrs) - distrib = http_header_value(hdrs, octstr_imm("X-Mbuni-DistributionIndicator")); if ((mreq = mm7_mmsmsg_to_soap(m, (mmc == NULL || mmc->no_senderaddress == 0) ? from : NULL, xto, transid, service_code, linkedid, 1, octstr_get_cstr(mmc->vasp_id), xvasid, NULL, 0,/* UA N/A on this side. */ - distrib)) == NULL) { + hdrs)) == NULL) { *error = octstr_format("Failed to convert Msg[%S] 2 SOAP message!", mms_message_type_to_string(mtype)); goto done1; @@ -1146,7 +1144,7 @@ done1: http_destroy_headers(ph); octstr_destroy(rbody); octstr_destroy(url); - octstr_destroy(distrib); + gwlist_destroy(xto, NULL); return ret; diff --git a/mbuni/mmsbox/mmsbox.c b/mbuni/mmsbox/mmsbox.c index f80ba5b..250c601 100644 --- a/mbuni/mmsbox/mmsbox.c +++ b/mbuni/mmsbox/mmsbox.c @@ -1026,7 +1026,7 @@ static int make_and_queue_msg(Octstr *data, Octstr *ctype, List *reply_headers, { Octstr *from = NULL, *xfrom = NULL, *subject = NULL, *turl = get_toplevel_url(base_url); Octstr *dlr_url = NULL, *rr_url = NULL, *mmc = NULL, *xservice_code = NULL, *hsvc_code = NULL; - Octstr *allow_adaptations = NULL, *mclass = NULL, *prio = NULL, *distro = NULL; + Octstr *allow_adaptations = NULL, *mclass = NULL, *prio = NULL, *distro = NULL, *chargedparty = NULL; MmsMsg *m = NULL; MIMEEntity *me = mime_entity_create(); List *xheaders = NULL; @@ -1083,6 +1083,7 @@ static int make_and_queue_msg(Octstr *data, Octstr *ctype, List *reply_headers, mclass = http_header_value(reply_headers, octstr_imm("X-Mbuni-MessageClass")); prio = http_header_value(reply_headers, octstr_imm("X-Mbuni-Priority")); hsvc_code = http_header_value(reply_headers, octstr_imm("X-Mbuni-ServiceCode")); + chargedparty = http_header_value(reply_headers, octstr_imm("X-Mbuni-Charged-Party")); } if (reply_headers) { @@ -1308,6 +1309,9 @@ static int make_and_queue_msg(Octstr *data, Octstr *ctype, List *reply_headers, if (distro) /* always add distrib */ http_header_add(hdrs, "X-Mbuni-DistributionIndicator", (octstr_str_case_compare(distro, "true") == 0) ? "true" : "false"); + + if (chargedparty) + http_header_add(hdrs, "X-Mbuni-Charged-Party", octstr_get_cstr(chargedparty)); if (passthro_headers && reply_headers) { /* if user wants passthro headers, get them and add them. */ int n = gwlist_len(reply_headers); int i; @@ -1364,7 +1368,8 @@ done: octstr_destroy(subject); octstr_destroy(otransid); octstr_destroy(turl); - + octstr_destroy(chargedparty); + octstr_destroy(xmhdr); octstr_destroy(xmhdr_val); if (me) @@ -1431,6 +1436,7 @@ static void dispatch_sendmms_recv(List *rl) Octstr *send_type = http_cgi_variable(h->cgivars, "mms-direction"); Octstr *sheader = http_cgi_variable(h->cgivars, "extra-content-header"); Octstr *validity = http_cgi_variable(h->cgivars, "validityperiod"); + Octstr *chargedparty = http_cgi_variable(h->cgivars, "charged-party"); Octstr *data_url = NULL; dlr_url = http_cgi_variable(h->cgivars, "dlr-url"); @@ -1549,6 +1555,9 @@ static void dispatch_sendmms_recv(List *rl) if (sheader) HTTP_REPLACE_HEADER(rh, "X-Mbuni-Content-Header", octstr_get_cstr(sheader)); + + if (chargedparty) + HTTP_REPLACE_HEADER(rh, "X-Mbuni-Charged-Party", octstr_get_cstr(chargedparty)); if (validity) { int diff = atoi(octstr_get_cstr(validity));