the problem really is that the phone is sending the message defines which character set the message is in. Kannel does pass it to your application in the format received. This means you have to convert it to whatever you want it to be. There's no way to force a conversion in kannel as far as I know...

libiconv is probably handy for that type of conversions.

But as you talked about BINARY sms, its of course clear it has to stay binary, meaning kannel wont for sure not convert or touch anyhting as its maybe not even considered a character but it could be a image, ringtone, setup message etc.


On 01.02.2008, at 12:51, Vitaliy Osaulenko wrote:

Hi,

I still have a problem when I try to receive binary sms from mobile phone. I received advice from Andreas Fink. Thanks him for that! But as I understand the parameters he proposed to set up related to the situation when we want to send SMS from gateway to device. I want to set coding parameter and charset parameter to gateway. So it can use them when he converts binary data to URL. In specification we have %С and %с. But that is used when we want to receive information about coding and charset from gateway. They isn't used to set up that parameters. I wrote advice and problem description below. Could you tell me how I can tune the gateway to receive correct data. Thank you!

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ADVICE:

A GSM phone doesnt use WINDOWS-1252 charset but it uses GSM-Charset..

The GSM character set is 7 bit, so you can not have values of 128-159
in it.
very few characters are coded with an escape sequence.

I think your problem is that if you send binary message, you should
tell kannel that its binary 8 bit instead of standard 7 bit. Kannel
will otherwise try to convert. I presume it will try converting from
ISO (not Windows 1252) to GSM and back. Setting the coding parameter
to the right value (see users guide) should make it send binary 8 bit
messages.


if used in passing it on http to kannel pass it as &coding=...

        HTTP Get:
        &coding=
                message coding: 0 (default, 7 bits), 1 (8 bits) or 2 (Unicode)
        &charset=
                as in Content-Type: text/html; charset=ISO-8859-1

        HTTP Put:.
        X-Kannel-Coding for message coding
If unset, defaults to 0 (7 bits) if Content-Type is text/plain , text/html or text/vnd.wap.wml. On application/octet-stream, defaults to 8 bits (1). All other Content-Type values are rejected.
        Content-Type for charset

if used in receiving a URL from kannel, use the placeholder %c for the coding parameter and %C for the charset parameter

from Kannel -> http server:
        %c message coding: 0 (default, 7 bits), 1 (8 bits) or 2 (Unicode)
%C message charset: for a "normal" message, it will be "GSM" (coding=0), "binary" (coding=1) or "UTF-16BE" (coding=2). If the message was successfully recoded from Unicode, it will be "WINDOWS-1252"

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

ORIGINAL PROBLEM DESCRIPTION :

I have a question. I try send binary message to gateway from mobile phone:


byte[] original = {77, 67, 65, 83, 72, 32, 33, 216, 21, 199, 102, 84, 199, 230, 2, 164, 183, 47, 130, 157, 125, 96, 186, 213, 42, 94, 79, 203, 210, 50, 76, 232, 174, 76, 49, 146, 187, 217, 34, 27, 18, 135, 197, 64, 82, 197, 66, 65, 115, 213, 23, 77, 153, 34, 243, 58, 231, 220, 192, 11, 120, 15, 9, 148, 53, 215, 126, 2, 110, 38, 11, 135, 190, 176, 107, 155, 231, 2, 176, 159, 86, 132, 128, 45, 91, 144, 98, 63, 115, 110, 228, 37, 200, 194, 38, 219, 135, 41, 233, 138, 117, 246, 29, 211, 6, 213, 178, 216, 79, 70, 0, 45, 187, 223, 189, 110, 99, 228, 108, 196, 33, 72, 125, 64, 135, 218, 202, 228, 216, 170, 62, 80, 139, 128, 0, 0, 0, 0, 0, 0};

I received from gateway next binary parameter:

MCASH+!%D8%15%C7fT%C7%E6%02%A4%B7%2F%1A%1A%7D%60%BA%D5*%5EO%CB%D22L %E8%AEL1%1A%BB%D9%22%1B%12%1A%C5%40R%C5BAs%D5%17M%1A%22%F3%3A%E7%DC %C0%0Bx%0F%09%1A5%D7~%02n%26%0B%1A%BE%B0k%1A%E7%02%B0%1AV%1A%1A-%5B %1Ab%3Fsn%E4%25%C8%C2%26%DB%1A)%E9%1Au%F6%1D%D3%06%D5%B2%D8OF%00-%BB %DF%BDnc%E4l%C4!H%7D%40%1A%DA%CA%E4%D8%AA%3EP%1A%1A%00%00%00%00%00%00

And then do URL decoding with using WINDOWS-1252 charset:

byte[] data = {77, 67, 65, 83, 72, 32, 33, 216, 21, 199, 102, 84, 199, 230, 2, 164, 183, 47, 26, 26, 125, 96, 186, 213, 42, 94, 79, 203, 210, 50, 76, 232, 174, 76, 49, 26, 187, 217, 34, 27, 18, 26, 197, 64, 82, 197, 66, 65, 115, 213, 23, 77, 26, 34, 243, 58, 231, 220, 192, 11, 120, 15, 9, 26, 53, 215, 126, 2, 110, 38, 11, 26, 190, 176, 107, 26, 231, 2, 176, 26, 86, 26, 26, 45, 91, 26, 98, 63, 115, 110, 228, 37, 200, 194, 38, 219, 26, 41, 233, 26, 117, 246, 29, 211, 6, 213, 178, 216, 79, 70, 0, 45, 187, 223, 189, 110, 99, 228, 108, 196, 33, 72, 125, 64, 26, 218, 202, 228, 216, 170, 62, 80, 26, 26, 0, 0, 0, 0, 0, 0};

The data a bit different. Bytes from 128 to 159 converts to 26. I think range is a bit bigger. But it is not important. My question to you. Do I something wrong? Or we lost that bytes when gateway performs converting? May be it happens when gateway tries to convert bytes to unicode/utf-8?
Could I fix that? Could I change config files or sources?











Reply via email to