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