But that's what I did in the second test. I didn't URL-escape
anything, I just let the Perl XML writer escape & with & which is
the right thing to do.
However when kannel parses the <dlr-url>  it doesn't un-escape the &amp; to &.
As a result the query URL used by kannel looks like this one below


2010-02-19 21:11:44 [1381] [9] DEBUG: Parsing URL
`http://localhost/dump_me.php?send_history_id=13853220&amp;to_number=000000000000&amp;type=8':

which produces on my entry point this

 GET =
 Array
(
   [send_history_id] => 13853220
   [amp;to_number] => 000000000000
   [amp;type] => 8
)

Note the amp;to_number for example. If the dlr-url was escaped
properly this one should have just been to_number .

Finally in third and last test I produced an illegal XML by not
escaping the & and it worked:


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':

and on my entry point
GET =
 Array
(
   [send_history_id] => 13853221
   [to_number] => 000000000000
   [type] => 8
)


The issue is that I need to use an invalid XML to produced the right
result. The problem is related to non un-escaping the <dlr-url>
element.

Oscar

On Sat, Feb 20, 2010 at 2:09 AM, Nikos Balkanas <n...@amdtelecom.net> wrote:
> So, in XML POST you shouldn't urlencode anything. And it will work. What's
> your issue then?
>
> Nikos
> ----- Original Message ----- From: "oscar cassetti"
> <oscar.getstr...@gmail.com>
> To: <users@kannel.org>
> 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 &amp;  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&amp;to_number=000000000000&amp;type=%d>
>
> However when kannel parses the URL the &amp; 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&amp;to_number=000000000000&amp;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 &amp; 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 <n...@amdtelecom.net> 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
>>
>
>

Reply via email to