Michael Zervakis schrieb:
Dear all,
During testing of cvs-20081021 meta-data branch we found two issues:
1. The meta_data_pack() always appends an "&" at the end of the
resulting string. As a result sms.meta_data always contains an "&" at
the end, which produces queries like the following:
DEBUG: Query:
sms_source=%2B999999999&sms_dest=9999&smsc-id=smsc&sms_command=test&meta_data=%3Fsmpp%3Fmessage_reference%3D192%26
I don't see this as a issue. Why it should be a problem?
2. When using post-xml sms.meta_data is not urlencoded resulting in an
unreadable XML file like this <meta-data>?smpp?tag=1&</meta-data>.
You are right, but your fix is wrong because this can happens to any
value in xml. See attached patch that should fix this issue.
Regards,
Mike Zervakis
Index: gw/smsbox.c
===================================================================
RCS file: /home/cvs/gateway/gw/smsbox.c,v
retrieving revision 1.279
diff -a -u -p -r1.279 smsbox.c
--- gw/smsbox.c 7 Oct 2008 10:55:27 -0000 1.279
+++ gw/smsbox.c 20 Nov 2008 17:36:41 -0000
@@ -1474,9 +1474,15 @@ static int obey_request(Octstr **result,
/* XXX The first two chars are beeing eaten somewhere and
* only sometimes - something must be ungry */
-#define OCTSTR_APPEND_XML(xml, tag, text) \
- octstr_format_append(xml, " \t\t<" tag ">%s</" tag ">\n", \
- (text?octstr_get_cstr(text):""));
+#define OCTSTR_APPEND_XML(xml, tag, text) \
+ do { \
+ xmlDocPtr tmp_doc = xmlNewDoc(BAD_CAST "1.0"); \
+ xmlChar *xml_escaped = NULL; \
+ if (text != NULL) xml_escaped =
xmlEncodeEntitiesReentrant(tmp_doc, BAD_CAST octstr_get_cstr(text)); \
+ octstr_format_append(xml, " \t\t<" tag ">%s</" tag ">\n",
(xml_escaped == NULL ? (char*)xml_escaped : "")); \
+ if (xml_escaped != NULL) xmlFree(xml_escaped); \
+ xmlFreeDoc(tmp_doc); \
+ } while(0)
#define OCTSTR_APPEND_XML_NUMBER(xml, tag, value) \
octstr_format_append(xml, " \t\t<" tag ">%ld</" tag ">\n", (long)
value);
@@ -1569,7 +1575,7 @@ static int obey_request(Octstr **result,
if(msg->sms.compress != SMS_PARAM_UNDEFINED)
OCTSTR_APPEND_XML_NUMBER(tmp, "compress", msg->sms.compress);
if(octstr_len(tmp))
- OCTSTR_APPEND_XML(xml, "dcs", tmp)
+ OCTSTR_APPEND_XML(xml, "dcs", tmp);
octstr_destroy(tmp);
/* deferred (timing/delay) */
@@ -1577,7 +1583,7 @@ static int obey_request(Octstr **result,
if(msg->sms.deferred != SMS_PARAM_UNDEFINED)
OCTSTR_APPEND_XML_NUMBER(tmp, "delay", msg->sms.deferred);
if(octstr_len(tmp))
- OCTSTR_APPEND_XML(xml, "timing", tmp)
+ OCTSTR_APPEND_XML(xml, "timing", tmp);
octstr_destroy(tmp);
/* validity (vp/delay) */
@@ -1585,7 +1591,7 @@ static int obey_request(Octstr **result,
if(msg->sms.validity != SMS_PARAM_UNDEFINED)
OCTSTR_APPEND_XML_NUMBER(tmp, "delay", msg->sms.validity);
if(octstr_len(tmp))
- OCTSTR_APPEND_XML(xml, "vp", tmp)
+ OCTSTR_APPEND_XML(xml, "vp", tmp);
octstr_destroy(tmp);
/* time (at) */