Re: XML Post and dlr-url
"Nikos Balkanas" <[email protected]>
| Newsgroups | gmane.comp.mobile.kannel.devel |
|---|---|
| Message-ID | <B77B5D211CCC4AD29ACA69A72F3D81F9@drwho> |
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 >>>> >>> >>> >> >> > >