minor fix for mmsbox dlr relaying
This commit is contained in:
parent
c26a3d3e24
commit
00198c858a
|
@ -1,3 +1,5 @@
|
||||||
|
2008-10-16 P. A. Bagyenda <bayenda@dsmagic.com>
|
||||||
|
* Minor fix for DLR relaying (mmsbox).
|
||||||
2008-10-02 P. A. Bagyenda <bagyenda@dsmagic.com>
|
2008-10-02 P. A. Bagyenda <bagyenda@dsmagic.com>
|
||||||
* Added vasp-id param to mmsbox mmsc config (thanks to Christian Theil Have <christiantheilhave@gmail.com>)
|
* Added vasp-id param to mmsbox mmsc config (thanks to Christian Theil Have <christiantheilhave@gmail.com>)
|
||||||
2008-09-30 P. A. Bagyenda <bagyenda@dsmagic.com>
|
2008-09-30 P. A. Bagyenda <bagyenda@dsmagic.com>
|
||||||
|
|
|
@ -149,7 +149,7 @@ done:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void fixup_relayed_report(MmsMsg *m, MmscGrp *mmc, char *rtype)
|
static void fixup_relayed_report(MmsMsg *m, MmscGrp *mmc, char *rtype, Octstr *status)
|
||||||
{
|
{
|
||||||
|
|
||||||
Octstr *value = mms_get_header_value(m, octstr_imm("Message-ID"));
|
Octstr *value = mms_get_header_value(m, octstr_imm("Message-ID"));
|
||||||
|
@ -166,8 +166,13 @@ static void fixup_relayed_report(MmsMsg *m, MmscGrp *mmc, char *rtype)
|
||||||
mms_replace_header_value(m, "Message-ID", octstr_get_cstr(newmsgid));
|
mms_replace_header_value(m, "Message-ID", octstr_get_cstr(newmsgid));
|
||||||
/* Add it back as original. */
|
/* Add it back as original. */
|
||||||
mms_replace_header_value(m, "X-Mbuni-Orig-Message-ID", octstr_get_cstr(value));
|
mms_replace_header_value(m, "X-Mbuni-Orig-Message-ID", octstr_get_cstr(value));
|
||||||
|
|
||||||
mms_dlr_url_remove(value, "delivery-report", mmc->group_id);
|
if (strcmp(rtype, "read-report") == 0 ||
|
||||||
|
(octstr_case_compare(status, octstr_imm("Deferred")) != 0 &&
|
||||||
|
octstr_case_compare(status, octstr_imm("Forwarded")) != 0))
|
||||||
|
mms_dlr_url_remove(value, "delivery-report", mmc->group_id); /* only remove if not
|
||||||
|
* interim status
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
octstr_destroy(newmsgid);
|
octstr_destroy(newmsgid);
|
||||||
octstr_destroy(transid);
|
octstr_destroy(transid);
|
||||||
|
@ -215,6 +220,7 @@ static int mm7soap_receive(MmsBoxHTTPClientInfo *h)
|
||||||
qdir = get_mmsbox_queue_dir(from, to, h->m, &mmc_id); /* get routing info. */
|
qdir = get_mmsbox_queue_dir(from, to, h->m, &mmc_id); /* get routing info. */
|
||||||
|
|
||||||
switch (mm7_msgtype(mreq)) {
|
switch (mm7_msgtype(mreq)) {
|
||||||
|
Octstr *value;
|
||||||
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) {
|
||||||
|
@ -222,7 +228,8 @@ static int mm7soap_receive(MmsBoxHTTPClientInfo *h)
|
||||||
Octstr *linkedid = mm7_soap_header_value(mreq, octstr_imm("LinkedID"));
|
Octstr *linkedid = mm7_soap_header_value(mreq, octstr_imm("LinkedID"));
|
||||||
List *qh = http_create_empty_headers();
|
List *qh = http_create_empty_headers();
|
||||||
int dlr;
|
int dlr;
|
||||||
Octstr *value = mms_get_header_value(m, octstr_imm("X-Mms-Delivery-Report"));
|
|
||||||
|
value = mms_get_header_value(m, octstr_imm("X-Mms-Delivery-Report"));
|
||||||
|
|
||||||
if (value &&
|
if (value &&
|
||||||
octstr_case_compare(value, octstr_imm("Yes")) == 0)
|
octstr_case_compare(value, octstr_imm("Yes")) == 0)
|
||||||
|
@ -273,10 +280,13 @@ static int mm7soap_receive(MmsBoxHTTPClientInfo *h)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MM7_TAG_DeliveryReportReq:
|
case MM7_TAG_DeliveryReportReq:
|
||||||
|
value = mm7_soap_header_value(mreq, octstr_imm("MMStatus"));
|
||||||
if (mmc_id != NULL) { /* internal routing. */
|
if (mmc_id != NULL) { /* internal routing. */
|
||||||
m = mm7_soap_to_mmsmsg(mreq, from);
|
m = mm7_soap_to_mmsmsg(mreq, from);
|
||||||
if (m) {
|
if (m) {
|
||||||
fixup_relayed_report(m, h->m, "delivery-report"); /* fix it up if it is relayed. */
|
|
||||||
|
fixup_relayed_report(m, h->m, "delivery-report",
|
||||||
|
value); /* fix it up if it is relayed. */
|
||||||
qf = qfs->mms_queue_add(from, to, NULL,
|
qf = qfs->mms_queue_add(from, to, NULL,
|
||||||
h->m->id, mmc_id,
|
h->m->id, mmc_id,
|
||||||
0, time(NULL) + default_msgexpiry, m, NULL,
|
0, time(NULL) + default_msgexpiry, m, NULL,
|
||||||
|
@ -296,7 +306,6 @@ static int mm7soap_receive(MmsBoxHTTPClientInfo *h)
|
||||||
status = 4000;
|
status = 4000;
|
||||||
} else {
|
} else {
|
||||||
Octstr *desc = mm7_soap_header_value(mreq, octstr_imm("StatusText"));
|
Octstr *desc = mm7_soap_header_value(mreq, octstr_imm("StatusText"));
|
||||||
Octstr *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"));
|
||||||
|
|
||||||
|
@ -309,10 +318,9 @@ static int mm7soap_receive(MmsBoxHTTPClientInfo *h)
|
||||||
mms_log("DeliveryReport",
|
mms_log("DeliveryReport",
|
||||||
from, NULL, -1, msgid, value, h->m->id, "MMSBox", h->ua, NULL);
|
from, NULL, -1, msgid, value, h->m->id, "MMSBox", h->ua, NULL);
|
||||||
octstr_destroy(desc);
|
octstr_destroy(desc);
|
||||||
octstr_destroy(value);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
mresp = mm7_make_resp(mreq, status, NULL,1);
|
mresp = mm7_make_resp(mreq, status, NULL,1);
|
||||||
|
octstr_destroy(value);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MM7_TAG_ReadReplyReq:
|
case MM7_TAG_ReadReplyReq:
|
||||||
|
@ -320,7 +328,7 @@ static int mm7soap_receive(MmsBoxHTTPClientInfo *h)
|
||||||
m = mm7_soap_to_mmsmsg(mreq, from);
|
m = mm7_soap_to_mmsmsg(mreq, from);
|
||||||
|
|
||||||
if (m) {
|
if (m) {
|
||||||
fixup_relayed_report(m, h->m, "read-report"); /* fix it up if it is relayed. */
|
fixup_relayed_report(m, h->m, "read-report", octstr_imm(""));
|
||||||
qf = qfs->mms_queue_add(from, to, NULL,
|
qf = qfs->mms_queue_add(from, to, NULL,
|
||||||
h->m->id, mmc_id,
|
h->m->id, mmc_id,
|
||||||
0, time(NULL) + default_msgexpiry, m, NULL,
|
0, time(NULL) + default_msgexpiry, m, NULL,
|
||||||
|
@ -414,7 +422,7 @@ static int queue_dlr(MmscGrp *mmc, Octstr *from, Octstr *to, Octstr *msgid, Octs
|
||||||
|
|
||||||
if (mmc_id != NULL) { /* internal routing. */
|
if (mmc_id != NULL) { /* internal routing. */
|
||||||
Octstr *qf;
|
Octstr *qf;
|
||||||
fixup_relayed_report(m, mmc, "delivery-report"); /* fix it up if it is relayed. */
|
fixup_relayed_report(m, mmc, "delivery-report", status); /* fix it up if it is relayed. */
|
||||||
qf = qfs->mms_queue_add(from, lto, NULL,
|
qf = qfs->mms_queue_add(from, lto, NULL,
|
||||||
mmc->id, mmc_id,
|
mmc->id, mmc_id,
|
||||||
0, time(NULL) + default_msgexpiry, m, NULL,
|
0, time(NULL) + default_msgexpiry, m, NULL,
|
||||||
|
@ -573,7 +581,8 @@ static int mm7eaif_receive(MmsBoxHTTPClientInfo *h)
|
||||||
break;
|
break;
|
||||||
case MMS_MSGTYPE_DELIVERY_IND:
|
case MMS_MSGTYPE_DELIVERY_IND:
|
||||||
if (mmc_id != NULL) { /* internal routing. */
|
if (mmc_id != NULL) { /* internal routing. */
|
||||||
fixup_relayed_report(m, h->m, "delivery-report"); /* fix it up if it is relayed. */
|
Octstr *svalue = mms_get_header_value(m, octstr_imm("X-Mms-Status"));
|
||||||
|
fixup_relayed_report(m, h->m, "delivery-report", svalue); /* fix it up if it is relayed. */
|
||||||
qf = qfs->mms_queue_add(hfrom, to, NULL,
|
qf = qfs->mms_queue_add(hfrom, to, NULL,
|
||||||
h->m->id, mmc_id,
|
h->m->id, mmc_id,
|
||||||
0, time(NULL) + default_msgexpiry, m, NULL,
|
0, time(NULL) + default_msgexpiry, m, NULL,
|
||||||
|
@ -591,6 +600,7 @@ static int mm7eaif_receive(MmsBoxHTTPClientInfo *h)
|
||||||
hstatus = HTTP_NO_CONTENT;
|
hstatus = HTTP_NO_CONTENT;
|
||||||
} else
|
} else
|
||||||
hstatus = HTTP_INTERNAL_SERVER_ERROR;
|
hstatus = HTTP_INTERNAL_SERVER_ERROR;
|
||||||
|
octstr_destroy(svalue);
|
||||||
} else
|
} else
|
||||||
handle_report_dispatch(h->m, hfrom, "delivery-report", mh, octstr_imm("X-Mms-Status"));
|
handle_report_dispatch(h->m, hfrom, "delivery-report", mh, octstr_imm("X-Mms-Status"));
|
||||||
break;
|
break;
|
||||||
|
@ -598,7 +608,7 @@ static int mm7eaif_receive(MmsBoxHTTPClientInfo *h)
|
||||||
case MMS_MSGTYPE_READ_ORIG_IND:
|
case MMS_MSGTYPE_READ_ORIG_IND:
|
||||||
|
|
||||||
if (mmc_id != NULL) { /* internal routing. */
|
if (mmc_id != NULL) { /* internal routing. */
|
||||||
fixup_relayed_report(m, h->m, "read-report"); /* fix it up if it is relayed. */
|
fixup_relayed_report(m, h->m, "read-report", octstr_imm("")); /* fix it up if it is relayed. */
|
||||||
qf = qfs->mms_queue_add(hfrom, to, NULL,
|
qf = qfs->mms_queue_add(hfrom, to, NULL,
|
||||||
h->m->id, mmc_id,
|
h->m->id, mmc_id,
|
||||||
0, time(NULL) + default_msgexpiry, m, NULL,
|
0, time(NULL) + default_msgexpiry, m, NULL,
|
||||||
|
@ -796,8 +806,8 @@ static int mm7http_receive(MmsBoxHTTPClientInfo *h)
|
||||||
break;
|
break;
|
||||||
case MMS_MSGTYPE_DELIVERY_IND:
|
case MMS_MSGTYPE_DELIVERY_IND:
|
||||||
if (mmc_id != NULL) { /* internal routing. */
|
if (mmc_id != NULL) { /* internal routing. */
|
||||||
|
Octstr *svalue = mms_get_header_value(m, octstr_imm("X-Mms-Status"));
|
||||||
fixup_relayed_report(m, h->m, "delivery-report"); /* fix it up if it is relayed. */
|
fixup_relayed_report(m, h->m, "delivery-report", svalue); /* fix it up if it is relayed. */
|
||||||
|
|
||||||
qf = qfs->mms_queue_add(hfrom, to, NULL,
|
qf = qfs->mms_queue_add(hfrom, to, NULL,
|
||||||
h->m->id, mmc_id,
|
h->m->id, mmc_id,
|
||||||
|
@ -816,6 +826,8 @@ static int mm7http_receive(MmsBoxHTTPClientInfo *h)
|
||||||
hstatus = HTTP_OK;
|
hstatus = HTTP_OK;
|
||||||
} else
|
} else
|
||||||
hstatus = HTTP_INTERNAL_SERVER_ERROR;
|
hstatus = HTTP_INTERNAL_SERVER_ERROR;
|
||||||
|
|
||||||
|
octstr_destroy(svalue);
|
||||||
} else
|
} else
|
||||||
handle_report_dispatch(h->m, hfrom, "delivery-report", mh, octstr_imm("X-Mms-Status"));
|
handle_report_dispatch(h->m, hfrom, "delivery-report", mh, octstr_imm("X-Mms-Status"));
|
||||||
break;
|
break;
|
||||||
|
@ -823,7 +835,7 @@ static int mm7http_receive(MmsBoxHTTPClientInfo *h)
|
||||||
case MMS_MSGTYPE_READ_ORIG_IND:
|
case MMS_MSGTYPE_READ_ORIG_IND:
|
||||||
|
|
||||||
if (mmc_id != NULL) { /* internal routing. */
|
if (mmc_id != NULL) { /* internal routing. */
|
||||||
fixup_relayed_report(m, h->m, "read-report"); /* fix it up if it is relayed. */
|
fixup_relayed_report(m, h->m, "read-report", octstr_imm(""));
|
||||||
|
|
||||||
qf = qfs->mms_queue_add(hfrom, to, NULL,
|
qf = qfs->mms_queue_add(hfrom, to, NULL,
|
||||||
h->m->id, mmc_id,
|
h->m->id, mmc_id,
|
||||||
|
|
Loading…
Reference in New Issue