1
0
Fork 0

Minor mmsbox fixes

This commit is contained in:
bagyenda 2008-11-20 08:43:52 +00:00
parent b579472a52
commit b064ee14f0
5 changed files with 109 additions and 39 deletions

View File

@ -1,3 +1,6 @@
2008-11-20 P. A. Bagyenda <bagyenda@dsmagic.com>
* Improved DLR status messages in mmsbox
* Minor memory leak fixed in MM7/SOAP processing
2008-11-14 P. A. Bagyenda <bagyenda@dsmagic.com> 2008-11-14 P. A. Bagyenda <bagyenda@dsmagic.com>
* PSQL Queue module changes: optionally move message storage to file to improve performance * PSQL Queue module changes: optionally move message storage to file to improve performance
2008-11-12 P. A. Bagyenda <bagyenda@dsmagic.com> 2008-11-12 P. A. Bagyenda <bagyenda@dsmagic.com>

View File

@ -1104,14 +1104,17 @@ static void pgq_queue_run(char *dir,
mms_info(0, "pgsql_queue", NULL, "Queue runner on [%s] shutdown, started...", dir); mms_info(0, "pgsql_queue", NULL, "Queue runner on [%s] shutdown, started...", dir);
gwlist_remove_producer(items_list); gwlist_remove_producer(items_list);
#if 0
for (i=0;i<num_threads; i++) for (i=0;i<num_threads; i++)
gwthread_wakeup(th_ids[i]); gwthread_cancel(th_ids[i]);
#if 1 #endif
for (i=0;i<num_threads; i++) for (i=0;i<num_threads; i++)
gwthread_join(th_ids[i]); gwthread_join(th_ids[i]);
#endif
gwlist_destroy(items_list, NULL);
gw_free(th_ids); gw_free(th_ids);
gwlist_destroy(items_list, NULL);
mms_info(0, "pgsql_queue", NULL, "Queue runner on [%s] shutdown, complete...", dir); mms_info(0, "pgsql_queue", NULL, "Queue runner on [%s] shutdown, complete...", dir);
} }

View File

