Hi, patch commited to CVS.
Thanks, Alexander Malysh Am 16.03.2010 um 12:20 schrieb Alexander Malysh: > Hi, > > attached is patch that should fix any xml related issues. Please test it. > > Thanks, > Alexander Malysh<smsbox_xml.patch> > > Am 27.02.2010 um 10:03 schrieb oscar cassetti: > >> 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: >>> 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&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 >>>>>>>> >>>>>>> >>>>>>> >>>>>> >>>>>> >>>>> >>>>> >>>> >>>> >>> >>> >> >
