So, in XML POST you shouldn't urlencode anything. And it will work. What's
your issue then?
Nikos
----- Original Message -----
From: "oscar cassetti" <[email protected]>
To: <[email protected]>
Sent: Saturday, February 20, 2010 12:36 AM
Subject: Re: XML Post and dlr-url
Hi,
I tried few things and I believe I found a bug in the way the
<dlr-url> is parsed.
(1)
First of all I tried to URI-escape the entire dlr-url and it didn't work.
Basically I passed this:
<dlr-url>http%3A%2F%2Flocalhost%2Fdump_me.php%3Fsend_history_id%3D13853219%26to_number%3D000000000000%26t
ype%3D%25d</dlr-url>
And the same appears in the logs
2010-02-19 21:03:32 [1318] [3] DEBUG: XMLParsing: tag <dlr-url> value
<http%3A%2F%2Flocalhost%2Fdump_me.php%3Fsend_history_id
When Kannel is going to parse the url it rejects it:
2010-02-19 21:03:32 [1318] [3] DEBUG: Status: 400 Answer: <DLR-URL
field misformed, rejected>
In this case the message was not sent.
(2)
In a second test I didn't escape URI-escape. I let the Perl XML Writer
to escape the content of <dlr-url> .
In this case & is substituted by & This can also be seen in smsbox
logs.
2010-02-19 21:11:43 [1381] [3] DEBUG: XMLParsing: tag <dlr-url> value
<http://localhost/dump_me.php?send_history_id=13853220&to_number=000000000000&type=%d>
However when kannel parses the URL the & is not changed back to & .
So the result is the following URL is used.
2010-02-19 21:11:44 [1381] [9] DEBUG: Parsing URL
`http://localhost/dump_me.php?send_history_id=13853220&to_number=000000000000&type=8':
I wrote a simple script to catch the content of the GET when kannel
query the <dlr-url> and the result is
GET =
Array
(
[send_history_id] => 13853220
[amp;to_number] => 000000000000
[amp;type] => 8
)
(3)
Finally I tried to overwrite the <dlr-ulr> so I substituted & with &
so the request looks like this one below:
<?xml version="1.0" encoding="UTF-8"?>
<message><submit><da><number>000000000000</number></da><oa><number>000000000000</number></oa><ud>%E2%82%ACee</ud><statusrequest><dlr-mask>31</dlr-mask><dlr-url>http://localhost/dump_me.php?send_history_id=13853221&to_number=000000000000&type=%d</dlr-url></statusrequest><!--
request from application to Kannel
--><from><username>xxxxxxx</username><password>xxxxxxx</password></from></submit></message>
Note that this XML is technically wrong. However this produces the
right result as ti can be seen from the logs:
2010-02-19 21:28:17 [1381] [3] DEBUG: XMLParsing: tag <dlr-url> value
<http://localhost/dump_me.php?send_history_id=13853221&to_number=000000000000&type=%d>
2010-02-19 21:28:18 [1381] [9] DEBUG: Parsing URL
`http://localhost/dump_me.php?send_history_id=13853221&to_number=3538706323
46&type=8':
2010-02-19 21:28:18 [1381] [9] DEBUG: Scheme: http://
2010-02-19 21:28:18 [1381] [9] DEBUG: Host: localhost
2010-02-19 21:28:18 [1381] [9] DEBUG: Port: 80
2010-02-19 21:28:18 [1381] [9] DEBUG: Username: (null)
2010-02-19 21:28:18 [1381] [9] DEBUG: Password: (null)
2010-02-19 21:28:18 [1381] [9] DEBUG: Path: /dump_me.php
2010-02-19 21:28:18 [1381] [9] DEBUG: Query:
send_history_id=13853221&to_number=353870632346&type=8
2010-02-19 21:28:18 [1381] [9] DEBUG: Fragment: (null)
And also from my entry point I was able to get the three parameters
correctly
GET =
Array
(
[send_history_id] => 13853221
[to_number] => 000000000000
[type] => 8
)
In summary I believe that an incorrect XML produces the right result.
The problem looks to me e that the <dlr-ulr> is not escaped correctly.
Here some details
Kannel smsbox version 1.4.3
xml2-config --version 2.6.32
Any suggestion?
Thank you,
Oscar
On Thu, Feb 18, 2010 at 3:09 PM, Nikos Balkanas <[email protected]> wrote:
Well, urlencoding is not right, still. In your URL ytou need to encode /,
&
and ?. Don't need to encode = or 8. But I think you want to encode
&type=%d.
That should be %26type=%%d
So is this working or not? What do you mean by 3 parmaters, not 2? This is
the dlr-url you send in your XML.
BR,
Nikos