@ -965,8 +965,8 @@ MmsMsg *mm7_soap_to_mmsmsg(MSoapMsg_t *m, Octstr *from)
t = date_parse_http(q); t = date_parse_http(q);
else else
t = time(NULL); t = time(NULL);
r = http_header_value(m->envelope, octstr_imm("MMStatus"));
r = http_header_value(m->envelope, octstr_imm("MMStatus"));
if (msgtype == MM7_TAG_DeliveryReportReq && p) { if (msgtype == MM7_TAG_DeliveryReportReq && p) {
Octstr *status = r && (mms_string_to_status(r) >= 0) ? r : octstr_imm("Indeterminate"); Octstr *status = r && (mms_string_to_status(r) >= 0) ? r : octstr_imm("Indeterminate");
msg = mms_deliveryreport(s ? s : octstr_imm("0000"), from, p, t, status); msg = mms_deliveryreport(s ? s : octstr_imm("0000"), from, p, t, status);
@ -979,6 +979,7 @@ MmsMsg *mm7_soap_to_mmsmsg(MSoapMsg_t *m, Octstr *from)
octstr_destroy(p); octstr_destroy(p);
octstr_destroy(r); octstr_destroy(r);
octstr_destroy(f); octstr_destroy(f);
octstr_destroy(q);
break; break;
default: default:
break; break;

View File

@ -165,7 +165,8 @@ static int mm7soap_receive(MmsBoxHTTPClientInfo *h)
int status = 1000; int status = 1000;
unsigned char *msgtype = (unsigned char *)""; unsigned char *msgtype = (unsigned char *)"";
Octstr *qf = NULL, *mmc_id = NULL, *qdir = NULL; Octstr *qf = NULL, *mmc_id = NULL, *qdir = NULL;
List *qhdr = http_create_empty_headers();
if (h->body) if (h->body)
mreq = mm7_parse_soap(h->headers, h->body); mreq = mm7_parse_soap(h->headers, h->body);
if (mreq) if (mreq)
@ -191,7 +192,7 @@ static int mm7soap_receive(MmsBoxHTTPClientInfo *h)
switch (mm7_msgtype(mreq)) { switch (mm7_msgtype(mreq)) {
Octstr *value, *value2; Octstr *value, *value2;
List *hdr;
case MM7_TAG_DeliverReq: case MM7_TAG_DeliverReq:
m = mm7_soap_to_mmsmsg(mreq, from); m = mm7_soap_to_mmsmsg(mreq, from);
if (m) { if (m) {
@ -263,31 +264,43 @@ static int mm7soap_receive(MmsBoxHTTPClientInfo *h)
value = mm7_soap_header_value(mreq, octstr_imm("MMStatus")); value = mm7_soap_header_value(mreq, octstr_imm("MMStatus"));
msgid = mm7_soap_header_value(mreq, octstr_imm("MessageID")); msgid = mm7_soap_header_value(mreq, octstr_imm("MessageID"));
if ((value2 = mm7_soap_header_value(mreq, octstr_imm("StatusText"))) != NULL) {
http_header_add(qhdr, "X-Mbuni-StatusText", octstr_get_cstr(value2));
octstr_destroy(value2);
value2 = NULL;
}
if ((value2 = mm7_soap_header_value(mreq, octstr_imm("Details"))) != NULL) {
http_header_add(qhdr, "X-Mbuni-StatusDetails", octstr_get_cstr(value2));
octstr_destroy(value2);
value2 = NULL;
}
m = mm7_soap_to_mmsmsg(mreq, from); m = mm7_soap_to_mmsmsg(mreq, from);
if (mmc_id != NULL) { /* internal routing. */ if (mmc_id != NULL) { /* internal routing. */
if (m) if (m)
fixup_relayed_report(m, h->m, "delivery-report", fixup_relayed_report(m, h->m, "delivery-report",
value); /* fix it up if it is relayed. */ value); /* fix it up if it is relayed. */
hdr = NULL;
value2 = NULL; value2 = NULL;
} else { /* routing to URL -- get it. */ } else { /* routing to URL -- get it. */
Octstr *transid = NULL; Octstr *transid = NULL;
value2 = get_dlr_notify_url(msgid, "delivery-report",h->m->group_id, h->m->id, value2 = get_dlr_notify_url(msgid, "delivery-report",h->m->group_id, h->m->id,
value, &transid); value, &transid);
hdr = http_create_empty_headers(); http_header_add(qhdr, "X-Mbuni-Mmsc-GroupID", octstr_get_cstr(h->m->group_id));
http_header_add(hdr, "X-Mbuni-Mmsc-GroupID", octstr_get_cstr(h->m->group_id));
if (transid) { if (transid) {
http_header_add(hdr, "X-Mbuni-TransactionID", octstr_get_cstr(transid)); http_header_add(qhdr, "X-Mbuni-TransactionID", octstr_get_cstr(transid));
octstr_destroy(transid); octstr_destroy(transid);
} }
if (uaprof) { if (uaprof) {
Octstr *sx = date_format_http(uaprof_tstamp); Octstr *sx = date_format_http(uaprof_tstamp);
http_header_add(hdr, "X-Mbuni-UAProf", octstr_get_cstr(uaprof)); http_header_add(qhdr, "X-Mbuni-UAProf", octstr_get_cstr(uaprof));
http_header_add(hdr, "X-Mbuni-Timestamp", octstr_get_cstr(sx)); http_header_add(qhdr, "X-Mbuni-Timestamp", octstr_get_cstr(sx));
octstr_destroy(sx); octstr_destroy(sx);
} }
} }
@ -297,7 +310,7 @@ static int mm7soap_receive(MmsBoxHTTPClientInfo *h)
0, time(NULL) + default_msgexpiry, m, NULL, 0, time(NULL) + default_msgexpiry, m, NULL,
NULL, NULL, NULL, NULL,
value2, NULL, value2, NULL,
hdr, qhdr,
0, 0,
octstr_get_cstr(qdir), octstr_get_cstr(qdir),
"MM7/SOAP-IN", "MM7/SOAP-IN",
@ -311,7 +324,6 @@ static int mm7soap_receive(MmsBoxHTTPClientInfo *h)
octstr_destroy(value); octstr_destroy(value);
octstr_destroy(value2); octstr_destroy(value2);
http_destroy_headers(hdr);
break; break;
case MM7_TAG_ReadReplyReq: case MM7_TAG_ReadReplyReq:
@ -323,25 +335,23 @@ static int mm7soap_receive(MmsBoxHTTPClientInfo *h)
if (mmc_id != NULL) { /* internal routing. */ if (mmc_id != NULL) { /* internal routing. */
if (m) if (m)
fixup_relayed_report(m, h->m, "read-report", octstr_imm("")); fixup_relayed_report(m, h->m, "read-report", octstr_imm(""));
hdr = NULL;
value2 = NULL; value2 = NULL;
} else { } else {
Octstr *transid = NULL; Octstr *transid = NULL;
value2 = get_dlr_notify_url(msgid, "read-report",h->m->group_id, h->m->id, value2 = get_dlr_notify_url(msgid, "read-report",h->m->group_id, h->m->id,
value, &transid); value, &transid);
hdr = http_create_empty_headers(); http_header_add(qhdr, "X-Mbuni-Mmsc-GroupID", octstr_get_cstr(h->m->group_id));
http_header_add(hdr, "X-Mbuni-Mmsc-GroupID", octstr_get_cstr(h->m->group_id));
if (transid) { if (transid) {
http_header_add(hdr, "X-Mbuni-TransactionID", octstr_get_cstr(transid)); http_header_add(qhdr, "X-Mbuni-TransactionID", octstr_get_cstr(transid));
octstr_destroy(transid); octstr_destroy(transid);
} }
if (uaprof) { if (uaprof) {
Octstr *sx = date_format_http(uaprof_tstamp); Octstr *sx = date_format_http(uaprof_tstamp);
http_header_add(hdr, "X-Mbuni-UAProf", octstr_get_cstr(uaprof)); http_header_add(qhdr, "X-Mbuni-UAProf", octstr_get_cstr(uaprof));
http_header_add(hdr, "X-Mbuni-Timestamp", octstr_get_cstr(sx)); http_header_add(qhdr, "X-Mbuni-Timestamp", octstr_get_cstr(sx));
octstr_destroy(sx); octstr_destroy(sx);
} }
@ -352,7 +362,7 @@ static int mm7soap_receive(MmsBoxHTTPClientInfo *h)
0, time(NULL) + default_msgexpiry, m, NULL, 0, time(NULL) + default_msgexpiry, m, NULL,
NULL, NULL, NULL, NULL,
value2, NULL, value2, NULL,
hdr, qhdr,
0, 0,
octstr_get_cstr(qdir), octstr_get_cstr(qdir),
"MM7/SOAP-IN", "MM7/SOAP-IN",
@ -367,7 +377,6 @@ static int mm7soap_receive(MmsBoxHTTPClientInfo *h)
octstr_destroy(value); octstr_destroy(value);
octstr_destroy(value2); octstr_destroy(value2);
http_destroy_headers(hdr);
break; break;
default: default:
@ -400,6 +409,7 @@ static int mm7soap_receive(MmsBoxHTTPClientInfo *h)
mm7_soap_destroy(mreq); mm7_soap_destroy(mreq);
gwlist_destroy(to, (gwlist_item_destructor_t *)octstr_destroy); gwlist_destroy(to, (gwlist_item_destructor_t *)octstr_destroy);
octstr_destroy(mmc_id); octstr_destroy(mmc_id);
http_destroy_headers(qhdr);
return MM7_SOAP_STATUS_OK(status) ? 0 : -1; return MM7_SOAP_STATUS_OK(status) ? 0 : -1;
} }
@ -421,7 +431,7 @@ static void handle_report_dispatch(MmscGrp *m, Octstr *hfrom, char *rtype, List
#endif #endif
/* helper function for queueing delivery reports. */ /* helper function for queueing delivery reports. */
static int queue_dlr(MmscGrp *mmc, Octstr *from, Octstr *to, Octstr *msgid, Octstr *status, char *interf) static int queue_dlr(MmscGrp *mmc, Octstr *from, Octstr *to, Octstr *msgid, Octstr *status, char *interf, List *errl)
{ {
Octstr *mmc_id = NULL, *qdir; Octstr *mmc_id = NULL, *qdir;
MmsMsg *m = mms_deliveryreport(msgid, from, to, time(NULL), status); MmsMsg *m = mms_deliveryreport(msgid, from, to, time(NULL), status);
@ -430,6 +440,9 @@ static int queue_dlr(MmscGrp *mmc, Octstr *from, Octstr *to, Octstr *msgid, Octs
Octstr *qf, *rr_uri = NULL; Octstr *qf, *rr_uri = NULL;
List *rqh = http_create_empty_headers(); List *rqh = http_create_empty_headers();
if (errl)
http_header_combine(rqh, errl); /* add status stuff. */
gwlist_append(lto, octstr_duplicate(to)); gwlist_append(lto, octstr_duplicate(to));
qdir = get_mmsbox_queue_dir(from, lto, mmc, &mmc_id); /* get routing info. */ qdir = get_mmsbox_queue_dir(from, lto, mmc, &mmc_id); /* get routing info. */
@ -468,6 +481,7 @@ static int queue_dlr(MmscGrp *mmc, Octstr *from, Octstr *to, Octstr *msgid, Octs
octstr_destroy(qf); octstr_destroy(qf);
http_destroy_headers(rqh); http_destroy_headers(rqh);
octstr_destroy(rr_uri);
gwlist_destroy(lto, (void *)octstr_destroy); gwlist_destroy(lto, (void *)octstr_destroy);
octstr_destroy(mmc_id); octstr_destroy(mmc_id);
@ -1095,6 +1109,7 @@ static Octstr *mm7soap_send(MmscGrp *mmc, Octstr *from, Octstr *to,
Octstr *service_code, Octstr *service_code,
List *hdrs, List *hdrs,
MmsMsg *m, Octstr **error, MmsMsg *m, Octstr **error,
List **errl,
int *retry) int *retry)
{ {
Octstr *ret = NULL; Octstr *ret = NULL;
@ -1105,8 +1120,7 @@ static Octstr *mm7soap_send(MmscGrp *mmc, Octstr *from, Octstr *to,
List *rh = NULL, *ph = NULL; List *rh = NULL, *ph = NULL;
Octstr *body = NULL, *rbody = NULL, *url = NULL; Octstr *body = NULL, *rbody = NULL, *url = NULL;
Octstr *s, *distrib = NULL; Octstr *s, *distrib = NULL;
char *xvasid = vasid ? vasid : char *xvasid = vasid ? vasid : (mmc->default_vasid ? octstr_get_cstr(mmc->default_vasid) : NULL);
(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", mms_info(0, "MM7", mmc->id, "MMSBox: Send[soap] to MMSC[%s], msg type [%s], from %s, to %s",
mmc->id ? octstr_get_cstr(mmc->id) : "", mmc->id ? octstr_get_cstr(mmc->id) : "",
@ -1148,7 +1162,21 @@ static Octstr *mm7soap_send(MmscGrp *mmc, Octstr *from, Octstr *to,
mmc->mmsc_url, mmc->id); mmc->mmsc_url, mmc->id);
goto done1; goto done1;
} }
if (errl) { /* Pick up status stuff -- for DLR */
if (*errl == NULL)
*errl = http_create_empty_headers();
if ((s = mm7_soap_header_value(mresp, octstr_imm("StatusText"))) != NULL) {
http_header_add(*errl, "X-Mbuni-StatusText", octstr_get_cstr(s));
octstr_destroy(s);
}
if ((s = mm7_soap_header_value(mresp, octstr_imm("Details"))) != NULL) {
http_header_add(*errl, "X-Mbuni-StatusDetails", octstr_get_cstr(s));
octstr_destroy(s);
}
}
/* Now look at response code and use it to tell you what you want. */ /* Now look at response code and use it to tell you what you want. */
if ((s = mm7_soap_header_value(mresp, octstr_imm("StatusCode"))) != NULL) { if ((s = mm7_soap_header_value(mresp, octstr_imm("StatusCode"))) != NULL) {
tstatus = atoi(octstr_get_cstr(s)); tstatus = atoi(octstr_get_cstr(s));
@ -1159,6 +1187,7 @@ static Octstr *mm7soap_send(MmscGrp *mmc, Octstr *from, Octstr *to,
} else } else
tstatus = MM7_SOAP_FORMAT_CORRUPT; tstatus = MM7_SOAP_FORMAT_CORRUPT;
if (!MM7_SOAP_STATUS_OK(tstatus) && tstatus != MM7_SOAP_COMMAND_REJECTED) { if (!MM7_SOAP_STATUS_OK(tstatus) && tstatus != MM7_SOAP_COMMAND_REJECTED) {
Octstr *detail = mm7_soap_header_value(mresp, octstr_imm("Details")); Octstr *detail = mm7_soap_header_value(mresp, octstr_imm("Details"));
char *tmp = (char *)mms_soap_status_to_cstr(tstatus); char *tmp = (char *)mms_soap_status_to_cstr(tstatus);
@ -1361,23 +1390,24 @@ static int mms_sendtommsc(MmscGrp *mmc, Octstr *from, Octstr *to, Octstr *transi
MmsMsg *m, Octstr *dlr_url, Octstr *rr_url, MmsMsg *m, Octstr *dlr_url, Octstr *rr_url,
List *hdrs, List *hdrs,
Octstr **new_msgid, Octstr **new_msgid,
Octstr **err) List **errhdrs)
{ {
Octstr *id = NULL, *groupid = NULL; Octstr *id = NULL, *groupid = NULL;
int ret = 0, retry = 0; int ret = 0, retry = 0;
double throughput = 0; double throughput = 0;
mutex_lock(mmc->mutex); { /* Grab a lock on it. */ mutex_lock(mmc->mutex); { /* Grab a lock on it. */
Octstr *err = NULL;
if (mmc->type == SOAP_MMSC) if (mmc->type == SOAP_MMSC)
id = mm7soap_send(mmc, from, to, transid, linkedid, vasid, service_code, hdrs, m, err, &retry); id = mm7soap_send(mmc, from, to, transid, linkedid, vasid, service_code, hdrs, m, &err, errhdrs, &retry);
else if (mmc->type == EAIF_MMSC) else if (mmc->type == EAIF_MMSC)
id = mm7eaif_send(mmc, from, to, transid, vasid, hdrs, m, err, &retry); id = mm7eaif_send(mmc, from, to, transid, vasid, hdrs, m, &err, &retry);
else if (mmc->type == HTTP_MMSC) else if (mmc->type == HTTP_MMSC)
id = mm7http_send(mmc, from, to, m, err, &retry); id = mm7http_send(mmc, from, to, m, &err, &retry);
else if (mmc->type == CUSTOM_MMSC && mmc->custom_started) else if (mmc->type == CUSTOM_MMSC && mmc->custom_started)
id = mmc->fns->send_msg(mmc->data, id = mmc->fns->send_msg(mmc->data,
from, to, transid, linkedid, vasid, from, to, transid, linkedid, vasid,
service_code, m, hdrs, err, &retry); service_code, m, hdrs, &err, &retry);
else else
mms_error_ex("MT", 0, "MM7", mmc->id, "MMC[%s] of unknown type, can't send!", mms_error_ex("MT", 0, "MM7", mmc->id, "MMC[%s] of unknown type, can't send!",
mmc->id ? octstr_get_cstr(mmc->id) : ""); mmc->id ? octstr_get_cstr(mmc->id) : "");
@ -1385,6 +1415,12 @@ static int mms_sendtommsc(MmscGrp *mmc, Octstr *from, Octstr *to, Octstr *transi
throughput = mmc->throughput; throughput = mmc->throughput;
groupid = mmc->group_id ? octstr_duplicate(mmc->group_id) : NULL; groupid = mmc->group_id ? octstr_duplicate(mmc->group_id) : NULL;
if (err && errhdrs) {
if (*errhdrs == NULL)
*errhdrs = http_create_empty_headers();
http_header_add(*errhdrs, "X-Mbuni-Error", octstr_get_cstr(err));
}
octstr_destroy(err);
} mutex_unlock(mmc->mutex); /* release lock */ } mutex_unlock(mmc->mutex); /* release lock */
if (id) { if (id) {
@ -1423,6 +1459,7 @@ static int sendMsg(MmsEnvelope *e)
time_t tnow = time(NULL); time_t tnow = time(NULL);
MmscGrp *mmc = NULL; MmscGrp *mmc = NULL;
Octstr *new_msgid = NULL; Octstr *new_msgid = NULL;
List *errl = NULL;
if (!to || !to->process) if (!to || !to->process)
continue; continue;
@ -1476,7 +1513,7 @@ static int sendMsg(MmsEnvelope *e)
e->xqfname, e->xqfname,
e->hdrs); e->hdrs);
octstr_destroy(pfrom); octstr_destroy(pfrom);
} else } else {
res = mms_sendtommsc(mmc, e->from, to->rcpt, res = mms_sendtommsc(mmc, e->from, to->rcpt,
e->msgId, e->msgId,
otransid, otransid,
@ -1487,7 +1524,10 @@ static int sendMsg(MmsEnvelope *e)
e->url1, e->url2, e->url1, e->url2,
e->hdrs, e->hdrs,
&new_msgid, &new_msgid,
&err); &errl);
if (errl)
err = http_header_value(errl, octstr_imm("X-Mbuni-Error"));
}
if (res == MMS_SEND_OK) if (res == MMS_SEND_OK)
mmc->mt_pdus++; mmc->mt_pdus++;
else else
@ -1500,7 +1540,7 @@ static int sendMsg(MmsEnvelope *e)
if (e->msgtype == MMS_MSGTYPE_SEND_REQ || if (e->msgtype == MMS_MSGTYPE_SEND_REQ ||
e->msgtype == MMS_MSGTYPE_RETRIEVE_CONF) /* queue dlr as needed. */ e->msgtype == MMS_MSGTYPE_RETRIEVE_CONF) /* queue dlr as needed. */
queue_dlr(mmc, e->from, to->rcpt, new_msgid, octstr_imm("Forwarded"), "MM7-Out"); queue_dlr(mmc, e->from, to->rcpt, new_msgid, octstr_imm("Forwarded"), "MM7-Out", errl);
#if 0 #if 0
mmsbox_send_report(to->rcpt, "delivery-report", e->url1, mmsbox_send_report(to->rcpt, "delivery-report", e->url1,
octstr_imm("Forwarded"), new_msgid, NULL, octstr_imm("Forwarded"), new_msgid, NULL,
@ -1512,7 +1552,7 @@ static int sendMsg(MmsEnvelope *e)
queue_dlr(mmc, e->from, to->rcpt, e->msgId, queue_dlr(mmc, e->from, to->rcpt, e->msgId,
(e->expiryt != 0 && e->expiryt < tnow) ? (e->expiryt != 0 && e->expiryt < tnow) ?
octstr_imm("Expired") : octstr_imm("Rejected"), octstr_imm("Expired") : octstr_imm("Rejected"),
"MM7-Out"); "MM7-Out", errl);
#if 0 #if 0
mmsbox_send_report(to->rcpt, "delivery-report", mmsbox_send_report(to->rcpt, "delivery-report",
e->url1, e->url1,
@ -1558,6 +1598,7 @@ static int sendMsg(MmsEnvelope *e)
octstr_destroy(new_msgid); octstr_destroy(new_msgid);
octstr_destroy(err); octstr_destroy(err);
http_destroy_headers(errl);
e->lasttry = tnow; e->lasttry = tnow;
if (qfs->mms_queue_update(e) == 1) { if (qfs->mms_queue_update(e) == 1) {

View File

@ -499,7 +499,9 @@ static int mmsbox_send_report(Octstr *from, char *report_type,
Octstr *msgid, Octstr *orig_msgid, Octstr *msgid, Octstr *orig_msgid,
Octstr *mmc_id, Octstr *mmc_gid, Octstr *mmc_id, Octstr *mmc_gid,
Octstr *orig_transid, Octstr *uaprof, Octstr *orig_transid, Octstr *uaprof,
Octstr* uaprof_tstamp) Octstr* uaprof_tstamp,
Octstr *err,
Octstr *statustxt, Octstr *details)
{ {
List *rh = NULL, *rph = NULL; List *rh = NULL, *rph = NULL;
Octstr *rb = NULL, *xfrom = from ? octstr_duplicate(from) : NULL; Octstr *rb = NULL, *xfrom = from ? octstr_duplicate(from) : NULL;
@ -529,6 +531,16 @@ static int mmsbox_send_report(Octstr *from, char *report_type,
if (orig_msgid) if (orig_msgid)
http_header_add(rh, "X-Mbuni-Orig-Message-ID", octstr_get_cstr(orig_msgid)); http_header_add(rh, "X-Mbuni-Orig-Message-ID", octstr_get_cstr(orig_msgid));
if (err)
http_header_add(rh, "X-Mbuni-MM-Error", octstr_get_cstr(err));
if (statustxt)
http_header_add(rh, "X-Mbuni-MM-StatusText", octstr_get_cstr(statustxt));
if (details)
http_header_add(rh, "X-Mbuni-MM-StatusDetails", octstr_get_cstr(details));
if (uaprof) { if (uaprof) {
http_header_add(rh, "X-Mbuni-UAProf", octstr_get_cstr(uaprof)); http_header_add(rh, "X-Mbuni-UAProf", octstr_get_cstr(uaprof));
http_header_add(rh, "X-Mbuni-Timestamp", octstr_get_cstr(uaprof_tstamp)); http_header_add(rh, "X-Mbuni-Timestamp", octstr_get_cstr(uaprof_tstamp));
@ -602,11 +614,19 @@ static int mmsbox_service_dispatch(MmsEnvelope *e)
http_header_value(e->hdrs, octstr_imm("X-Mbuni-Timestamp")) : NULL; http_header_value(e->hdrs, octstr_imm("X-Mbuni-Timestamp")) : NULL;
Octstr *gid = e->hdrs ? Octstr *gid = e->hdrs ?
http_header_value(e->hdrs, octstr_imm("X-Mbuni-Mmsc-GroupID")) : NULL; http_header_value(e->hdrs, octstr_imm("X-Mbuni-Mmsc-GroupID")) : NULL;
Octstr *err = e->hdrs ?
http_header_value(e->hdrs, octstr_imm("X-Mbuni-Error")) : NULL;
Octstr *statustxt = e->hdrs ?
http_header_value(e->hdrs, octstr_imm("X-Mbuni-StatusText")) : NULL;
Octstr *details = e->hdrs ?
http_header_value(e->hdrs, octstr_imm("X-Mbuni-StatusDetails")) : NULL;
if (e->url1) if (e->url1)
res = mmsbox_send_report(e->from, report_type, res = mmsbox_send_report(e->from, report_type,
e->url1, status, msgid, orig_msgid, e->url1, status, msgid, orig_msgid,
e->fromproxy, gid, orig_transid, e->fromproxy, gid, orig_transid,
uaprof,tstamp); uaprof,tstamp, err, statustxt, details);
else { else {
mms_info(0, "MM7", e->fromproxy, "MMSBox: Skipped %s URL call for [%s]. Empty URL, from [%s]", mms_info(0, "MM7", e->fromproxy, "MMSBox: Skipped %s URL call for [%s]. Empty URL, from [%s]",
report_type, octstr_get_cstr(msgid), octstr_get_cstr(e->from)); report_type, octstr_get_cstr(msgid), octstr_get_cstr(e->from));
@ -620,7 +640,9 @@ static int mmsbox_service_dispatch(MmsEnvelope *e)
octstr_destroy(uaprof); octstr_destroy(uaprof);
octstr_destroy(tstamp); octstr_destroy(tstamp);
octstr_destroy(gid); octstr_destroy(gid);
octstr_destroy(err);
octstr_destroy(statustxt);
octstr_destroy(details);
goto done; /* No more processing. */ goto done; /* No more processing. */
} }