|
|
|
@ -195,7 +195,7 @@ static int mm7soap_receive(MmsBoxHTTPClientInfo *h)
|
|
|
|
|
|
|
|
|
|
MSoapMsg_t *mreq = NULL, *mresp = NULL;
|
|
|
|
|
int hstatus = HTTP_OK;
|
|
|
|
|
List *rh = NULL;
|
|
|
|
|
List *rh = NULL, *lh;
|
|
|
|
|
Octstr *reply_body = NULL;
|
|
|
|
|
|
|
|
|
|
List *to = NULL;
|
|
|
|
@ -396,12 +396,13 @@ static int mm7soap_receive(MmsBoxHTTPClientInfo *h)
|
|
|
|
|
s = mm7_soap_header_value(mreq, octstr_imm("MM7Version"));
|
|
|
|
|
r = mm7_soap_header_value(mreq, octstr_imm("MessageID"));
|
|
|
|
|
transid = mm7_soap_header_value(mreq, octstr_imm("TransactionID"));
|
|
|
|
|
lh = mm7_soap_headers(mreq);
|
|
|
|
|
mmsbox_event_cb(h->m->id, mm7_msgtype(mreq), 0, s, 200,
|
|
|
|
|
octstr_len(h->body), 0, from,
|
|
|
|
|
to && gwlist_len(to) > 0 ? gwlist_get(to,0) : NULL, r, transid, NULL, value);
|
|
|
|
|
to && gwlist_len(to) > 0 ? gwlist_get(to,0) : NULL, r, transid, lh, value);
|
|
|
|
|
octstr_destroy(s);
|
|
|
|
|
octstr_destroy(r);
|
|
|
|
|
|
|
|
|
|
http_destroy_headers(lh);
|
|
|
|
|
done:
|
|
|
|
|
if (mresp && mm7_soapmsg_to_httpmsg(mresp, &h->m->ver, &rh, &reply_body) == 0)
|
|
|
|
|
http_send_reply(h->client, hstatus, rh, reply_body);
|
|
|
|
@ -411,11 +412,13 @@ done:
|
|
|
|
|
if (mresp) {
|
|
|
|
|
Octstr *s = octstr_format("%d.%d.%d", h->m->ver.major, h->m->ver.minor1, h->m->ver.minor2);
|
|
|
|
|
Octstr *r = mm7_soap_header_value(mresp, octstr_imm("MessageID"));
|
|
|
|
|
List *lh = mm7_soap_headers(mresp);
|
|
|
|
|
mmsbox_event_cb(h->m->id, mm7_msgtype(mresp), 0, s, status,
|
|
|
|
|
octstr_len(reply_body), 0, to && gwlist_len(to) > 0 ? gwlist_get(to,0) : NULL,
|
|
|
|
|
from, r, transid, NULL, NULL);
|
|
|
|
|
from, r, transid, lh, NULL);
|
|
|
|
|
octstr_destroy(s);
|
|
|
|
|
octstr_destroy(r);
|
|
|
|
|
http_destroy_headers(lh);
|
|
|
|
|
} else
|
|
|
|
|
MMSC_ISSUE_ALARM(h->m, MMSBOX_ALARM_MM7_PARSING_FAILURE, 2);
|
|
|
|
|
|
|
|
|
@ -508,18 +511,18 @@ static int mm7eaif_receive(MmsBoxHTTPClientInfo *h)
|
|
|
|
|
MmsMsg *m = NULL;
|
|
|
|
|
List *mh = NULL;
|
|
|
|
|
int hstatus = HTTP_NO_CONTENT;
|
|
|
|
|
List *rh = http_create_empty_headers();
|
|
|
|
|
List *rh = http_create_empty_headers(), *lh;
|
|
|
|
|
List *rqh = http_create_empty_headers();
|
|
|
|
|
Octstr *reply_body = NULL, *value = NULL, *value2 = NULL;
|
|
|
|
|
|
|
|
|
|
List *to = gwlist_create(), *hto = NULL;
|
|
|
|
|
Octstr *subject = NULL, *otransid = NULL, *msgid = NULL, *s;
|
|
|
|
|
Octstr *subject = NULL, *otransid = NULL, *msgid = NULL, *s = NULL;
|
|
|
|
|
Octstr *hfrom = NULL, *rr_uri = NULL;
|
|
|
|
|
time_t expiryt = -1, deliveryt = -1;
|
|
|
|
|
Octstr *qf = NULL, *xver = NULL, *mmc_id = NULL, *qdir = NULL;
|
|
|
|
|
int msize = h->body ? octstr_len(h->body) : 0;
|
|
|
|
|
int dlr;
|
|
|
|
|
int mtype = -1, mm7type = -1;
|
|
|
|
|
int i, mtype = -1, mm7type = -1;
|
|
|
|
|
|
|
|
|
|
debug("mmsbox.mm7eaif.sendinterface", 0,
|
|
|
|
|
" --> Enterred eaif send interface, blen=[%d] <--- ",
|
|
|
|
@ -702,24 +705,35 @@ static int mm7eaif_receive(MmsBoxHTTPClientInfo *h)
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
lh = http_create_empty_headers(); /* Collect extension headers */
|
|
|
|
|
for (i = 0; i<gwlist_len(h->headers); i++) {
|
|
|
|
|
Octstr *n = NULL, *v = NULL;
|
|
|
|
|
|
|
|
|
|
http_header_get(h->headers, i, &n, &v);
|
|
|
|
|
if (n && octstr_case_search(n, octstr_imm("X-NOKIA-"), 0) == 0)
|
|
|
|
|
http_header_add(lh, octstr_get_cstr(n), octstr_get_cstr(v));
|
|
|
|
|
|
|
|
|
|
s = http_header_value(h->headers, octstr_imm("X-NOKIA-MMSC-Version"));
|
|
|
|
|
if (octstr_case_compare(n, octstr_imm("X-NOKIA-MMSC-Version")) == 0)
|
|
|
|
|
s = octstr_duplicate(v); /* Get mmsc version */
|
|
|
|
|
octstr_destroy(n);
|
|
|
|
|
octstr_destroy(v);
|
|
|
|
|
}
|
|
|
|
|
mmsbox_event_cb(h->m->id, mm7type, 0, s, hstatus,
|
|
|
|
|
msize, 0, hfrom,
|
|
|
|
|
to && gwlist_len(to) > 0 ? gwlist_get(to,0) : NULL,
|
|
|
|
|
msgid, otransid, NULL, value);
|
|
|
|
|
msgid, otransid, lh, value);
|
|
|
|
|
octstr_destroy(s);
|
|
|
|
|
http_destroy_headers(lh);
|
|
|
|
|
done:
|
|
|
|
|
|
|
|
|
|
xver = octstr_format(EAIF_VERSION, h->m->ver.major, h->m->ver.minor1);
|
|
|
|
|
http_header_add(rh, "X-NOKIA-MMSC-Version", octstr_get_cstr(xver));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mmsbox_event_cb(h->m->id, mm7type >= 0 ? mm7type + 1 : MM7_TAG_VASPErrorRsp, 0,
|
|
|
|
|
xver, hstatus,
|
|
|
|
|
0, 0, to && gwlist_len(to) > 0 ? gwlist_get(to,0) : NULL,
|
|
|
|
|
hfrom,
|
|
|
|
|
msgid, otransid, NULL, reply_body);
|
|
|
|
|
msgid, otransid, rh, reply_body);
|
|
|
|
|
|
|
|
|
|
http_send_reply(h->client, hstatus, rh, reply_body ? reply_body : octstr_imm(""));
|
|
|
|
|
|
|
|
|
@ -1186,11 +1200,14 @@ static Octstr *mm7soap_send(MmscGrp *mmc, Octstr *from, Octstr *to,
|
|
|
|
|
/* Invoke call back */
|
|
|
|
|
s = mm7_soap_header_value(mreq, octstr_imm("MM7Version"));
|
|
|
|
|
r = mm7_soap_header_value(mreq, octstr_imm("MessageID"));
|
|
|
|
|
|
|
|
|
|
mmsbox_event_cb(mmc->id, mm7_msgtype(mreq), 0, s, hstatus,
|
|
|
|
|
mms_msgsize(m), e->attempts, e->from,
|
|
|
|
|
to,r, transid, hdrs, NULL);
|
|
|
|
|
octstr_destroy(s);
|
|
|
|
|
octstr_destroy(r);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ((mresp = mm7_parse_soap(ph, rbody)) == NULL) {
|
|
|
|
|
*error = octstr_format("Failed to parse MMSC[url=%S, id=%S] response!",
|
|
|
|
|
mmc->mmsc_url, mmc->id);
|
|
|
|
@ -1254,11 +1271,13 @@ static Octstr *mm7soap_send(MmscGrp *mmc, Octstr *from, Octstr *to,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
s = mm7_soap_header_value(mresp, octstr_imm("MM7Version"));
|
|
|
|
|
|
|
|
|
|
mmsbox_event_cb(mmc->id, mm7_msgtype(mresp), 0, s, tstatus,
|
|
|
|
|
0, e->attempts, e->from,
|
|
|
|
|
to, ret, transid, hdrs, status_details);
|
|
|
|
|
to, ret, transid,hdrs, status_details);
|
|
|
|
|
octstr_destroy(s);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (ret)
|
|
|
|
|
mms_log2("Sent", from, to, -1, ret, NULL, mmc->id, "MMSBox", NULL, NULL);
|
|
|
|
|
done1:
|
|
|
|
@ -1334,7 +1353,7 @@ static Octstr *mm7eaif_send(MmscGrp *mmc, Octstr *from, Octstr *to,
|
|
|
|
|
|
|
|
|
|
mmsbox_event_cb(mmc->id, mm7_msgtype_to_soaptype(mtype,1), 0, xver, 0,
|
|
|
|
|
octstr_len(body), e->attempts, e->from,
|
|
|
|
|
to, NULL, transid, hdrs, NULL);
|
|
|
|
|
to, NULL, transid,hdrs, NULL);
|
|
|
|
|
|
|
|
|
|
hstatus = mmsbox_url_fetch_content(HTTP_METHOD_POST, mmc->mmsc_url, rh, body, &ph, &rbody);
|
|
|
|
|
|
|
|
|
@ -1820,7 +1839,7 @@ static int send_mm4_res(int mtype, Octstr *to, Octstr *sender, Octstr *transid,
|
|
|
|
|
static Octstr *handle_msg(MIMEEntity *mm, Octstr *from, List *to, MmscGrp *mmc)
|
|
|
|
|
{
|
|
|
|
|
char *err = NULL;
|
|
|
|
|
List *headers, *h2;
|
|
|
|
|
List *headers = NULL, *h2;
|
|
|
|
|
Octstr *mm4_type;
|
|
|
|
|
Octstr *transid = NULL, *orig_sys = NULL, *ack = NULL, *res = NULL, *me = NULL, *rstatus = NULL;
|
|
|
|
|
int i, mtype = -1, mm1_type = -1, mm7type;
|
|
|
|
@ -1938,7 +1957,6 @@ static Octstr *handle_msg(MIMEEntity *mm, Octstr *from, List *to, MmscGrp *mmc)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mime_replace_headers(mm, headers);
|
|
|
|
|
http_destroy_headers(headers);
|
|
|
|
|
|
|
|
|
|
/* Now convert from mime to MMS message, if we should */
|
|
|
|
|
if (mm1_type >= 0) {
|
|
|
|
@ -2091,11 +2109,11 @@ static Octstr *handle_msg(MIMEEntity *mm, Octstr *from, List *to, MmscGrp *mmc)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (mm7type >= 0) /* Issue event call back */
|
|
|
|
|
if (mm7type >= 0) /* Issue event call back */
|
|
|
|
|
mmsbox_event_cb(mmc->id, mm7type, 1, octstr_imm("1.0"), 200,
|
|
|
|
|
mms_msgsize(msg), 0, from,
|
|
|
|
|
to && gwlist_len(to) > 0 ? gwlist_get(to,0) : NULL,
|
|
|
|
|
msgid, transid, NULL, value);
|
|
|
|
|
msgid, transid, headers, value);
|
|
|
|
|
|
|
|
|
|
/* respond to the sender as necessary. */
|
|
|
|
|
if (mm4_type &&
|
|
|
|
@ -2124,7 +2142,7 @@ static Octstr *handle_msg(MIMEEntity *mm, Octstr *from, List *to, MmscGrp *mmc)
|
|
|
|
|
octstr_destroy(mmc_id);
|
|
|
|
|
octstr_destroy(value);
|
|
|
|
|
mms_destroy(msg);
|
|
|
|
|
|
|
|
|
|
http_destroy_headers(headers);
|
|
|
|
|
done:
|
|
|
|
|
|
|
|
|
|
return res;
|
|
|
|
@ -2406,6 +2424,5 @@ void mm4_receive_func(int *sock)
|
|
|
|
|
|
|
|
|
|
gwthread_join_every((void *)smtp_thread);
|
|
|
|
|
|
|
|
|
|
gwlist_destroy(slist, NULL);
|
|
|
|
|
|
|
|
|
|
gwlist_destroy(slist, NULL);
|
|
|
|
|
}
|
|
|
|
|