Hi,

I am writing this in case someone else is looking for the solution to
this problem.
Nikos reckons as well that this is a bug. He posted/forward this to
the devel mailinglist.

I reckon it won't be too difficult to fix this.  I have also three
workarounds to this bug.

1) One can generate an invalid XML where  the & character is not
escaped. This can be done through a string substitution after the XML
is generated.  Personally I don't like this solution.

2) One can use a valid XML where & character is escaped correctly. The
result is that when Kannel is going to query the callback url
(dlr-url)  through a HTTP/GET the url will look like
http://example.com/call-back?param_1=xxxx&param2=yyyyy&param3=zzzzz.
As a result on the callback side instead of receiving param1=xxxx
param2=yyyy and param3=zzzz it will receive something like
parm1=xxxxx  'amp;parm2'=yyyyy  'amp;param3' = zzzzz .
In this case one has  to change the call back to assign   param2 =  'amp;param2'
and param3 = 'amp;param3' .
Say, in php the code would look something this
$param1 = $_GET['param1'] ;
$param2 = $_GET['amp;param2']  ;
$param3 = $_GET['amp;param3'] ;


3) One can decide to  pass to the HTTP/GET only one parameter  which
contains the combination of any other parameters separated by an
opportune character .
Say http://example.com/call-back?params=xxxx%2Cyyyyy%2Czzzzz
where I choose as separator a comma ','  uri escaped in  %2C.

Oscar


On Sun, Feb 21, 2010 at 2:26 AM, Nikos Balkanas <nbalka...@gmail.com> wrote:
> OK. Looks like a bug. I'll take a look at it when I get some time. In the
> meantime can you live with the illegal XML?
>
> Nikos
> ----- Original Message ----- From: "oscar cassetti"
> <oscar.getstr...@gmail.com>
> To: "Nikos Balkanas" <n...@amdtelecom.net>
> Cc: <users@kannel.org>
> Sent: Saturday, February 20, 2010 2:18 PM
> Subject: Re: XML Post and dlr-url
>
>
> 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 &amp; 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