mm7 fix -- conditionally remove prefix
This commit is contained in:
parent
7137d5bd5d
commit
fc552034da
|
@ -1,3 +1,5 @@
|
|||
2007-09-25 P. A. Bagyenda <bagyenda@dsmagic.com>
|
||||
* Added flag to conditionally remove mm7: XML namespace prefix
|
||||
2007-09-18 P. A. Bagyenda <bagyenda@dsmagic.com>
|
||||
* Support for custom MM7 MMC types using a loadable module.
|
||||
2007-09-17 P. A. Bagyenda <bagyenda@dsmagic.com>
|
||||
|
|
|
@ -1767,6 +1767,21 @@ vasp-url
|
|||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td valign=top >
|
||||
<tt>use-mm7-soap-namespace-prefix</tt>
|
||||
</td>
|
||||
<td valign=top >
|
||||
Boolean
|
||||
</td>
|
||||
<td valign=top >
|
||||
Optional. Set to <tt>true</tt> if the MM7/SOAP tags should have the
|
||||
<tt>mm7:</tt> prefix. Some MMC/VAS GW implementations do not seem to
|
||||
like this, so you can set this to false to see what mileage you get.
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
|
||||
<tr>
|
||||
<td valign=top >
|
||||
|
@ -2136,6 +2151,20 @@ Supported configuration parameters are:
|
|||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td valign=top >
|
||||
<tt>use-mm7-soap-namespace-prefix</tt>
|
||||
</td>
|
||||
<td valign=top >
|
||||
Boolean
|
||||
</td>
|
||||
<td valign=top >
|
||||
Optional. Set to <tt>true</tt> if the MM7/SOAP tags should have the
|
||||
<tt>mm7:</tt> prefix. Some MMC/VAS GW implementations do not seem to
|
||||
like this, so you can set this to false to see what mileage you get.
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td valign=top >
|
||||
<tt>mmsc-url</tt>
|
||||
|
|
|
@ -104,6 +104,7 @@ MULTI_GROUP(mms-vasp,
|
|||
OCTSTR(type)
|
||||
OCTSTR(mm7-version)
|
||||
OCTSTR(mm7-soap-xmlns)
|
||||
OCTSTR(use-mm7-soap-namespace-prefix)
|
||||
OCTSTR(short-code)
|
||||
OCTSTR(vasp-username)
|
||||
OCTSTR(vasp-password)
|
||||
|
@ -137,6 +138,7 @@ MULTI_GROUP(mmsc,
|
|||
OCTSTR(type)
|
||||
OCTSTR(mm7-version)
|
||||
OCTSTR(mm7-soap-xmlns)
|
||||
OCTSTR(use-mm7-soap-namespace-prefix)
|
||||
OCTSTR(mm7-mt-filter-params)
|
||||
OCTSTR(reroute)
|
||||
OCTSTR(reroute-mmsc-id)
|
||||
|
|
|
@ -367,7 +367,7 @@ MSoapMsg_t *mm7_parse_soap(List *headers, Octstr *body)
|
|||
return smsg;
|
||||
}
|
||||
|
||||
static int append_address(Octstr *p, Octstr *addr_spec)
|
||||
static int append_address(Octstr *p, Octstr *addr_spec, char *prefix)
|
||||
{
|
||||
Octstr *v = addr_spec;
|
||||
char *y;
|
||||
|
@ -379,15 +379,15 @@ static int append_address(Octstr *p, Octstr *addr_spec)
|
|||
j = octstr_case_search(v, octstr_imm("/TYPE=PLMN"),0);
|
||||
if (j >= 0) {
|
||||
Octstr *z = octstr_copy(v, 2, j-2); /* skip the initial char that is only for info purposes. */
|
||||
octstr_format_append(p, "<mm7:Number%s>%S</mm7:Number>\n", y, z);
|
||||
octstr_format_append(p, "<%sNumber%s>%S</%sNumber>\n", prefix, y, z, prefix);
|
||||
octstr_destroy(z);
|
||||
} else
|
||||
octstr_format_append(p, "<mm7:RFC2822Address%s>%s</mm7:RFC2822Address>\n",
|
||||
y, octstr_get_cstr(v) + 2); /* as above... */
|
||||
octstr_format_append(p, "<%sRFC2822Address%s>%s</%sRFC2822Address>\n",
|
||||
prefix, y, octstr_get_cstr(v) + 2, prefix); /* as above... */
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void output_rcpt(char *hdr, List *hdrs, Octstr *p)
|
||||
static void output_rcpt(char *hdr, List *hdrs, Octstr *p, char *prefix)
|
||||
{
|
||||
List *l = http_header_find_all(hdrs, hdr);
|
||||
char x[32];
|
||||
|
@ -399,16 +399,16 @@ static void output_rcpt(char *hdr, List *hdrs, Octstr *p)
|
|||
|
||||
if (octstr_str_compare(h, x) != 0) {
|
||||
if (x[0])
|
||||
octstr_format_append(p, "</mm7:%s>\n", x);
|
||||
octstr_format_append(p, "</%s%s>\n", prefix, x);
|
||||
strncpy(x, octstr_get_cstr(h), sizeof x);
|
||||
octstr_format_append(p, "<mm7:%S>\n", h);
|
||||
octstr_format_append(p, "<%s%S>\n", prefix, h);
|
||||
}
|
||||
octstr_destroy(h);
|
||||
append_address(p, v); /* put the address in */
|
||||
append_address(p, v, prefix); /* put the address in */
|
||||
octstr_destroy(v);
|
||||
}
|
||||
if (x[0]) /* close it off. */
|
||||
octstr_format_append(p, "</mm7:%s>\n", x);
|
||||
octstr_format_append(p, "</%s%s>\n", prefix, x);
|
||||
|
||||
http_destroy_headers(l);
|
||||
}
|
||||
|
@ -431,7 +431,8 @@ static Octstr *headers_to_soapxml(List *hdrs, MM7Version_t *ver)
|
|||
Octstr *p, *q, *r, *fault, *mtype;
|
||||
int i, n, mtag;
|
||||
time_t t;
|
||||
|
||||
char *prefix = ver->use_mm7_namespace ? "mm7:" : "";
|
||||
char *xml_nsp = ver->use_mm7_namespace ? ":mm7" : "";
|
||||
MM7Version_t min_ver = {5,1,0}; /* minimum version we deal with. */
|
||||
|
||||
octstr_append_cstr(s,
|
||||
|
@ -439,8 +440,11 @@ static Octstr *headers_to_soapxml(List *hdrs, MM7Version_t *ver)
|
|||
"<" SOAP_ENV ":Header>\n");
|
||||
p = http_header_value(hdrs, octstr_imm("TransactionID"));
|
||||
|
||||
octstr_format_append(s, "<mm7:TransactionID xmlns:mm7=\"%s\" " SOAP_ENV ":mustUnderstand=\"1\">%S</mm7:TransactionID>\n",
|
||||
octstr_get_cstr(xmlns), p ? p : octstr_imm("none"));
|
||||
octstr_format_append(s, "<%sTransactionID xmlns%s=\"%s\" " SOAP_ENV
|
||||
":mustUnderstand=\"1\">%S</%sTransactionID>\n",
|
||||
prefix, xml_nsp,
|
||||
octstr_get_cstr(xmlns), p ? p : octstr_imm("none"),
|
||||
prefix);
|
||||
if (p)
|
||||
octstr_destroy(p);
|
||||
|
||||
|
@ -468,41 +472,41 @@ static Octstr *headers_to_soapxml(List *hdrs, MM7Version_t *ver)
|
|||
mtype = http_header_value(hdrs, octstr_imm("MessageType"));
|
||||
mtag = mms_string_to_mm7tag(mtype);
|
||||
|
||||
octstr_format_append(s, "<mm7:%S xmlns:mm7=\"%s\">\n", mtype, octstr_get_cstr(xmlns));
|
||||
octstr_format_append(s, "<%s%S xmlns%s=\"%s\">\n", prefix, mtype, xml_nsp, octstr_get_cstr(xmlns));
|
||||
|
||||
/* Output the details. */
|
||||
if ((p = http_header_value(hdrs, octstr_imm("MM7Version"))) != NULL) {
|
||||
octstr_format_append(s, "<mm7:MM7Version>%S</mm7:MM7Version>\n", p);
|
||||
octstr_format_append(s, "<%sMM7Version>%S</%sMM7Version>\n", prefix, p, prefix);
|
||||
octstr_destroy(p);
|
||||
} else
|
||||
octstr_format_append(s, "<mm7:MM7Version>%d.%d.%d</mm7:MM7Version>\n",
|
||||
ver->major, ver->minor1, ver->minor2);
|
||||
octstr_format_append(s, "<%sMM7Version>%d.%d.%d</%sMM7Version>\n",
|
||||
prefix, ver->major, ver->minor1, ver->minor2, prefix);
|
||||
|
||||
p = http_header_value(hdrs, octstr_imm("VASPID"));
|
||||
q = http_header_value(hdrs, octstr_imm("VASID"));
|
||||
r = http_header_value(hdrs, octstr_imm("SenderAddress"));
|
||||
if (p || q || r) {
|
||||
|
||||
octstr_append_cstr(s, "<mm7:SenderIdentification>\n");
|
||||
octstr_format_append(s, "<%sSenderIdentification>\n", prefix);
|
||||
if (p)
|
||||
octstr_format_append(s, "<mm7:VASPID>%S</mm7:VASPID>\n", p);
|
||||
octstr_format_append(s, "<%sVASPID>%S</%sVASPID>\n", prefix, p, prefix);
|
||||
|
||||
if (q)
|
||||
octstr_format_append(s, "<mm7:VASID>%S</mm7:VASID>\n", q);
|
||||
octstr_format_append(s, "<%sVASID>%S</%sVASID>\n", prefix, q, prefix);
|
||||
|
||||
if (r) {
|
||||
Octstr *xx = octstr_create("");
|
||||
if (ver_compare(ver,&min_ver) > 0)
|
||||
append_address(xx, r);
|
||||
append_address(xx, r, prefix);
|
||||
else if (octstr_get_char(r, 0) != '-') /* not display only. */
|
||||
octstr_format_append(xx, "%s", octstr_get_cstr(r) + 1);
|
||||
|
||||
if (octstr_len(xx) > 0)
|
||||
octstr_format_append(s, "<mm7:SenderAddress>%S</mm7:SenderAddress>\n", xx);
|
||||
octstr_format_append(s, "<%sSenderAddress>%S</%sSenderAddress>\n", prefix, xx, prefix);
|
||||
octstr_destroy(xx);
|
||||
}
|
||||
|
||||
octstr_append_cstr(s, "</mm7:SenderIdentification>\n");
|
||||
octstr_format_append(s, "</%sSenderIdentification>\n", prefix);
|
||||
octstr_destroy(p);
|
||||
octstr_destroy(q);
|
||||
octstr_destroy(r);
|
||||
|
@ -511,15 +515,15 @@ static Octstr *headers_to_soapxml(List *hdrs, MM7Version_t *ver)
|
|||
p = octstr_create("");
|
||||
if (mtag == MM7_TAG_SubmitReq ||
|
||||
mtag == MM7_TAG_DeliverReq) { /* Multiple recipients,... */
|
||||
output_rcpt("To", hdrs, p);
|
||||
output_rcpt("Cc", hdrs, p);
|
||||
output_rcpt("Bcc", hdrs, p);
|
||||
output_rcpt("To", hdrs, p, prefix);
|
||||
output_rcpt("Cc", hdrs, p, prefix);
|
||||
output_rcpt("Bcc", hdrs, p, prefix);
|
||||
|
||||
if (octstr_len(p) > 0)
|
||||
octstr_format_append(s, "<mm7:Recipients>\n%S</mm7:Recipients>\n", p);
|
||||
octstr_format_append(s, "<%sRecipients>\n%S</%sRecipients>\n", prefix, p, prefix);
|
||||
} else if ((q = http_header_value(hdrs, octstr_imm("To"))) != NULL) {
|
||||
append_address(p, q);
|
||||
octstr_format_append(s, "<mm7:Recipient>\n%S</mm7:Recipient>\n", p);
|
||||
append_address(p, q, prefix);
|
||||
octstr_format_append(s, "<%sRecipient>\n%S</%sRecipient>\n", prefix, p, prefix);
|
||||
octstr_destroy(q);
|
||||
}
|
||||
octstr_destroy(p);
|
||||
|
@ -561,12 +565,12 @@ static Octstr *headers_to_soapxml(List *hdrs, MM7Version_t *ver)
|
|||
case MM7_TAG_Sender:
|
||||
p = octstr_create("");
|
||||
if (ver_compare(ver,&min_ver) > 0)
|
||||
append_address(p, v);
|
||||
append_address(p, v, prefix);
|
||||
else if (octstr_get_char(v, 0) != '-') /* not display only. */
|
||||
octstr_format_append(p, "%s", octstr_get_cstr(v) + 1);
|
||||
|
||||
if (octstr_len(p) > 0)
|
||||
octstr_format_append(s, "<mm7:Sender>%S</mm7:Sender>\n", p);
|
||||
octstr_format_append(s, "<%sSender>%S</%sSender>\n", prefix, p, prefix);
|
||||
octstr_destroy(p);
|
||||
skip = 1;
|
||||
break;
|
||||
|
@ -575,7 +579,7 @@ static Octstr *headers_to_soapxml(List *hdrs, MM7Version_t *ver)
|
|||
p = octstr_format(" allowAdaptations=\"%S\"", p);
|
||||
else
|
||||
p = octstr_imm("");
|
||||
octstr_format_append(s, "<mm7:Content href=\"%S\"%S/>\n", v,p);
|
||||
octstr_format_append(s, "<%sContent href=\"%S\"%S/>\n", prefix, v,p);
|
||||
octstr_destroy(p);
|
||||
skip = 1;
|
||||
break;
|
||||
|
@ -583,7 +587,7 @@ static Octstr *headers_to_soapxml(List *hdrs, MM7Version_t *ver)
|
|||
p = http_header_value(hdrs, octstr_imm("replyChargingSize"));
|
||||
q = http_header_value(hdrs, octstr_imm("replyDeadline"));
|
||||
|
||||
octstr_append_cstr(s, "<mm7:ReplyCharging");
|
||||
octstr_format_append(s, "<%sReplyCharging", prefix);
|
||||
if (p) {
|
||||
octstr_format_append(s, " replyChargingSize=\"%S\"", p);
|
||||
octstr_destroy(p);
|
||||
|
@ -608,22 +612,22 @@ static Octstr *headers_to_soapxml(List *hdrs, MM7Version_t *ver)
|
|||
q = http_header_value(hdrs, octstr_imm("StatusText"));
|
||||
|
||||
|
||||
octstr_append_cstr(s, "<mm7:Status>\n");
|
||||
octstr_format_append(s, "<%sStatus>\n", prefix);
|
||||
if (p) {
|
||||
octstr_format_append(s, "<mm7:StatusCode>%S</mm7:StatusCode>\n", p);
|
||||
octstr_format_append(s, "<%sStatusCode>%S</%sStatusCode>\n", prefix, p, prefix);
|
||||
octstr_destroy(p);
|
||||
}
|
||||
if (q) {
|
||||
octstr_format_append(s, "<mm7:StatusText>%S</mm7:StatusText>\n", q);
|
||||
octstr_format_append(s, "<%sStatusText>%S</%sStatusText>\n", prefix, q, prefix);
|
||||
octstr_destroy(q);
|
||||
}
|
||||
q = http_header_value(hdrs, octstr_imm("Details"));
|
||||
if (q) {
|
||||
octstr_format_append(s, "<mm7:Details>%S</mm7:Details>\n", q);
|
||||
octstr_format_append(s, "<%sDetails>%S</%sDetails>\n", prefix, q, prefix);
|
||||
octstr_destroy(q);
|
||||
}
|
||||
|
||||
octstr_append_cstr(s, "</mm7:Status>\n");
|
||||
octstr_format_append(s, "</%sStatus>\n", prefix);
|
||||
skip = 1;
|
||||
break;
|
||||
case MM7_TAG_UACapabilities:
|
||||
|
@ -634,8 +638,8 @@ static Octstr *headers_to_soapxml(List *hdrs, MM7Version_t *ver)
|
|||
} else
|
||||
t = time(NULL);
|
||||
p = date_create_iso(t);
|
||||
octstr_format_append(s, "<mm7:%S TimeStamp=\"%S\" UAProf=\"%S\"/>\n",
|
||||
h, p, v);
|
||||
octstr_format_append(s, "<%s%S TimeStamp=\"%S\" UAProf=\"%S\"/>\n",
|
||||
prefix, h, p, v);
|
||||
octstr_destroy(p);
|
||||
skip = 1;
|
||||
break;
|
||||
|
@ -644,12 +648,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);
|
||||
octstr_format_append(s, "<%s%S>%S</%s%S>\n", prefix, h, v, prefix, h);
|
||||
|
||||
octstr_destroy(h);
|
||||
octstr_destroy(v);
|
||||
}
|
||||
octstr_format_append(s, "</mm7:%S>\n", mtype);
|
||||
octstr_format_append(s, "</%s%S>\n", prefix, mtype);
|
||||
octstr_destroy(mtype);
|
||||
if (fault) {
|
||||
octstr_append_cstr(s, "</detail>\n");
|
||||
|
|
|
@ -32,7 +32,8 @@ typedef struct MSoapMsg_t MSoapMsg_t;
|
|||
|
||||
typedef struct MM7Version_t {
|
||||
int major, minor1, minor2; /* e.g. 5.1.0. */
|
||||
char xmlns[128];
|
||||
int use_mm7_namespace; /* whether to put in the namespace prefix. */
|
||||
char xmlns[128];
|
||||
} MM7Version_t;
|
||||
|
||||
/* Parse SOAP message given http headers and body. */
|
||||
|
|
|
@ -1728,6 +1728,33 @@ MmsMsg *mms_sendconf(char *errstr, char *msgid, char *transid, int isforward, in
|
|||
return m;
|
||||
}
|
||||
|
||||
MmsMsg *mms_notifyresp_ind(char *transid, int menc, char *status, int report_allowed)
|
||||
{
|
||||
MmsMsg *m = gw_malloc(sizeof *m);
|
||||
|
||||
|
||||
m->ismultipart = 0;
|
||||
m->msgId = NULL;
|
||||
m->body.s = NULL;
|
||||
|
||||
m->headers = http_create_empty_headers();
|
||||
|
||||
m->message_type = MMS_MSGTYPE_NOTIFYRESP;
|
||||
http_header_add(m->headers, "X-Mms-Message-Type", "m-notifyresp-ind");
|
||||
http_header_add(m->headers, "X-Mms-Transaction-ID", transid);
|
||||
|
||||
if (menc >= MS_1_2)
|
||||
http_header_add(m->headers, "X-Mms-MMS-Version", "1.2");
|
||||
else
|
||||
http_header_add(m->headers, "X-Mms-MMS-Version", MMS_DEFAULT_VERSION);
|
||||
|
||||
|
||||
http_header_add(m->headers, "X-Mms-Status", status);
|
||||
http_header_add(m->headers, "X-Mms-Report-Allowed", report_allowed ? "Yes" : "No");
|
||||
|
||||
return m;
|
||||
}
|
||||
|
||||
int mms_make_sendreq(MmsMsg *retrieveconf)
|
||||
{
|
||||
|
||||
|
|
|
@ -69,10 +69,12 @@ extern MmsMsg *mms_notification(MmsMsg *msg, unsigned int msize,
|
|||
Octstr *url,
|
||||
Octstr *transactionid, time_t expiryt, int optimizesize);
|
||||
|
||||
MmsMsg *mms_notifyresp_ind(char *transid, int menc, char *status, int report_allowed);
|
||||
MmsMsg *mms_retrieveconf(MmsMsg *msg, Octstr *transactionid, char *err, char *errtxt, Octstr *opt_from, int menc);
|
||||
int mms_remove_headers(MmsMsg *m, char *name);
|
||||
MmsMsg *mms_sendconf(char *errstr, char *msgid, char *transid, int isforward, int menc);
|
||||
|
||||
|
||||
Octstr *mms_get_header_value(MmsMsg *msg, Octstr *header);
|
||||
|
||||
/* Returns a list of values for the header given. */
|
||||
|
|
|
@ -29,6 +29,7 @@ static void quit_now(int notused)
|
|||
MmscGrp *mmc;
|
||||
rstop = 1;
|
||||
|
||||
info(0, "shutdown in progress...");
|
||||
/* Close all MMSC http ports, kill all MMSC threads, kill sendmms port... */
|
||||
if (sendmms_port.port > 0)
|
||||
http_close_port(sendmms_port.port);
|
||||
|
|
|
@ -247,6 +247,9 @@ int mms_load_mmsbox_settings(mCfg *cfg, gwthread_func_t *mmsc_handler_func)
|
|||
} else
|
||||
m->ver.xmlns[0] = 0;
|
||||
|
||||
m->ver.use_mm7_namespace = 1;
|
||||
mms_cfg_get_bool(x, octstr_imm("use-mm7-soap-namespace-prefix"), &m->ver.use_mm7_namespace);
|
||||
|
||||
octstr_destroy(xver);
|
||||
octstr_destroy(type);
|
||||
|
||||
|
|
|
@ -307,6 +307,9 @@ MmscSettings *mms_load_mmsc_settings(mCfg *cfg, List **proxyrelays)
|
|||
} else
|
||||
mv->ver.xmlns[0] = 0;
|
||||
|
||||
mv->ver.use_mm7_namespace = 1;
|
||||
mms_cfg_get_bool(grp, octstr_imm("use-mm7-soap-namespace-prefix"), &mv->ver.use_mm7_namespace);
|
||||
|
||||
/* Set the handler vasp accounts. */
|
||||
if (mms_cfg_get_bool(grp, octstr_imm("mms-to-email-handler"), &ibool) == 0 &&
|
||||
ibool) {
|
||||
|
|
Loading…
Reference in New Issue