Re: XML Post and dlr-url
oscar cassetti <[email protected]>
| Newsgroups | gmane.comp.mobile.kannel.devel |
|---|---|
| Message-ID | <[email protected]> |
Any development on this? On Mon, Feb 22, 2010 at 1:32 PM, Nikos Balkanas <[email protected]> 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: [email protected] > 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: > poncha@localhost:~/www$ cat .htaccess > php_value arg_separator.input "&;" > poncha@localhost:~/www$ cat dump_request.php > <?php var_dump($_REQUEST); ?> > poncha@localhost:~/www$ lynx -source > 'http://localhost/~poncha/dump_request.php?foo=bar&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 <[email protected]> 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 >> & and replace with '&'. >> >> BR, >> Nikos >> ----- Original Message ----- From: "oscar cassetti" >> <[email protected]> >> To: "Nikos Balkanas" <[email protected]> >> Cc: <[email protected]> >> 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 <[email protected]> >> 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" >>> <[email protected]> >>> To: "Nikos Balkanas" <[email protected]> >>> 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 <[email protected]> >>> 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" >>>> <[email protected]> >>>> To: "Nikos Balkanas" <[email protected]> >>>> Cc: <[email protected]> >>>> 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 & which is >>>> the right thing to do. >>>> However when kannel parses the <dlr-url> it doesn't un-escape the & >>>> 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&to_number=000000000000&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 <[email protected]> >>>> 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" >>>>> <[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 >>>>>> >>>>> >>>>> >>>> >>>> >>> >>> >> >> > >