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 >> > >
