Hi,
yep, sometimes it's better to test patch before sending out :)
Attached is the patch for head...
Michael Zervakis schrieb:
Alex,
>Michael Zervakis schrieb:
>> You're right. Thanks for the patch.
>Michael, can you confirm that the issue is solved by Alex's patch.
(I'm almost certain it is, but I'd simply hear a "yeah, that does it"
from your side).
>So we can commit it to the meta-data branch.
>Stipe
I applied your smsbox.c patch and i got this:
2008-11-21 10:14:03 [454] [4] DEBUG: XMLBuild: XML: <<?xml version="1.0"
encoding="ISO-8859-1"?>
<message cid="1">
<submit>
<oa></oa>
<da></da>
<pid>0</pid>
<dcs></dcs>
<at></at>
<from></from>
<to></to>
<meta-data></meta-data>
</submit>
</message>
>
Regards,
Mike
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 21 Nov 2008 10:09:40 -0000
@@ -1474,12 +1474,21 @@ 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) \
+ octstr_format_append(xml, " \t\t<" tag ">%s</" tag ">\n",
(text?octstr_get_cstr(text):""))
+
+#define OCTSTR_APPEND_XML_OCTSTR(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);
+ octstr_format_append(xml, " \t\t<" tag ">%ld</" tag ">\n", (long)
value)
request_headers = http_create_empty_headers();
http_header_add(request_headers, "User-Agent", GW_NAME "/" GW_VERSION);
@@ -1522,14 +1531,14 @@ static int obey_request(Octstr **result,
/* oa */
if(urltrans_send_sender(trans)) {
tmp = octstr_create("");
- OCTSTR_APPEND_XML(tmp, "number", msg->sms.receiver);
+ OCTSTR_APPEND_XML_OCTSTR(tmp, "number", msg->sms.receiver);
OCTSTR_APPEND_XML(xml, "oa", tmp);
octstr_destroy(tmp);
}
/* da */
tmp = octstr_create("");
- OCTSTR_APPEND_XML(tmp, "number", msg->sms.sender);
+ OCTSTR_APPEND_XML_OCTSTR(tmp, "number", msg->sms.sender);
OCTSTR_APPEND_XML(xml, "da", tmp);
octstr_destroy(tmp);
@@ -1538,15 +1547,15 @@ static int obey_request(Octstr **result,
Octstr *t;
t = octstr_duplicate(msg->sms.udhdata);
octstr_url_encode(t);
- OCTSTR_APPEND_XML(xml, "udh", t);
+ OCTSTR_APPEND_XML_OCTSTR(xml, "udh", t);
octstr_destroy(t);
}
/* ud */
if(octstr_len(msg->sms.msgdata)) {
- octstr_url_encode(msg->sms.msgdata);
- OCTSTR_APPEND_XML(xml, "ud", msg->sms.msgdata);
- }
+ octstr_url_encode(msg->sms.msgdata);
+ OCTSTR_APPEND_XML_OCTSTR(xml, "ud", msg->sms.msgdata);
+ }
/* pid */
if(msg->sms.pid != SMS_PARAM_UNDEFINED)
@@ -1569,7 +1578,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 +1586,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 +1594,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) */
@@ -1602,18 +1611,18 @@ static int obey_request(Octstr **result,
if (octstr_len(msg->sms.smsc_id)) {
tmp = octstr_create("");
if(octstr_len(msg->sms.smsc_id))
- OCTSTR_APPEND_XML(tmp, "account", msg->sms.smsc_id);
+ OCTSTR_APPEND_XML_OCTSTR(tmp, "account", msg->sms.smsc_id);
if(octstr_len(tmp))
- OCTSTR_APPEND_XML(xml, "from", tmp);
+ OCTSTR_APPEND_XML(xml, "from", tmp);
O_DESTROY(tmp);
}
/* service = to/service */
if(octstr_len(msg->sms.service)) {
tmp = octstr_create("");
- OCTSTR_APPEND_XML(tmp, "service", msg->sms.service);
+ OCTSTR_APPEND_XML_OCTSTR(tmp, "service", msg->sms.service);
if(octstr_len(tmp))
- OCTSTR_APPEND_XML(xml, "to", tmp);
+ OCTSTR_APPEND_XML(xml, "to", tmp);
O_DESTROY(tmp);
}