Minor mmsbox fixes
This commit is contained in:
parent
b579472a52
commit
b064ee14f0
|
@ -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>
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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. */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue