misc. fixes: DLR, UAProf on mmsbox side
This commit is contained in:
parent
67cdf0f387
commit
96811a10b7
|
@ -1,3 +1,6 @@
|
|||
2007-08-06 P. A. Bagyenda <bagyenda@dsmagic.com>
|
||||
* Fix for DLR reporting in mmsbox (thanks to Skycore team)
|
||||
* UACapabilities support for MM7/SOAP v6.x (thanks again to Skycore Team)
|
||||
2007-08-03 P. A. Bagyenda <bagyenda@dsmagic.com>
|
||||
* added mms-direction CGI param to send-mms interface (see doc for additional info)
|
||||
2007-07-27 P. A. Bagyenda <bagyenda@dsmagic.com>
|
||||
|
|
|
@ -1828,6 +1828,26 @@ Boolean
|
|||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td valign=top >
|
||||
<tt>send-uaprof</tt>
|
||||
</td>
|
||||
<td valign=top >
|
||||
String
|
||||
</td>
|
||||
<td valign=top >
|
||||
Optional. This parameter determines whether the User Agent string is
|
||||
sent to the VASP (for MM7/SOAP only, as part of
|
||||
<tt>UACapabilities</tt> entity). Set to <tt>ua</tt> to send the
|
||||
full client User Agent string (i.e. the value of the HTTP request
|
||||
header <tt>User-Agent</tt>). Set to <tt>url</tt> to send the client
|
||||
Profile URL (i.e. the value of the <tt>X-WAP-Profile</tt> HTTP
|
||||
request header). Leave empty not to send any info. Note that this
|
||||
field is only sent in MO transactions (e.g. message delivery,
|
||||
delivery reports).
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
|
||||
|
||||
|
@ -2600,6 +2620,16 @@ faked-sender = 100<br>
|
|||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td valign=top >
|
||||
<tt>distribution</tt>
|
||||
</td>
|
||||
<td valign=top>
|
||||
Optional. Should be <tt>true</tt> or <tt>false</tt>. This is set as the
|
||||
MM7/SOAP <tt>DistributionIndicator</tt> parameter.
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
|
||||
</p>
|
||||
|
@ -3176,6 +3206,44 @@ A detailed list of configuration parameters for MMS Services is given below.
|
|||
MMS message priority
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td valign=top >
|
||||
<tt>X-Mbuni-TransactionID</tt>
|
||||
</td>
|
||||
<td valign=top >
|
||||
This special header is used for transaction tracking. It is included
|
||||
in the MMS service request and uniquely identifies the service
|
||||
request transaction. The transaction ID will be included in the delivery or
|
||||
read report when the DLR URL is called, so that the service side can
|
||||
match the DLR to the service request transaction.
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td valign=top >
|
||||
<tt>X-Mbuni-UAProf</tt>
|
||||
</td>
|
||||
<td valign=top >
|
||||
This special header is included in the service request (and DLR URL
|
||||
request) and contains the client User-Agent Profile string as
|
||||
received from the MMC side. (Requires MM7/SOAP v6.x support on the
|
||||
MMC side.)
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td valign=top >
|
||||
<tt>X-Mbuni-Timestamp</tt>
|
||||
</td>
|
||||
<td valign=top >
|
||||
This special header is included in the service request (and DLR URL
|
||||
request) and contains the client submission time stamp (HTTP
|
||||
date format). This header is only included if the User-Agent Profile
|
||||
string is included. (Requires MM7/SOAP v6.x support on the
|
||||
MMC side.)
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
</p>
|
||||
|
@ -3590,7 +3658,9 @@ maximum, and the queue entry ID is printed to standard output.
|
|||
queue. If the
|
||||
sender requested a read or delivery report (by specifying the
|
||||
requisite URL), the relevant URL is
|
||||
stored to the DLR URL store for future use. </li>
|
||||
stored to the DLR URL store for future use. On success, the
|
||||
interface returns the message submission transaction ID (which is
|
||||
also reported with an DLR). </li>
|
||||
<li><b>MMSC handler module:</b> Receives messages coming from MMSCs,
|
||||
and saves them to the incoming queue. Also watches the outgoing
|
||||
message queue for new messages, which it dispatches to the relevant
|
||||
|
|
|
@ -107,7 +107,8 @@ MULTI_GROUP(mms-vasp,
|
|||
OCTSTR(vasp-password)
|
||||
OCTSTR(vasp-url)
|
||||
OCTSTR(mms-to-email-handler)
|
||||
OCTSTR(mms-to-local-copy-handler)
|
||||
OCTSTR(mms-to-local-copy-handler)
|
||||
OCTSTR(send-uaprof)
|
||||
)
|
||||
|
||||
MULTI_GROUP(send-mms-user,
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
*
|
||||
* MM7/SOAP message encoder/decoder and helper functions
|
||||
*
|
||||
* Copyright (C) 2003 - 2005, Digital Solutions Ltd. - http://www.dsmagic.com
|
||||
* Copyright (C) 2003 - 2007, Digital Solutions Ltd. - http://www.dsmagic.com
|
||||
*
|
||||
* Paul Bagyenda <bagyenda@dsmagic.com>
|
||||
*
|
||||
|
@ -26,7 +26,7 @@ struct MSoapMsg_t {
|
|||
|
||||
/* We expect ISO formatted time, or interval. */
|
||||
|
||||
static Octstr *parse_time(char *s)
|
||||
static time_t parse_time(char *s)
|
||||
{
|
||||
time_t t = time(NULL);
|
||||
Octstr *p = octstr_create(s);
|
||||
|
@ -83,7 +83,7 @@ static Octstr *parse_time(char *s)
|
|||
|
||||
done:
|
||||
octstr_destroy(p);
|
||||
return date_format_http(t);
|
||||
return t;
|
||||
}
|
||||
|
||||
static int parse_header(xmlNodePtr node, List *headers, int *sigparent)
|
||||
|
@ -137,7 +137,6 @@ static int parse_header(xmlNodePtr node, List *headers, int *sigparent)
|
|||
|
||||
case MM7_TAG_Recipient:
|
||||
*sigparent = MM7_TAG_To; /* make it a To field. */
|
||||
|
||||
break;
|
||||
case MM7_TAG_To:
|
||||
case MM7_TAG_Cc:
|
||||
|
@ -159,11 +158,15 @@ static int parse_header(xmlNodePtr node, List *headers, int *sigparent)
|
|||
}
|
||||
break;
|
||||
case MM7_TAG_Content:
|
||||
if ((s = xmlGetProp(node, (unsigned char *)"href")) != NULL) {
|
||||
value = octstr_create((char *)s);
|
||||
if ((s = xmlGetProp(node, (unsigned char *)"href")) != NULL) {
|
||||
value = octstr_create((char *)s);
|
||||
xmlFree(s);
|
||||
}
|
||||
|
||||
if ((s = xmlGetProp(node, (unsigned char *)"allowAdaptations")) != NULL) {
|
||||
http_header_add(headers, "allowAdaptations", (char *)s);
|
||||
xmlFree(s);
|
||||
}
|
||||
/* we keep 'cid:' bit. ignore the bit about adaptation. */
|
||||
break;
|
||||
case MM7_TAG_ShortCode:
|
||||
case MM7_TAG_Number: /* we will not normalise number here, that's for upper level. */
|
||||
|
@ -188,7 +191,7 @@ static int parse_header(xmlNodePtr node, List *headers, int *sigparent)
|
|||
case MM7_TAG_ExpiryDate:
|
||||
case MM7_TAG_TimeStamp:
|
||||
case MM7_TAG_Date:
|
||||
value = parse_time(nvalue);
|
||||
value = date_format_http(parse_time(nvalue));
|
||||
break;
|
||||
|
||||
case MM7_TAG_ReplyCharging:
|
||||
|
@ -199,12 +202,25 @@ static int parse_header(xmlNodePtr node, List *headers, int *sigparent)
|
|||
xmlFree(s);
|
||||
}
|
||||
if ((s = xmlGetProp(node, (unsigned char *)"replyDeadline")) != NULL) {
|
||||
Octstr *t = parse_time((char *)s);
|
||||
Octstr *t = date_format_http(parse_time((char *)s));
|
||||
http_header_add(headers, "replyDeadline", octstr_get_cstr(t));
|
||||
xmlFree(s);
|
||||
octstr_destroy(t);
|
||||
}
|
||||
break;
|
||||
case MM7_TAG_UACapabilities:
|
||||
if ((s = xmlGetProp(node, (unsigned char *)"UAProf")) != NULL) {
|
||||
value = octstr_create((void *)s);
|
||||
xmlFree(s);
|
||||
} else
|
||||
value = octstr_create("none");
|
||||
|
||||
if ((s = xmlGetProp(node, (unsigned char *)"TimeStamp")) != NULL) {
|
||||
time_t lt = parse_time((char *)s);
|
||||
octstr_format_append(value, ",%ld", lt);
|
||||
xmlFree(s);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -487,9 +503,9 @@ static Octstr *headers_to_soapxml(List *hdrs, MM7Version_t *ver)
|
|||
}
|
||||
|
||||
octstr_append_cstr(s, "</mm7:SenderIdentification>\n");
|
||||
if (p) octstr_destroy(p);
|
||||
if (q) octstr_destroy(q);
|
||||
if (r) octstr_destroy(r);
|
||||
octstr_destroy(p);
|
||||
octstr_destroy(q);
|
||||
octstr_destroy(r);
|
||||
}
|
||||
|
||||
p = octstr_create("");
|
||||
|
@ -513,7 +529,7 @@ static Octstr *headers_to_soapxml(List *hdrs, MM7Version_t *ver)
|
|||
|
||||
for (i = 0, n = gwlist_len(hdrs); i < n; i++) {
|
||||
Octstr *h = NULL, *v = NULL;
|
||||
char *zz;
|
||||
char *zz, *s1, *s2;
|
||||
int tag;
|
||||
int skip = 0;
|
||||
|
||||
|
@ -610,7 +626,19 @@ static Octstr *headers_to_soapxml(List *hdrs, MM7Version_t *ver)
|
|||
octstr_append_cstr(s, "</mm7:Status>\n");
|
||||
skip = 1;
|
||||
break;
|
||||
|
||||
case MM7_TAG_UACapabilities:
|
||||
s1 = octstr_get_cstr(v);
|
||||
if ((s2 = strrchr(s1, ',')) != NULL) {
|
||||
t = strtoul(s2 + 1, NULL, 10);
|
||||
octstr_delete(v, s2-s1, octstr_len(v));
|
||||
} else
|
||||
t = time(NULL);
|
||||
p = date_create_iso(t);
|
||||
octstr_format_append(s, "<mm7:%S TimeStamp=\"%S\" UAProf=\"%S\"/>\n",
|
||||
h, p, v);
|
||||
octstr_destroy(p);
|
||||
skip = 1;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -618,14 +646,12 @@ static Octstr *headers_to_soapxml(List *hdrs, MM7Version_t *ver)
|
|||
if (!skip && h && v)
|
||||
octstr_format_append(s, "<mm7:%S>%S</mm7:%S>\n", h, v, h);
|
||||
|
||||
if (h) octstr_destroy(h);
|
||||
if (v) octstr_destroy(v);
|
||||
octstr_destroy(h);
|
||||
octstr_destroy(v);
|
||||
}
|
||||
octstr_format_append(s, "</mm7:%S>\n", mtype);
|
||||
octstr_destroy(mtype);
|
||||
|
||||
if (fault) {
|
||||
|
||||
octstr_destroy(mtype);
|
||||
if (fault) {
|
||||
octstr_append_cstr(s, "</detail>\n");
|
||||
octstr_append_cstr(s, "</" SOAP_ENV ":Fault>\n");
|
||||
octstr_destroy(fault);
|
||||
|
@ -757,7 +783,9 @@ int mm7_get_envelope(MSoapMsg_t *m,
|
|||
List **to, Octstr **subject,
|
||||
Octstr **vasid,
|
||||
time_t *expiry_t,
|
||||
time_t *delivery_t)
|
||||
time_t *delivery_t,
|
||||
Octstr **uaprof,
|
||||
time_t *uaprof_tstamp)
|
||||
{
|
||||
Octstr *s;
|
||||
|
||||
|
@ -801,6 +829,20 @@ int mm7_get_envelope(MSoapMsg_t *m,
|
|||
octstr_destroy(s);
|
||||
}
|
||||
}
|
||||
if (uaprof) {
|
||||
Octstr *s = http_header_value(m->envelope, octstr_imm("UACapabilities"));
|
||||
if (uaprof_tstamp) *uaprof_tstamp = -1;
|
||||
if (s) {
|
||||
char *s1 = octstr_get_cstr(s);
|
||||
char *s2 = strrchr(s1, ',');
|
||||
|
||||
if (s2) {
|
||||
*uaprof_tstamp = strtoul(s2+1, NULL, 10);
|
||||
octstr_delete(s, s2-s1, octstr_len(s));
|
||||
}
|
||||
*uaprof = s;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -850,7 +892,7 @@ MmsMsg *mm7_soap_to_mmsmsg(MSoapMsg_t *m, Octstr *from)
|
|||
if ((s = http_header_value(m->envelope, octstr_imm("ReadReply"))) != NULL) {
|
||||
long x = mms_string_to_boolean_flag(s);
|
||||
if (x >= 0)
|
||||
mms_replace_header_value(msg, "X-Mms-Read-Report",
|
||||
mms_replace_header_value(msg, "X-Mms-Read-Reply",
|
||||
(char *)mms_reports_to_cstr(x));
|
||||
octstr_destroy(s);
|
||||
}
|
||||
|
@ -963,12 +1005,16 @@ static MSoapMsg_t *mm7_soap_create(int msgtype, Octstr *otransid)
|
|||
MSoapMsg_t *mm7_mmsmsg_to_soap(MmsMsg *msg, Octstr *from, List *xto,
|
||||
Octstr *transid, Octstr *srvcode,
|
||||
Octstr *linkedid, int isclientside,
|
||||
char *vaspid, char *vasid)
|
||||
char *vaspid, char *vasid,
|
||||
Octstr *uaprof,
|
||||
time_t uaprof_tstamp,
|
||||
Octstr *distrib_indicator)
|
||||
{
|
||||
int i, n, mtype = mms_messagetype(msg);
|
||||
MSoapMsg_t *m = NULL;
|
||||
List *headers;
|
||||
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:
|
||||
|
@ -1024,7 +1070,7 @@ MSoapMsg_t *mm7_mmsmsg_to_soap(MmsMsg *msg, Octstr *from, List *xto,
|
|||
octstr_destroy(s);
|
||||
}
|
||||
|
||||
if ((s = mms_get_header_value(msg, octstr_imm("X-Mms-Read-Report"))) != NULL) {
|
||||
if ((s = mms_get_header_value(msg, octstr_imm("X-Mms-Read-Reply"))) != NULL) {
|
||||
char *val = (octstr_case_compare(s, octstr_imm("Yes")) == 0) ?
|
||||
"true" : "false";
|
||||
http_header_add(m->envelope, "ReadReply", val);
|
||||
|
@ -1037,7 +1083,13 @@ MSoapMsg_t *mm7_mmsmsg_to_soap(MmsMsg *msg, Octstr *from, List *xto,
|
|||
http_header_add(m->envelope, "allowAdaptations", val);
|
||||
octstr_destroy(s);
|
||||
}
|
||||
|
||||
|
||||
if (distrib_indicator)
|
||||
http_header_add(m->envelope, "DistributionIndicator",
|
||||
octstr_str_case_compare(distrib_indicator, "true") == 0 ? "true" : "false");
|
||||
} else { /* not clientside. */
|
||||
if (xuaprof_val) /* only on DeliverReq. */
|
||||
http_header_add(m->envelope, "UACapabilities", octstr_get_cstr(xuaprof_val));
|
||||
}
|
||||
|
||||
if ((s = mms_get_header_value(msg, octstr_imm("X-Mms-Priority"))) != NULL) {
|
||||
|
@ -1100,14 +1152,19 @@ MSoapMsg_t *mm7_mmsmsg_to_soap(MmsMsg *msg, Octstr *from, List *xto,
|
|||
http_header_add(m->envelope, "MMStatus", octstr_get_cstr(s));
|
||||
octstr_destroy(s);
|
||||
}
|
||||
|
||||
if (mtype == MMS_MSGTYPE_DELIVERY_IND &&
|
||||
xuaprof_val) /* and for DeliveryReport. */
|
||||
http_header_add(m->envelope, "UACapabilities", octstr_get_cstr(xuaprof_val));
|
||||
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (xfrom)
|
||||
octstr_destroy(xfrom);
|
||||
|
||||
octstr_destroy(xfrom);
|
||||
octstr_destroy(xuaprof_val);
|
||||
|
||||
return m;
|
||||
}
|
||||
|
||||
|
|
|
@ -57,7 +57,9 @@ extern int mm7_get_envelope(MSoapMsg_t *m, Octstr **sender,
|
|||
List **to, Octstr **subject,
|
||||
Octstr **vasid,
|
||||
time_t *expiry_t,
|
||||
time_t *delivery_t);
|
||||
time_t *delivery_t,
|
||||
Octstr **uaprof,
|
||||
time_t *uaprof_tstamp);
|
||||
|
||||
/* Delete the thingie... */
|
||||
extern void mm7_soap_destroy(MSoapMsg_t *m);
|
||||
|
@ -67,7 +69,10 @@ MSoapMsg_t *mm7_mmsmsg_to_soap(MmsMsg *msg, Octstr *from, List *xto,
|
|||
Octstr *transid, Octstr *srvcode,
|
||||
Octstr *linkedid,
|
||||
int isclientside,
|
||||
char *vaspid, char *vasid);
|
||||
char *vaspid, char *vasid,
|
||||
Octstr *uaprof,
|
||||
time_t uaprof_tstamp,
|
||||
Octstr *distrib_indicator);
|
||||
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);
|
||||
|
|
|
@ -779,6 +779,7 @@ static int free_envelope(MmsEnvelope *e, int removefromqueue)
|
|||
{
|
||||
int i, n;
|
||||
|
||||
if (e == NULL) return 0;
|
||||
octstr_destroy(e->msgId);
|
||||
|
||||
for (i = 0, n = gwlist_len(e->to); i < n; i++) {
|
||||
|
@ -819,7 +820,7 @@ static int free_envelope(MmsEnvelope *e, int removefromqueue)
|
|||
|
||||
int mms_queue_free_env(MmsEnvelope *e)
|
||||
{
|
||||
|
||||
|
||||
return free_envelope(e, 0);
|
||||
}
|
||||
int mms_queue_update(MmsEnvelope *e)
|
||||
|
|
|
@ -88,7 +88,8 @@ int mms_init_queuedir(Octstr *qdir);
|
|||
extern Octstr *mms_queue_add(Octstr *from, List *to,
|
||||
Octstr *subject,
|
||||
Octstr *fromproxy, Octstr *viaproxy,
|
||||
time_t senddate, time_t expirydate, MmsMsg *m, Octstr *token,
|
||||
time_t senddate, time_t expirydate, MmsMsg *m,
|
||||
Octstr *token,
|
||||
Octstr *vaspid, Octstr *vasid,
|
||||
Octstr *url1, Octstr *url2,
|
||||
List *hdrs,
|
||||
|
|
|
@ -308,6 +308,8 @@ VNSTRING(MM7_5, "replyChargingSize", MM7_TAG_replyChargingSize)
|
|||
VNSTRING(MM7_5, "replyDeadline", MM7_TAG_replyDeadline)
|
||||
VNSTRING(MM7_5, "DeliveryReport", MM7_TAG_DeliveryReport)
|
||||
VNSTRING(MM7_5, "allowAdaptations", MM7_TAG_allowAdaptations)
|
||||
VNSTRING(MM7_5, "DistributionIndicator",MM7_TAG_distributionIndicator)
|
||||
VNSTRING(MM7_5, "UACapabilities",MM7_TAG_UACapabilities)
|
||||
)
|
||||
|
||||
NUMBERED(soap_status,
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
*
|
||||
* User-Agent profiles handling, content adaptation.
|
||||
*
|
||||
* Copyright (C) 2003 - 2005, Digital Solutions Ltd. - http://www.dsmagic.com
|
||||
* Copyright (C) 2003 - 2007, Digital Solutions Ltd. - http://www.dsmagic.com
|
||||
*
|
||||
* Paul Bagyenda <bagyenda@dsmagic.com>
|
||||
*
|
||||
|
|
|
@ -68,26 +68,31 @@ static int auth_check(Octstr *user, Octstr *pass, List *headers)
|
|||
else
|
||||
res = 0;
|
||||
done:
|
||||
if (v)
|
||||
octstr_destroy(v);
|
||||
if (p)
|
||||
octstr_destroy(p);
|
||||
if (q)
|
||||
octstr_destroy(q);
|
||||
octstr_destroy(v);
|
||||
octstr_destroy(p);
|
||||
octstr_destroy(q);
|
||||
return res;
|
||||
}
|
||||
|
||||
static int send_report(Octstr *from, char *report_type,
|
||||
Octstr *dlr_url, Octstr *status,
|
||||
Octstr *msgid, Octstr *mmc_id, Octstr *mmc_gid)
|
||||
Octstr *msgid, Octstr *mmc_id, Octstr *mmc_gid,
|
||||
Octstr *orig_transid, Octstr *uaprof,
|
||||
time_t uaprof_tstamp)
|
||||
{
|
||||
|
||||
Octstr *url = dlr_url ? octstr_duplicate(dlr_url) : mms_dlr_url_get(msgid, report_type, mmc_gid);
|
||||
Octstr *url = NULL;
|
||||
List *rh, *rph = NULL;
|
||||
Octstr *rb = NULL;
|
||||
Octstr *xtransid = NULL;
|
||||
|
||||
if (!url) {
|
||||
info(0, "Sending delivery-report Failed: `url' is NULL, `group_id'=[%s], `msgid'=[%s]",
|
||||
if (dlr_url)
|
||||
url = octstr_duplicate(dlr_url);
|
||||
else
|
||||
mms_dlr_url_get(msgid, report_type, mmc_gid, &url, &xtransid);
|
||||
|
||||
if (!url || octstr_len(url) == 0) {
|
||||
info(0, "Sending delivery-report skipped: `url' is empty, `group_id'=[%s], `msgid'=[%s]",
|
||||
octstr_get_cstr(mmc_gid), octstr_get_cstr(msgid));
|
||||
return 0;
|
||||
}
|
||||
|
@ -96,16 +101,26 @@ static int send_report(Octstr *from, char *report_type,
|
|||
|
||||
http_header_add(rh, "X-Mbuni-Report-Type", report_type);
|
||||
http_header_add(rh, "X-Mbuni-MM-Status", octstr_get_cstr(status));
|
||||
http_header_add(rh, "X-Mbuni-Message-ID", octstr_get_cstr(msgid));
|
||||
http_header_add(rh, "X-Mbuni-MMSC-ID", octstr_get_cstr(mmc_id));
|
||||
http_header_add(rh, "X-Mbuni-MMSC-GID", octstr_get_cstr(mmc_gid));
|
||||
http_header_add(rh, "X-Mbuni-From", octstr_get_cstr(from));
|
||||
|
||||
|
||||
if (xtransid || orig_transid)
|
||||
http_header_add(rh, "X-Mbuni-TransactionID",
|
||||
octstr_get_cstr(xtransid ? xtransid : orig_transid));
|
||||
if (msgid)
|
||||
http_header_add(rh, "X-Mbuni-Message-ID", octstr_get_cstr(msgid));
|
||||
if (uaprof) {
|
||||
Octstr *sx = date_format_http(uaprof_tstamp);
|
||||
http_header_add(rh, "X-Mbuni-UAProf", octstr_get_cstr(uaprof));
|
||||
http_header_add(rh, "X-Mbuni-Timestamp", octstr_get_cstr(sx));
|
||||
octstr_destroy(sx);
|
||||
}
|
||||
mms_url_fetch_content(HTTP_METHOD_GET, url, rh, octstr_imm(""), &rph, &rb);
|
||||
|
||||
|
||||
octstr_destroy(rb);
|
||||
octstr_destroy(url);
|
||||
octstr_destroy(xtransid);
|
||||
|
||||
http_destroy_headers(rph);
|
||||
http_destroy_headers(rh);
|
||||
|
@ -130,8 +145,8 @@ static void mm7soap_receive(MmsHTTPClientInfo *h)
|
|||
Octstr *reply_body = NULL, *value, *desc;
|
||||
|
||||
List *to = NULL;
|
||||
Octstr *from = NULL, *subject = NULL, *vasid = NULL, *msgid = NULL;
|
||||
time_t expiryt = -1, delivert = -1;
|
||||
Octstr *from = NULL, *subject = NULL, *vasid = NULL, *msgid = NULL, *uaprof = NULL;
|
||||
time_t expiryt = -1, delivert = -1, uaprof_tstamp = -1;
|
||||
MmsMsg *m = NULL;
|
||||
int status = 1000;
|
||||
unsigned char *msgtype = (unsigned char *)"";
|
||||
|
@ -152,7 +167,7 @@ static void mm7soap_receive(MmsHTTPClientInfo *h)
|
|||
goto done;
|
||||
}
|
||||
|
||||
mm7_get_envelope(mreq, &from, &to, &subject, &vasid, &expiryt, &delivert);
|
||||
mm7_get_envelope(mreq, &from, &to, &subject, &vasid, &expiryt, &delivert, &uaprof, &uaprof_tstamp);
|
||||
|
||||
if (!from)
|
||||
from = octstr_imm("anon@anon");
|
||||
|
@ -164,27 +179,34 @@ static void mm7soap_receive(MmsHTTPClientInfo *h)
|
|||
Octstr *value = NULL;
|
||||
/* Store linked id so we use it in response. */
|
||||
Octstr *linkedid = mm7_soap_header_value(mreq, octstr_imm("LinkedID"));
|
||||
List *qh = http_create_empty_headers();
|
||||
int dlr;
|
||||
|
||||
value = mms_get_header_value(m, octstr_imm("X-Mms-Delivery-Report"));
|
||||
if (value &&
|
||||
octstr_case_compare(value, octstr_imm("Yes")) == 0)
|
||||
dlr = 1;
|
||||
else
|
||||
dlr = 0;
|
||||
|
||||
|
||||
value = mms_get_header_value(m, octstr_imm("X-Mms-Delivery-Report"));
|
||||
if (value &&
|
||||
octstr_case_compare(value, octstr_imm("Yes")) == 0)
|
||||
dlr = 1;
|
||||
else
|
||||
dlr = 0;
|
||||
|
||||
if (delivert < 0)
|
||||
delivert = time(NULL);
|
||||
|
||||
if (expiryt < 0)
|
||||
expiryt = time(NULL) + DEFAULT_EXPIRE;
|
||||
|
||||
if (uaprof) {
|
||||
Octstr *sx = date_format_http(uaprof_tstamp);
|
||||
http_header_add(qh, "X-Mbuni-UAProf", octstr_get_cstr(uaprof));
|
||||
http_header_add(qh, "X-Mbuni-Timestamp", octstr_get_cstr(sx));
|
||||
octstr_destroy(sx);
|
||||
}
|
||||
qf = mms_queue_add(from, to, subject,
|
||||
h->m->id, NULL,
|
||||
delivert, expiryt, m, linkedid,
|
||||
NULL, NULL,
|
||||
NULL, NULL,
|
||||
NULL,
|
||||
qh,
|
||||
dlr,
|
||||
octstr_get_cstr(incoming_qdir),
|
||||
octstr_imm(MM_NAME));
|
||||
|
@ -193,12 +215,15 @@ static void mm7soap_receive(MmsHTTPClientInfo *h)
|
|||
|
||||
octstr_destroy(linkedid);
|
||||
octstr_destroy(value);
|
||||
http_destroy_headers(qh);
|
||||
} else {
|
||||
error(0, "Failed to convert received MM7/SOAP DeliverReq message from mmc=%s to MMS Message!",
|
||||
error(0,
|
||||
"Failed to convert received MM7/SOAP DeliverReq message from mmc=%s to MMS Message!",
|
||||
octstr_get_cstr(h->m->id));
|
||||
status = 4000;
|
||||
}
|
||||
mresp = mm7_make_resp(mreq, status, NULL,1);
|
||||
|
||||
break;
|
||||
|
||||
case MM7_TAG_DeliveryReportReq:
|
||||
|
@ -210,7 +235,7 @@ static void mm7soap_receive(MmsHTTPClientInfo *h)
|
|||
octstr_get_cstr(from), octstr_get_cstr(value), octstr_get_cstr(desc),
|
||||
octstr_get_cstr(h->m->id));
|
||||
send_report(from, "delivery-report", NULL,
|
||||
value, msgid, h->m->id, h->m->group_id);
|
||||
value, msgid, h->m->id, h->m->group_id, NULL, uaprof, uaprof_tstamp);
|
||||
|
||||
octstr_destroy(desc);
|
||||
octstr_destroy(value);
|
||||
|
@ -225,7 +250,7 @@ static void mm7soap_receive(MmsHTTPClientInfo *h)
|
|||
|
||||
send_report(from,
|
||||
"read-report", NULL, value, msgid,
|
||||
h->m->id, h->m->group_id);
|
||||
h->m->id, h->m->group_id, NULL, uaprof, uaprof_tstamp);
|
||||
|
||||
octstr_destroy(value);
|
||||
mms_log("ReadReport",
|
||||
|
@ -255,6 +280,7 @@ static void mm7soap_receive(MmsHTTPClientInfo *h)
|
|||
octstr_destroy(vasid);
|
||||
octstr_destroy(msgid);
|
||||
octstr_destroy(qf);
|
||||
octstr_destroy(uaprof);
|
||||
mms_destroy(m);
|
||||
http_destroy_headers(rh);
|
||||
octstr_destroy(reply_body);
|
||||
|
@ -383,7 +409,7 @@ static void mm7eaif_receive(MmsHTTPClientInfo *h)
|
|||
case MMS_MSGTYPE_DELIVERY_IND:
|
||||
value = http_header_value(mh, octstr_imm("X-Mms-Status"));
|
||||
value2 = http_header_value(mh, octstr_imm("Message-ID"));
|
||||
send_report(hfrom, "delivery-report", NULL, value, value2, h->m->id, h->m->group_id);
|
||||
send_report(hfrom, "delivery-report", NULL, value, value2, h->m->id, h->m->group_id, NULL, NULL, -1);
|
||||
|
||||
octstr_destroy(value);
|
||||
octstr_destroy(value2);
|
||||
|
@ -392,7 +418,7 @@ static void mm7eaif_receive(MmsHTTPClientInfo *h)
|
|||
case MMS_MSGTYPE_READ_ORIG_IND:
|
||||
value = http_header_value(mh, octstr_imm("X-Mms-Read-Status"));
|
||||
value2 = http_header_value(mh, octstr_imm("Message-ID"));
|
||||
send_report(hfrom, "read-report", NULL, value, value2, h->m->id, h->m->group_id);
|
||||
send_report(hfrom, "read-report", NULL, value, value2, h->m->id, h->m->group_id, NULL, NULL, -1);
|
||||
|
||||
|
||||
octstr_destroy(value);
|
||||
|
@ -521,7 +547,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;
|
||||
Octstr *s, *distrib = NULL;
|
||||
|
||||
info(0, "MMSBox: Send[soap] to MMSC[%s], msg type [%s], from %s, to %s",
|
||||
mmc->id ? octstr_get_cstr(mmc->id) : "",
|
||||
|
@ -529,11 +555,14 @@ static Octstr *mm7soap_send(MmscGrp *mmc, Octstr *from, Octstr *to,
|
|||
octstr_get_cstr(from), octstr_get_cstr(to));
|
||||
|
||||
gwlist_append(xto, to);
|
||||
|
||||
|
||||
if (hdrs)
|
||||
distrib = http_header_value(hdrs, octstr_imm("X-Mbuni-DistributionIndicator"));
|
||||
if ((mreq = mm7_mmsmsg_to_soap(m, from, xto, transid,
|
||||
service_code,
|
||||
linkedid,
|
||||
1, octstr_get_cstr(mmc->id), vasid)) == NULL) {
|
||||
1, octstr_get_cstr(mmc->id), vasid, NULL, 0,/* UA N/A on this side. */
|
||||
distrib)) == NULL) {
|
||||
*error = octstr_format("Failed to convert Msg[%S] 2 SOAP message!",
|
||||
mms_message_type_to_string(mtype));
|
||||
goto done1;
|
||||
|
@ -606,7 +635,7 @@ done1:
|
|||
http_destroy_headers(ph);
|
||||
octstr_destroy(rbody);
|
||||
octstr_destroy(url);
|
||||
|
||||
octstr_destroy(distrib);
|
||||
gwlist_destroy(xto, NULL);
|
||||
|
||||
return ret;
|
||||
|
@ -696,10 +725,11 @@ static Octstr *mm7eaif_send(MmscGrp *mmc, Octstr *from, Octstr *to,
|
|||
if (ret)
|
||||
mms_log2("Sent", from, to, -1, ret, NULL, mmc->id, "MMSBox", NULL, NULL);
|
||||
|
||||
#if 0
|
||||
info(0, "Sent to MMC[%s], code=[%d], resp=[%s] msgid [%s]",
|
||||
octstr_get_cstr(mmc->id),
|
||||
hstatus, resp ? octstr_get_cstr(resp) : "(none)", ret ? octstr_get_cstr(ret) : "(none)");
|
||||
|
||||
#endif
|
||||
|
||||
http_destroy_headers(rh);
|
||||
octstr_destroy(body);
|
||||
|
@ -712,9 +742,12 @@ static Octstr *mm7eaif_send(MmscGrp *mmc, Octstr *from, Octstr *to,
|
|||
|
||||
|
||||
static int mms_sendtommsc(MmscGrp *mmc, Octstr *from, Octstr *to, Octstr *transid,
|
||||
Octstr *orig_transid,
|
||||
Octstr *linkedid, char *vasid, Octstr *service_code,
|
||||
MmsMsg *m, Octstr *dlr_url, Octstr *rr_url,
|
||||
List *hdrs, Octstr **err)
|
||||
List *hdrs,
|
||||
Octstr **new_msgid,
|
||||
Octstr **err)
|
||||
{
|
||||
Octstr *id = NULL, *groupid = NULL;
|
||||
int ret = 0, retry = 0;
|
||||
|
@ -735,20 +768,16 @@ static int mms_sendtommsc(MmscGrp *mmc, Octstr *from, Octstr *to, Octstr *transi
|
|||
} mutex_unlock(mmc->mutex); /* release lock */
|
||||
|
||||
if (id) {
|
||||
if (dlr_url) { /* remember the url's for reporting purposes. */
|
||||
mms_dlr_url_put(id, "delivery-report", groupid, dlr_url);
|
||||
send_report(from, "delivery-report", dlr_url,
|
||||
octstr_imm("Sent"), id, mmc->id, groupid);
|
||||
}
|
||||
|
||||
if (dlr_url) /* remember the url's for reporting purposes. */
|
||||
mms_dlr_url_put(id, "delivery-report", groupid, dlr_url, orig_transid);
|
||||
if (rr_url)
|
||||
mms_dlr_url_put(id, "read-report", groupid, rr_url);
|
||||
|
||||
octstr_destroy(id);
|
||||
mms_dlr_url_put(id, "read-report", groupid, rr_url, orig_transid);
|
||||
ret = MMS_SEND_OK;
|
||||
} else
|
||||
ret = retry ? MMS_SEND_ERROR_TRANSIENT : MMS_SEND_ERROR_FATAL;
|
||||
|
||||
*new_msgid = id;
|
||||
|
||||
octstr_destroy(groupid);
|
||||
if (id && throughput > 0)
|
||||
gwthread_sleep(1.0/throughput);
|
||||
|
@ -760,7 +789,7 @@ static int sendMsg(MmsEnvelope *e)
|
|||
{
|
||||
MmsMsg *msg = NULL;
|
||||
int i, n;
|
||||
|
||||
Octstr *otransid = e->hdrs ? http_header_value(e->hdrs, octstr_imm("X-Mbuni-TransactionID")) : NULL;
|
||||
msg = mms_queue_getdata(e);
|
||||
|
||||
for (i = 0, n = gwlist_len(e->to); i<n; i++) {
|
||||
|
@ -769,6 +798,7 @@ static int sendMsg(MmsEnvelope *e)
|
|||
Octstr *err = NULL;
|
||||
time_t tnow = time(NULL);
|
||||
MmscGrp *mmc = NULL;
|
||||
Octstr *new_msgid = NULL;
|
||||
|
||||
if (!to || !to->process)
|
||||
continue;
|
||||
|
@ -798,32 +828,39 @@ static int sendMsg(MmsEnvelope *e)
|
|||
|
||||
res = mms_sendtommsc(mmc, e->from, to->rcpt,
|
||||
e->msgId,
|
||||
otransid,
|
||||
e->token, /* token = linkedid */
|
||||
e->vasid ? octstr_get_cstr(e->vasid) : NULL,
|
||||
e->vaspid,
|
||||
msg,
|
||||
e->url1, e->url2,
|
||||
e->hdrs,
|
||||
&new_msgid,
|
||||
&err);
|
||||
|
||||
done:
|
||||
if (res == MMS_SEND_OK)
|
||||
if (res == MMS_SEND_OK) {
|
||||
to->process = 0;
|
||||
else if (res == MMS_SEND_ERROR_FATAL && mmc)
|
||||
send_report(to->rcpt, "delivery-report", e->url1,
|
||||
octstr_imm("Sent"), new_msgid, mmc->id, mmc->group_id, otransid, NULL, -1);
|
||||
|
||||
} else if (res == MMS_SEND_ERROR_FATAL && mmc)
|
||||
send_report(to->rcpt, "delivery-report",
|
||||
e->url1,
|
||||
(e->expiryt != 0 && e->expiryt < tnow) ?
|
||||
octstr_imm("Expired") : octstr_imm("Rejected"),
|
||||
e->msgId, mmc->id, mmc->group_id);
|
||||
e->msgId, mmc->id, mmc->group_id, otransid, NULL, -1);
|
||||
if (res == MMS_SEND_ERROR_FATAL)
|
||||
to->process = 0; /* No more attempts. */
|
||||
|
||||
info(0, "%s MMSBox Outgoing Queue MMS Send: From %s, to %s, msgsize=%ld: err=%s",
|
||||
info(0, "%s MMSBox Outgoing Queue MMS Send: From %s, to %s, msgsize=%ld: msgid=[%s], err=%s",
|
||||
SEND_ERROR_STR(res),
|
||||
octstr_get_cstr(e->from), octstr_get_cstr(to->rcpt), e->msize,
|
||||
new_msgid ? octstr_get_cstr(new_msgid) : NULL,
|
||||
err ? octstr_get_cstr(err) : "(none)");
|
||||
|
||||
|
||||
octstr_destroy(new_msgid);
|
||||
|
||||
e->lasttry = tnow;
|
||||
if (mms_queue_update(e) == 1) {
|
||||
e = NULL;
|
||||
|
@ -833,6 +870,7 @@ static int sendMsg(MmsEnvelope *e)
|
|||
}
|
||||
|
||||
mms_destroy(msg);
|
||||
octstr_destroy(otransid);
|
||||
|
||||
if (e) { /* Update the queue if it is still valid (e.g. recipients not handled)
|
||||
* XXX can this happen here??...
|
||||
|
|
|
@ -81,33 +81,41 @@ static int dlr_entry_fname(char *msgid, char *rtype, Octstr *mmc_gid, Octstr **e
|
|||
return fd;
|
||||
}
|
||||
|
||||
void mms_dlr_url_put(Octstr *msgid, char *rtype, Octstr *mmc_gid, Octstr *dlr_url)
|
||||
void mms_dlr_url_put(Octstr *msgid, char *rtype, Octstr *mmc_gid, Octstr *dlr_url, Octstr *transid)
|
||||
{
|
||||
int fd = dlr_entry_fname(octstr_get_cstr(msgid), rtype, mmc_gid, NULL);
|
||||
|
||||
if (fd >= 0) {
|
||||
octstr_write_data(dlr_url, fd, 0);
|
||||
Octstr *x = octstr_format("%S %S", transid ? transid : octstr_imm("x"), dlr_url); /* better have no spaces in transid! */
|
||||
octstr_write_data(x, fd, 0);
|
||||
close(fd);
|
||||
octstr_destroy(x);
|
||||
}
|
||||
}
|
||||
|
||||
Octstr *mms_dlr_url_get(Octstr *msgid, char *rtype, Octstr *mmc_gid)
|
||||
int mms_dlr_url_get(Octstr *msgid, char *rtype, Octstr *mmc_gid, Octstr **dlr_url, Octstr **transid)
|
||||
{
|
||||
int fd = dlr_entry_fname(octstr_get_cstr(msgid), rtype, mmc_gid, NULL);
|
||||
FILE *f;
|
||||
|
||||
if (fd >= 0 && (f = fdopen(fd, "r+")) != NULL) {
|
||||
Octstr *s = octstr_read_pipe(f);
|
||||
|
||||
int i, ret;
|
||||
|
||||
fclose(f);
|
||||
if (s && octstr_len(s) == 0) {
|
||||
octstr_destroy(s);
|
||||
return NULL;
|
||||
ret = -1;
|
||||
} else if ((i = octstr_search_char(s, ' ', 0)) >= 0) {
|
||||
*transid = octstr_copy(s, 0, i);
|
||||
*dlr_url = octstr_copy(s, i+1, octstr_len(s));
|
||||
ret = 0;
|
||||
} else
|
||||
return s;
|
||||
ret = -1;
|
||||
octstr_destroy(s);
|
||||
return ret;
|
||||
} else if (fd >= 0)
|
||||
close(fd);
|
||||
return NULL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
void mms_dlr_url_remove(Octstr *msgid, char *rtype, Octstr *mmc_gid)
|
||||
|
|
|
@ -293,6 +293,7 @@ done:
|
|||
enum _xurltype {FILE_TYPE, URL_TYPE};
|
||||
static Octstr *url_path_prefix(Octstr *url, int type);
|
||||
|
||||
/* this function constructs and sends the message -- a bit too many params XXX! */
|
||||
static int make_and_queue_msg(Octstr *data, Octstr *ctype, List *reply_headers,
|
||||
Octstr *msg_url,
|
||||
Octstr *base_url, int type, MmsEnvelope *e,
|
||||
|
@ -308,13 +309,15 @@ static int fetch_serviceurl(MmsEnvelope *e,
|
|||
Octstr **err)
|
||||
{
|
||||
List *rh, *rph = NULL;
|
||||
Octstr *body = NULL, *rb = NULL;
|
||||
Octstr *body = NULL, *rb = NULL, *transid;
|
||||
Octstr *ctype = NULL, *params = NULL;
|
||||
Octstr *s;
|
||||
int i, n, method, typ = FILE_TYPE;
|
||||
FILE *fp = NULL;
|
||||
|
||||
int res = -1;
|
||||
|
||||
transid = mms_maketransid(e->xqfname, octstr_imm(MM_NAME));
|
||||
switch (ms->type) {
|
||||
case TRANS_TYPE_GET_URL:
|
||||
case TRANS_TYPE_POST_URL:
|
||||
|
@ -331,11 +334,25 @@ static int fetch_serviceurl(MmsEnvelope *e,
|
|||
|
||||
if (e->subject)
|
||||
http_header_add(rh, "X-Mbuni-Subject", octstr_get_cstr(e->subject));
|
||||
|
||||
/* Put in a transaction ID. */
|
||||
http_header_add(rh, "X-Mbuni-TransactionID", octstr_get_cstr(transid));
|
||||
|
||||
for (i = 0, n = gwlist_len(e->to); i < n; i++) {
|
||||
MmsEnvelopeTo *r = gwlist_get(e->to, i);
|
||||
if (r && r->rcpt)
|
||||
http_header_add(rh, "X-Mbuni-To", octstr_get_cstr(r->rcpt));
|
||||
}
|
||||
|
||||
if ((s = http_header_value(e->hdrs, octstr_imm("X-Mbuni-UAProf"))) != NULL) { /* add UAProf info, if any. */
|
||||
Octstr *sx = http_header_value(e->hdrs,octstr_imm("X-Mbuni-Timestamp"));
|
||||
http_header_add(rh, "X-Mbuni-UAProf", octstr_get_cstr(s));
|
||||
if (sx)
|
||||
http_header_add(rh, "X-Mbuni-Timestamp", octstr_get_cstr(sx));
|
||||
octstr_destroy(sx);
|
||||
octstr_destroy(s);
|
||||
}
|
||||
|
||||
if (ms->type == TRANS_TYPE_POST_URL) { /* Put in the parameters. */
|
||||
MIMEEntity *x = mime_entity_create();
|
||||
|
||||
|
@ -358,14 +375,16 @@ static int fetch_serviceurl(MmsEnvelope *e,
|
|||
method = HTTP_METHOD_GET;
|
||||
|
||||
typ = URL_TYPE;
|
||||
if (mmsbox_url_fetch_content(method, ms->url, rh, body, &rph, &rb) == HTTP_OK)
|
||||
if (mmsbox_url_fetch_content(method, ms->url, rh, body, &rph, &rb) == HTTP_OK) {
|
||||
get_content_type(rph, &ctype, ¶ms);
|
||||
else
|
||||
/* add transaction id back.*/
|
||||
http_header_remove_all(rph, "X-Mbuni-TransactionID");
|
||||
http_header_add(rph, "X-Mbuni-TransactionID", octstr_get_cstr(transid));
|
||||
} else
|
||||
*err = octstr_format("MMSBox: Failed to fetch content for Service %S, url %S!",
|
||||
ms->name, ms->url);
|
||||
http_destroy_headers(rh);
|
||||
if (body)
|
||||
octstr_destroy(body);
|
||||
octstr_destroy(body);
|
||||
break;
|
||||
case TRANS_TYPE_FILE:
|
||||
if ((fp = fopen(octstr_get_cstr(ms->url), "r")) != NULL) {
|
||||
|
@ -438,7 +457,8 @@ done:
|
|||
octstr_destroy(rb);
|
||||
http_destroy_headers(rph);
|
||||
octstr_destroy(params);
|
||||
|
||||
octstr_destroy(transid);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
|
@ -451,7 +471,8 @@ static int mmsbox_service_dispatch(MmsEnvelope *e)
|
|||
Octstr *err = NULL, *keyword = NULL;
|
||||
MmsService *ms;
|
||||
|
||||
gw_assert(e->msgtype == MMS_MSGTYPE_SEND_REQ || e->msgtype == MMS_MSGTYPE_RETRIEVE_CONF);
|
||||
gw_assert(e->msgtype == MMS_MSGTYPE_SEND_REQ ||
|
||||
e->msgtype == MMS_MSGTYPE_RETRIEVE_CONF);
|
||||
|
||||
if ((msg = mms_queue_getdata(e)) == NULL) {
|
||||
err = octstr_format("Failed to read message for queue entry %s!",
|
||||
|
@ -800,11 +821,12 @@ 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;
|
||||
Octstr *allow_adaptations = NULL, *mclass = NULL, *prio = NULL, *distro = NULL;
|
||||
MmsMsg *m = NULL;
|
||||
MIMEEntity *me = mime_entity_create();
|
||||
List *hdrs = NULL, *xheaders = NULL;
|
||||
|
||||
List *xheaders = NULL;
|
||||
List *hdrs = http_create_empty_headers();
|
||||
Octstr *otransid = NULL;
|
||||
|
||||
time_t expiryt = time(NULL) + DEFAULT_EXPIRE;
|
||||
Octstr *x;
|
||||
|
@ -856,6 +878,11 @@ static int make_and_queue_msg(Octstr *data, Octstr *ctype, List *reply_headers,
|
|||
hsvc_code = http_header_value(reply_headers, octstr_imm("X-Mbuni-ServiceCode"));
|
||||
}
|
||||
|
||||
if (reply_headers) {
|
||||
/* always capture transid and distro */
|
||||
otransid = http_header_value(reply_headers, octstr_imm("X-Mbuni-TransactionID"));
|
||||
distro = http_header_value(reply_headers, octstr_imm("X-Mbuni-DistributionIndicator"));
|
||||
}
|
||||
if (gwlist_len(xto) == 0 && e && e->from)
|
||||
gwlist_append(xto, octstr_duplicate(e->from));
|
||||
|
||||
|
@ -988,7 +1015,6 @@ static int make_and_queue_msg(Octstr *data, Octstr *ctype, List *reply_headers,
|
|||
me = xm;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Add some nice headers. */
|
||||
xheaders = mime_entity_headers(me);
|
||||
|
@ -1003,7 +1029,7 @@ static int make_and_queue_msg(Octstr *data, Octstr *ctype, List *reply_headers,
|
|||
if (dlr_url)
|
||||
http_header_add(xheaders, "X-Mms-Delivery-Report", "Yes");
|
||||
if (rr_url)
|
||||
http_header_add(xheaders, "X-Mms-Read-Report", "Yes");
|
||||
http_header_add(xheaders, "X-Mms-Read-Reply", "Yes");
|
||||
if (allow_adaptations)
|
||||
http_header_add(xheaders, "X-Mms-Allow-Adaptations",
|
||||
(octstr_str_compare(allow_adaptations, "true") == 0) ? "true" : "false");
|
||||
|
@ -1032,11 +1058,15 @@ static int make_and_queue_msg(Octstr *data, Octstr *ctype, List *reply_headers,
|
|||
goto done;
|
||||
}
|
||||
|
||||
if (otransid) /* always add transid */
|
||||
http_header_add(hdrs, "X-Mbuni-TransactionID", octstr_get_cstr(otransid));
|
||||
|
||||
if (distro) /* always add distrib */
|
||||
http_header_add(hdrs, "X-Mbuni-DistributionIndicator", octstr_get_cstr(distro));
|
||||
|
||||
if (passthro_headers && reply_headers) { /* if user wants passthro headers, get them and add them. */
|
||||
int n = gwlist_len(reply_headers);
|
||||
int i;
|
||||
|
||||
hdrs = http_create_empty_headers();
|
||||
int i;
|
||||
for (i = 0; i < n; i++) {
|
||||
Octstr *h = NULL, *v = NULL;
|
||||
int j;
|
||||
|
@ -1072,8 +1102,10 @@ static int make_and_queue_msg(Octstr *data, Octstr *ctype, List *reply_headers,
|
|||
(dlr_url != NULL),
|
||||
octstr_get_cstr(qdir),
|
||||
octstr_imm(MM_NAME));
|
||||
info(0, "MMSBox: Queued message from service [%s]: %s",
|
||||
octstr_get_cstr(svc_name), octstr_get_cstr(x));
|
||||
info(0, "MMSBox: Queued message from service [%s], [transid [%s]: %s",
|
||||
octstr_get_cstr(svc_name),
|
||||
otransid ? octstr_get_cstr(otransid) : "",
|
||||
octstr_get_cstr(x));
|
||||
*err = x;
|
||||
res = 0;
|
||||
done:
|
||||
|
@ -1086,6 +1118,7 @@ done:
|
|||
octstr_destroy(from);
|
||||
octstr_destroy(xfrom);
|
||||
octstr_destroy(subject);
|
||||
octstr_destroy(otransid);
|
||||
if (me)
|
||||
mime_entity_destroy(me);
|
||||
|
||||
|
@ -1258,20 +1291,27 @@ static void sendmms_func(void *unused)
|
|||
|
||||
/* Requests to make_and_queue below can block, but for now we don't care. */
|
||||
if (ctype && data && !rb) { /* only send if no error. */
|
||||
int send_as_incoming = (send_type &&
|
||||
octstr_str_case_compare(send_type, "mo") == 0);
|
||||
Octstr *transid = NULL;
|
||||
if (!send_as_incoming) { /* for outgoing, track TransactionID for DLR. */
|
||||
transid = mms_maketransid(NULL, octstr_imm(MM_NAME));
|
||||
http_header_add(rh, "X-Mbuni-TransactionID", octstr_get_cstr(transid));
|
||||
}
|
||||
res = make_and_queue_msg(data, ctype, rh,
|
||||
data_url ? data_url : base_url,
|
||||
base_url, URL_TYPE, NULL,
|
||||
vasid ? vasid : octstr_imm("sendmms-user"),
|
||||
u->faked_sender, service_code,
|
||||
1, NULL,
|
||||
(send_type &&
|
||||
octstr_str_case_compare(send_type, "mo") == 0) ?
|
||||
incoming_qdir : outgoing_qdir,
|
||||
send_as_incoming ? incoming_qdir : outgoing_qdir,
|
||||
&err);
|
||||
if (res < 0)
|
||||
rb = octstr_format("Error in message conversion: %S", err);
|
||||
else
|
||||
rb = octstr_format("Accepted: %S", err ? err : octstr_imm("1"));
|
||||
rb = octstr_format("Accepted: %S", /* repeat transid. */
|
||||
send_as_incoming ? err : transid);
|
||||
octstr_destroy(transid);
|
||||
} else if (!rb)
|
||||
rb = octstr_imm("Failed to send message");
|
||||
http_send_reply(client, (res == 0) ? HTTP_OK : HTTP_BAD_REQUEST, hh,
|
||||
|
@ -1281,7 +1321,6 @@ static void sendmms_func(void *unused)
|
|||
(res == 0) ? "Queued" : "Not Queued",
|
||||
rb ? octstr_get_cstr(rb) : "");
|
||||
|
||||
|
||||
http_destroy_headers(rh);
|
||||
octstr_destroy(ctype);
|
||||
octstr_destroy(rb);
|
||||
|
|
|
@ -15,8 +15,8 @@
|
|||
#include "mmsbox_cfg.h"
|
||||
|
||||
extern int rstop;
|
||||
void mms_dlr_url_put(Octstr *msgid, char *rtype, Octstr *mmc_gid, Octstr *dlr_url);
|
||||
Octstr *mms_dlr_url_get(Octstr *msgid, char *rtype, Octstr *mmc_gid);
|
||||
void mms_dlr_url_put(Octstr *msgid, char *rtype, Octstr *mmc_gid, Octstr *dlr_url, Octstr *transid);
|
||||
int mms_dlr_url_get(Octstr *msgid, char *rtype, Octstr *mmc_gid, Octstr **dlr_url, Octstr **transid);
|
||||
void mms_dlr_url_remove(Octstr *msgid, char *rtype, Octstr *mmc_gid);
|
||||
void mmsc_receive_func(MmscGrp *m);
|
||||
void mmsbox_outgoing_queue_runner(int *rstop);
|
||||
|
|
|
@ -345,6 +345,19 @@ MmscSettings *mms_load_mmsc_settings(mCfg *cfg, List **proxyrelays)
|
|||
warning(0, "mms-to-mobile copy handler VASP specified more than once! Only last config taken.");
|
||||
m->mms2mobile = mv;
|
||||
}
|
||||
|
||||
if ((s = _mms_cfg_getx(grp, octstr_imm("send-uaprof"))) != NULL){
|
||||
if (octstr_str_case_compare(s, "url") == 0)
|
||||
mv->send_uaprof = UAProf_URL;
|
||||
else if (octstr_str_case_compare(s, "ua") == 0)
|
||||
mv->send_uaprof = UAProf_UA;
|
||||
else {
|
||||
warning(0, "unknown send-uaprof value '%s'. Must be \"ua\" or \"url\"!",
|
||||
octstr_get_cstr(s));
|
||||
mv->send_uaprof = UAProf_None;
|
||||
}
|
||||
octstr_destroy(s);
|
||||
}
|
||||
gwlist_append(m->vasp_list, mv);
|
||||
}
|
||||
gwlist_destroy(l, NULL);
|
||||
|
|
|
@ -31,6 +31,7 @@ typedef struct MmsVasp {
|
|||
enum {SOAP_VASP, EAIF_VASP, NONE_VASP} type;
|
||||
Octstr *vasp_username, *vasp_password;
|
||||
Octstr *vasp_url;
|
||||
enum {UAProf_None, UAProf_URL, UAProf_UA} send_uaprof;
|
||||
MM7Version_t ver;
|
||||
} MmsVasp;
|
||||
|
||||
|
|
|
@ -49,6 +49,7 @@ static int mms_sendtoproxy(Octstr *from, Octstr *to,
|
|||
int dlr, Octstr **error);
|
||||
|
||||
static int mms_sendtovasp(MmsVasp *vasp, Octstr *from, Octstr *to, Octstr *msgId,
|
||||
List *qh,
|
||||
MmsMsg *m, Octstr **error);
|
||||
|
||||
static int _x_octstr_int_compare(int n, Octstr *s);
|
||||
|
@ -156,6 +157,7 @@ static int sendMsg(MmsEnvelope *e)
|
|||
res = mms_sendtovasp(settings->mms2email,
|
||||
e->from, to->rcpt,
|
||||
e->msgId,
|
||||
e->hdrs,
|
||||
msg, &err);
|
||||
else
|
||||
res = mms_sendtoemail(pfrom, to->rcpt,
|
||||
|
@ -191,6 +193,7 @@ static int sendMsg(MmsEnvelope *e)
|
|||
int res = mms_sendtovasp(settings->mms2mobile,
|
||||
e->from, to->rcpt,
|
||||
e->msgId,
|
||||
e->hdrs,
|
||||
msg, &err);
|
||||
info(0, "%s Global Queue MMS Send: Local Msg copy to VASP (%s) - "
|
||||
"From %s, to %s, msgsize=%ld: err=%s",
|
||||
|
@ -220,6 +223,7 @@ static int sendMsg(MmsEnvelope *e)
|
|||
_x_octstr_int_compare(vasp->short_code, phonenum) == 0) {
|
||||
res = mms_sendtovasp(vasp, e->from, to->rcpt,
|
||||
e->msgId,
|
||||
e->hdrs,
|
||||
msg, &err);
|
||||
sent = 1;
|
||||
break;
|
||||
|
@ -242,6 +246,7 @@ static int sendMsg(MmsEnvelope *e)
|
|||
int res = mms_sendtovasp(settings->mms2mobile,
|
||||
e->from, to->rcpt,
|
||||
e->msgId,
|
||||
e->hdrs,
|
||||
msg, &err);
|
||||
info(0, "%s Global Queue MMS Send: Local Msg copy to VASP (%s) - "
|
||||
"From %s, to %s, msgsize=%ld: err=%s",
|
||||
|
@ -310,7 +315,7 @@ static int sendMsg(MmsEnvelope *e)
|
|||
gwlist_append(l, octstr_duplicate(e->from));
|
||||
|
||||
/* Add to queue, switch via proxy to be from proxy. */
|
||||
qfs = mms_queue_add(settings->system_user, l,
|
||||
qfs = mms_queue_add(to->rcpt, l,
|
||||
err, NULL, e->fromproxy,
|
||||
tnow, tnow+settings->default_msgexpiry, m, NULL,
|
||||
NULL, NULL,
|
||||
|
@ -528,7 +533,8 @@ static int _x_octstr_int_compare(int n, Octstr *s)
|
|||
}
|
||||
|
||||
static int mm7soap_send(MmsVasp *vasp, Octstr *from, Octstr *to, Octstr *msgId,
|
||||
MmsMsg *m, Octstr **error)
|
||||
List *qh,
|
||||
MmsMsg *m, Octstr **error)
|
||||
{
|
||||
int ret = MMS_SEND_ERROR_TRANSIENT;
|
||||
int mtype = mms_messagetype(m);
|
||||
|
@ -537,8 +543,8 @@ static int mm7soap_send(MmsVasp *vasp, Octstr *from, Octstr *to, Octstr *msgId,
|
|||
MSoapMsg_t *mreq = NULL, *mresp = NULL;
|
||||
List *rh = NULL, *ph = NULL;
|
||||
Octstr *body = NULL, *rbody = NULL;
|
||||
|
||||
Octstr *s;
|
||||
Octstr *uaprof = NULL, *s;
|
||||
time_t tstamp;
|
||||
|
||||
info(0, "MMS Relay: Send[soap] to VASP[%s], msg_type=[%s], from=[%s], to=[%s]",
|
||||
vasp ? octstr_get_cstr(vasp->id) : "",
|
||||
|
@ -546,10 +552,20 @@ static int mm7soap_send(MmsVasp *vasp, Octstr *from, Octstr *to, Octstr *msgId,
|
|||
|
||||
gwlist_append(xto, to);
|
||||
|
||||
if (vasp->send_uaprof == UAProf_URL)
|
||||
uaprof = http_header_value(qh, octstr_imm("X-Mbuni-Profile-Url"));
|
||||
else if (vasp->send_uaprof == UAProf_UA)
|
||||
uaprof = http_header_value(qh, octstr_imm("X-Mbuni-User-Agent"));
|
||||
|
||||
if ((s = http_header_value(qh, octstr_imm("X-Mbuni-Timestamp"))) != NULL) {
|
||||
tstamp = strtoul(octstr_get_cstr(s), NULL, 10);
|
||||
octstr_destroy(s);
|
||||
} else
|
||||
tstamp = 0;
|
||||
|
||||
if ((mreq = mm7_mmsmsg_to_soap(m, from, xto, msgId, settings->host_alias,
|
||||
msgId,
|
||||
0, NULL, NULL)) == NULL) {
|
||||
0, NULL, NULL, uaprof, tstamp, NULL)) == NULL) {
|
||||
*error = octstr_format("Failed to convert Msg[%s] 2 SOAP message!",
|
||||
mms_message_type_to_cstr(mtype));
|
||||
goto done1;
|
||||
|
@ -604,19 +620,16 @@ static int mm7soap_send(MmsVasp *vasp, Octstr *from, Octstr *to, Octstr *msgId,
|
|||
tstatus, mms_soap_status_to_cstr(tstatus));
|
||||
done1:
|
||||
|
||||
if (mreq)
|
||||
mm7_soap_destroy(mreq);
|
||||
if (mresp)
|
||||
mm7_soap_destroy(mresp);
|
||||
if (rh)
|
||||
http_destroy_headers(rh);
|
||||
if (body)
|
||||
octstr_destroy(body);
|
||||
if (ph)
|
||||
http_destroy_headers(ph);
|
||||
if (rbody)
|
||||
octstr_destroy(rbody);
|
||||
|
||||
mm7_soap_destroy(mreq);
|
||||
mm7_soap_destroy(mresp);
|
||||
http_destroy_headers(rh);
|
||||
|
||||
octstr_destroy(body);
|
||||
http_destroy_headers(ph);
|
||||
|
||||
octstr_destroy(rbody);
|
||||
octstr_destroy(uaprof);
|
||||
gwlist_destroy(xto, NULL);
|
||||
|
||||
return ret;
|
||||
|
@ -695,13 +708,14 @@ static int mm7eaif_send(MmsVasp *vasp, Octstr *from, Octstr *to, Octstr *msgid,
|
|||
}
|
||||
|
||||
static int mms_sendtovasp(MmsVasp *vasp, Octstr *from, Octstr *to, Octstr *msgid,
|
||||
List *qh,
|
||||
MmsMsg *m, Octstr **err)
|
||||
{
|
||||
if (m == NULL) {
|
||||
*err = octstr_format("GlobalSend: Failed to send to %S, Message format is corrupt!", to);
|
||||
return MMS_SEND_ERROR_FATAL;
|
||||
} else if (vasp->type == SOAP_VASP)
|
||||
return mm7soap_send(vasp, from, to, msgid, m, err);
|
||||
return mm7soap_send(vasp, from, to, msgid, qh, m, err);
|
||||
else if (vasp->type == EAIF_VASP)
|
||||
return mm7eaif_send(vasp, from, to, msgid, m, err);
|
||||
else {
|
||||
|
|
|
@ -386,9 +386,7 @@ void fetchmms_proxy(MmsHTTPClientInfo *h)
|
|||
/* Send to access log with success. */
|
||||
mms_log2("Fetched", e ? e->from : NULL, h->client_addr,
|
||||
e ? e->msize : 0, e ? e->msgId : NULL, NULL, NULL, "MM1",
|
||||
h->ua, (loc == MMS_LOC_MMBOX) ? qf : NULL);
|
||||
|
||||
|
||||
h->ua, (loc == MMS_LOC_MMBOX) ? qf : NULL);
|
||||
goto free_stuff; /* Skip to end. */
|
||||
|
||||
failed:
|
||||
|
@ -415,7 +413,6 @@ void fetchmms_proxy(MmsHTTPClientInfo *h)
|
|||
}
|
||||
|
||||
free_stuff:
|
||||
|
||||
if (notify_cmd) /* Inform provisioning server */
|
||||
notify_prov_server(octstr_get_cstr(settings->prov_notify),
|
||||
h->base_client_addr ? octstr_get_cstr(h->base_client_addr) : "unknown",
|
||||
|
@ -423,15 +420,15 @@ void fetchmms_proxy(MmsHTTPClientInfo *h)
|
|||
|
||||
|
||||
http_destroy_headers(rh);
|
||||
if (e) mms_queue_free_env(e);
|
||||
mms_queue_free_env(e);
|
||||
|
||||
if (s) octstr_destroy(s);
|
||||
if (m) mms_destroy(m);
|
||||
if (mr) mms_destroy(mr);
|
||||
octstr_destroy(s);
|
||||
mms_destroy(m);
|
||||
mms_destroy(mr);
|
||||
|
||||
if (qf) octstr_destroy(qf);
|
||||
if (token) octstr_destroy(token);
|
||||
if (transid) octstr_destroy(transid);
|
||||
octstr_destroy(qf);
|
||||
octstr_destroy(token);
|
||||
octstr_destroy(transid);
|
||||
|
||||
free_clientInfo(h,1);
|
||||
}
|
||||
|
@ -446,9 +443,11 @@ static void sendmms_proxy(MmsHTTPClientInfo *h)
|
|||
int ctype_set = 0;
|
||||
int mtype = 0, menc;
|
||||
int hstatus = HTTP_OK;
|
||||
char *notify_cmd = NULL;
|
||||
char *notify_cmd = NULL, tbuf[64];
|
||||
int msize = h->body ? octstr_len(h->body) : 0;
|
||||
List *qh = http_create_empty_headers();
|
||||
|
||||
|
||||
debug("proxy.sendinterface", 0,
|
||||
" --> Enterred sendmms interface, blen=%d <--- ",
|
||||
msize);
|
||||
|
@ -458,7 +457,7 @@ static void sendmms_proxy(MmsHTTPClientInfo *h)
|
|||
|
||||
if (!h->body) { /* A body is required. */
|
||||
http_header_add(rh, "Content-Type", "text/plain");
|
||||
hstatus = HTTP_FORBIDDEN;
|
||||
hstatus = HTTP_BAD_REQUEST;
|
||||
reply_body = octstr_format("Unexpected MMS message[%s], no body?",
|
||||
mms_message_type_to_cstr(mtype));
|
||||
|
||||
|
@ -476,9 +475,17 @@ static void sendmms_proxy(MmsHTTPClientInfo *h)
|
|||
goto done;
|
||||
}
|
||||
|
||||
/* Record user agent and profile url. */
|
||||
if (h->ua)
|
||||
http_header_add(qh, "X-Mbuni-User-Agent", octstr_get_cstr(h->ua));
|
||||
if (h->profile_url)
|
||||
http_header_add(qh, "X-Mbuni-Profile-Url", octstr_get_cstr(h->profile_url));
|
||||
sprintf(tbuf, "%ld", time(NULL));
|
||||
http_header_add(qh, "X-Mbuni-Timestamp", tbuf); /* record time of message. */
|
||||
|
||||
debug("proxy.sendinterface", 0, " Client sent us: ");
|
||||
|
||||
#if 1
|
||||
#if 0
|
||||
mms_msgdump(m,1);
|
||||
/* octstr_dump(h->body, 0); */
|
||||
#endif
|
||||
|
@ -495,13 +502,11 @@ static void sendmms_proxy(MmsHTTPClientInfo *h)
|
|||
List *to = gwlist_create();
|
||||
Octstr *subject = NULL;
|
||||
time_t expiryt, deliveryt;
|
||||
|
||||
Octstr *otransid = NULL, *value = NULL, *msgid = NULL;
|
||||
int dlr;
|
||||
char *mmbox_store_status = NULL;
|
||||
Octstr *mmbox_loc = NULL;
|
||||
Octstr *sdf = NULL;
|
||||
|
||||
|
||||
mms_collect_envdata_from_msgheaders(mh, &to, &subject, &otransid, &expiryt,
|
||||
&deliveryt, settings->default_msgexpiry);
|
||||
|
@ -551,14 +556,12 @@ static void sendmms_proxy(MmsHTTPClientInfo *h)
|
|||
octstr_case_compare(value, octstr_imm("Yes")) == 0)
|
||||
dlr = 1;
|
||||
else
|
||||
dlr = 0;
|
||||
|
||||
|
||||
dlr = 0;
|
||||
qf = mms_queue_add(from, to, subject,
|
||||
NULL, NULL, deliveryt, expiryt, m, NULL,
|
||||
NULL, NULL,
|
||||
NULL, NULL,
|
||||
NULL,
|
||||
qh,
|
||||
dlr,
|
||||
octstr_get_cstr(settings->global_queuedir),
|
||||
settings->host_alias);
|
||||
|
@ -585,28 +588,16 @@ static void sendmms_proxy(MmsHTTPClientInfo *h)
|
|||
mms_replace_header_value(mresp,
|
||||
"X-Mms-Content-Location",
|
||||
octstr_get_cstr(mmbox_loc));
|
||||
}
|
||||
|
||||
if (otransid)
|
||||
octstr_destroy(otransid);
|
||||
if (value)
|
||||
octstr_destroy(value);
|
||||
}
|
||||
octstr_destroy(otransid);
|
||||
octstr_destroy(value);
|
||||
octstr_destroy(msgid);
|
||||
octstr_destroy(mmbox_loc);
|
||||
octstr_destroy(sdf);
|
||||
octstr_destroy(from);
|
||||
octstr_destroy(subject);
|
||||
http_destroy_headers(mh);
|
||||
|
||||
if (msgid)
|
||||
octstr_destroy(msgid);
|
||||
|
||||
if (mmbox_loc)
|
||||
octstr_destroy(mmbox_loc);
|
||||
|
||||
if (sdf)
|
||||
octstr_destroy(sdf);
|
||||
|
||||
if (from)
|
||||
octstr_destroy(from);
|
||||
if (subject)
|
||||
octstr_destroy(subject);
|
||||
if (mh)
|
||||
http_destroy_headers(mh);
|
||||
gwlist_destroy(to, (gwlist_item_destructor_t *)octstr_destroy);
|
||||
|
||||
notify_cmd = "sent";
|
||||
|
@ -689,8 +680,6 @@ static void sendmms_proxy(MmsHTTPClientInfo *h)
|
|||
}
|
||||
|
||||
{ /* Found it, etc. */
|
||||
|
||||
|
||||
Octstr *pfrom = mms_get_header_value(mfwd, octstr_imm("From"));
|
||||
Octstr *pdate = mms_get_header_value(mfwd, octstr_imm("Date"));
|
||||
Octstr *pmsgid = mms_get_header_value(mfwd, octstr_imm("Message-ID"));
|
||||
|
@ -752,7 +741,7 @@ static void sendmms_proxy(MmsHTTPClientInfo *h)
|
|||
NULL, NULL, deliveryt, expiryt, mfwd, NULL,
|
||||
NULL, NULL,
|
||||
NULL, NULL,
|
||||
NULL,
|
||||
qh,
|
||||
dlr,
|
||||
octstr_get_cstr(settings->global_queuedir),
|
||||
settings->host_alias);
|
||||
|
@ -969,7 +958,7 @@ static void sendmms_proxy(MmsHTTPClientInfo *h)
|
|||
time(NULL) + settings->default_msgexpiry, mrpt, NULL,
|
||||
NULL, NULL,
|
||||
NULL, NULL,
|
||||
NULL,
|
||||
qh,
|
||||
0,
|
||||
octstr_get_cstr(settings->global_queuedir),
|
||||
settings->host_alias);
|
||||
|
@ -1025,7 +1014,7 @@ static void sendmms_proxy(MmsHTTPClientInfo *h)
|
|||
m, NULL,
|
||||
NULL, NULL,
|
||||
NULL, NULL,
|
||||
NULL,
|
||||
qh,
|
||||
0,
|
||||
octstr_get_cstr(settings->global_queuedir),
|
||||
settings->host_alias);
|
||||
|
@ -1142,13 +1131,10 @@ static void sendmms_proxy(MmsHTTPClientInfo *h)
|
|||
|
||||
store_done:
|
||||
|
||||
if (xstate)
|
||||
octstr_destroy(xstate);
|
||||
octstr_destroy(xstate);
|
||||
if (xflags)
|
||||
gwlist_destroy(xflags, (gwlist_item_destructor_t *)octstr_destroy);
|
||||
|
||||
if (mstore)
|
||||
mms_destroy(mstore);
|
||||
gwlist_destroy(xflags, (gwlist_item_destructor_t *)octstr_destroy);
|
||||
mms_destroy(mstore);
|
||||
|
||||
if (e) { /* Update the message queue and go. */
|
||||
e->lastaccess = time(NULL);
|
||||
|
@ -1157,23 +1143,13 @@ static void sendmms_proxy(MmsHTTPClientInfo *h)
|
|||
e = NULL;
|
||||
}
|
||||
|
||||
if (qf)
|
||||
octstr_destroy(qf);
|
||||
if (token)
|
||||
octstr_destroy(token);
|
||||
if (mh)
|
||||
http_destroy_headers(mh);
|
||||
if (otransid)
|
||||
octstr_destroy(otransid);
|
||||
if (url)
|
||||
octstr_destroy(url);
|
||||
|
||||
|
||||
if (mmbox_loc)
|
||||
octstr_destroy(mmbox_loc);
|
||||
|
||||
if (sdf)
|
||||
octstr_destroy(sdf);
|
||||
octstr_destroy(qf);
|
||||
octstr_destroy(token);
|
||||
http_destroy_headers(mh);
|
||||
octstr_destroy(otransid);
|
||||
octstr_destroy(url);
|
||||
octstr_destroy(mmbox_loc);
|
||||
octstr_destroy(sdf);
|
||||
|
||||
reply_body = mms_tobinary(mresp);
|
||||
notify_cmd = "stored";
|
||||
|
@ -1514,20 +1490,19 @@ static void sendmms_proxy(MmsHTTPClientInfo *h)
|
|||
done:
|
||||
|
||||
#if 1
|
||||
if (mresp)
|
||||
mms_msgdump(mresp, 0);
|
||||
#endif
|
||||
|
||||
if (mresp)
|
||||
mms_destroy(mresp);
|
||||
mms_msgdump(mresp, 0);
|
||||
#endif
|
||||
|
||||
|
||||
mms_destroy(mresp);
|
||||
if (!ctype_set)
|
||||
http_header_add(rh, "Content-Type", "application/vnd.wap.mms-message");
|
||||
|
||||
http_send_reply(h->client, hstatus, rh, reply_body);
|
||||
http_destroy_headers(rh);
|
||||
if (reply_body)
|
||||
octstr_destroy(reply_body);
|
||||
|
||||
octstr_destroy(reply_body);
|
||||
http_destroy_headers(qh);
|
||||
free_clientInfo(h,1);
|
||||
}
|
||||
|
||||
|
@ -1611,7 +1586,7 @@ static void mm7soap_dispatch(MmsHTTPClientInfo *h)
|
|||
sender = octstr_format("%d/TYPE=PLMN", h->vasp->short_code);
|
||||
switch (mm7_msgtype(mreq)) {
|
||||
case MM7_TAG_SubmitReq:
|
||||
mm7_get_envelope(mreq, &from, &to, &subject, &vasid, &expiryt, &delivert);
|
||||
mm7_get_envelope(mreq, &from, &to, &subject, &vasid, &expiryt, &delivert, NULL, NULL);
|
||||
m = mm7_soap_to_mmsmsg(mreq, from ? from : sender);
|
||||
if (m) {
|
||||
Octstr *value = NULL;
|
||||
|
@ -1629,7 +1604,7 @@ static void mm7soap_dispatch(MmsHTTPClientInfo *h)
|
|||
|
||||
if (expiryt < 0)
|
||||
expiryt = time(NULL) + settings->default_msgexpiry;
|
||||
|
||||
mms_remove_headers(m, "Message-ID"); /* cannot be found here. */
|
||||
qf = mms_queue_add(from ? from : sender, to, subject,
|
||||
NULL, NULL,
|
||||
delivert, expiryt, m, NULL,
|
||||
|
@ -1642,8 +1617,7 @@ static void mm7soap_dispatch(MmsHTTPClientInfo *h)
|
|||
msgid = mms_maketransid(octstr_get_cstr(qf), settings->host_alias);
|
||||
mms_log("Received", from ? from : sender, to, -1, msgid, h->vasp->id, NULL, "MM7",
|
||||
h->ua, NULL);
|
||||
if (value)
|
||||
octstr_destroy(value);
|
||||
octstr_destroy(value);
|
||||
} else {
|
||||
error(0, "Failed to convert received MM7/SOAP SubmitReq message from vasp=%s to MMS Message!",
|
||||
octstr_get_cstr(h->vasp->id));
|
||||
|
@ -1696,11 +1670,9 @@ static void mm7soap_dispatch(MmsHTTPClientInfo *h)
|
|||
e = NULL;
|
||||
mms_log("Replace",
|
||||
sender, NULL, -1, msgid, h->vasp->id, NULL, "MM7", h->ua, NULL);
|
||||
|
||||
if (new)
|
||||
mms_destroy(new);
|
||||
if (old)
|
||||
mms_destroy(old);
|
||||
|
||||
mms_destroy(new);
|
||||
mms_destroy(old);
|
||||
http_destroy_headers(hh);
|
||||
}
|
||||
} else {
|
||||
|
@ -1829,6 +1801,7 @@ static void mm7eaif_dispatch(MmsHTTPClientInfo *h)
|
|||
goto done;
|
||||
}
|
||||
|
||||
mms_remove_headers(m, "Message-ID");
|
||||
mh = mms_message_headers(m);
|
||||
/* Now get sender and receiver data.
|
||||
* for now we ignore adaptation flags.
|
||||
|
|
Loading…
Reference in New Issue