Any development on this?

On Mon, Feb 22, 2010 at 1:32 PM, Nikos Balkanas <n...@amdtelecom.net> wrote:
> Well, this is just it. A workaround. Since solution is simple &
> straightforward, I think the best thing is to make kannel XML fully
> compatible.
>
> BR,
> Nikos
>
> ----- Original Message -----
> From: Konstantin Vayner
> To: oscar cassetti ; Nikos Balkanas
> Cc: devel@kannel.org
> Sent: Monday, February 22, 2010 2:55 PM
> Subject: Re: XML Post and dlr-url
> Hi guys,
> Another possible workaround may be using PHP configuration (in case you're
> using php as a server side scripting).
> Take a look at this php.ini option:
> http://php.net/manual/en/ini.core.php#ini.arg-separator.input
> testcase:
> pon...@localhost:~/www$ cat .htaccess
> php_value arg_separator.input "&;"
> pon...@localhost:~/www$ cat dump_request.php
> <?php var_dump($_REQUEST); ?>
> pon...@localhost:~/www$ lynx -source
> 'http://localhost/~poncha/dump_request.php?foo=bar&amp;bar=baz'
> array(3) {
>   ["foo"]=>
>   string(3) "bar"
>   ["amp"]=>
>   string(0) ""
>   ["bar"]=>
>   string(3) "baz"
> }
> Regards,
>   Konstantin
> On Mon, Feb 22, 2010 at 8:07 AM, Nikos Balkanas <n...@amdtelecom.net> wrote:
>>
>> That was my suggestion, too. But verify with debugger to make sure.
>>
>> Do not use the same approach for <udh>. There is no need and you should
>> not require POST XML to be urlencoded. Just scan the value in dlr-url for
>> &amp; and replace with '&'.
>>
>> BR,
>> Nikos
>> ----- Original Message ----- From: "oscar cassetti"
>> <oscar.getstr...@gmail.com>
>> To: "Nikos Balkanas" <nbalka...@gmail.com>
>> Cc: <devel@kannel.org>
>> Sent: Monday, February 22, 2010 1:48 AM
>> Subject: Re: XML Post and dlr-url
>>
>>
>> Hi,
>>
>> I believe the problem is in the functions static void
>> get_x_kannel_from_xml in smsbox.c
>> around the line 804 (source code kannel 1.4.3)
>>
>> get_tag(tmp, octstr_imm("dlr-url"), dlr_url, 0, 0);
>> O_DESTROY(tmp);
>>
>> I think that that the same strategy adopted for the tag <ud> could be
>> used also for the dlr-url tag assuming that this will be uri-encoded.
>>
>>
>> Oscar
>>
>>
>>
>> On Sun, Feb 21, 2010 at 6:35 PM, Nikos Balkanas <nbalka...@gmail.com>
>> wrote:
>>>
>>> Sure. Start by checking the get_tag function in smsbox.c. Verify with
>>> debugger, since it is only my guess looking at the code.
>>>
>>> BR,
>>> Nikos
>>> ----- Original Message ----- From: "oscar cassetti"
>>> <oscar.getstr...@gmail.com>
>>> To: "Nikos Balkanas" <nbalka...@gmail.com>
>>> Sent: Sunday, February 21, 2010 10:38 AM
>>> Subject: Re: XML Post and dlr-url
>>>
>>>
>>> Yes, I can use a workaround by passing only one parameter to GET query
>>> and use a internal separator within the string to actually separate
>>> the different parts.
>>>
>>> If you can point me where the problem is (like function or source
>>> file) I could I have a look myself.
>>>
>>> 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: <us...@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: <us...@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