sms bugfix

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/OpenBSC@lists.osmocom.org/.

Dennis Wehrle openbsc at wehrle.it
Thu Jul 7 17:16:51 UTC 2011


Hello

Here it is. After some delay (sorry!) i've finished the sms-patch. As 
already mentioned, i have changed the database-format for the SMS-table.
If you already have a database, you have to _drop_ the SMS-table!

If you have questions, please feel free to ask me.

Best Regards
Dennis Wehrle


On 18.03.2011 23:01, Dennis Wehrle wrote:
> Hello
>
> Our goal was to send status sms via the vty interface. But all of our 
> sms were cropped. In contrast sms from one MS to another MS are 
> displayed correctly (despite the fact, that the text at the database 
> contains several '@' at the end / the user_data contains several 
> zero-octets). Therefore i have inspect the code and found several bugs.
>
> The main problem is that the "user_data_len" is not correctly used. As 
> per GSM 03.40, 9.2.3.16 TP‑User‑Data‑Length (TP‑UDL):
> "If the TP‑User‑Data is coded using the GSM 7 bit default alphabet, 
> the TP‑User‑Data‑Length field gives an integer representation of the 
> number of septets within the TP‑User‑Data field to follow."
>
> Currently the "user_data_len" contains the number of octets (returned 
> from gsm_7bit_encode(...) at gsm_utils.c (libosmocore)).
> The big problem here is that this information is not unique, e.g.:
> 1.) 46 non-extension characters + 1 extension character => (46 * 7 bit 
> + (1 * (2 * 7 bit))) / 8 bit = 42 octets
> 2.) 47 non-extension characters => (47 * 7 bit) / 8 bit = 41,125 = 42 
> octets
> 3.) 48 non-extension characters => (48 * 7 bit) / 8 bit = 42 octects
>
> But the MS has to know the correct "user_data_len" to decode the 
> correct number of characters.
> For this reason i updated the gsm_7bit_encode() function to return the 
> correct number of septets. However sometimes it is needed to know the 
> correct number of octets (e.g. at gsm_04_11.c: gsm340_gen_tpdu(...)) 
> => i added a function to gsm_utils.c named:
> uint8_t get_octet_len(const uint8_t sept_len)
>
>
> I have also fixed the problem, that the sms are wrongly stored / 
> displayed on the database. But the solution on the function 
> *sms_from_result(...) (at db.c) is not really "beautiful". This is 
> because there exists no "user_data_len" field at the database. To 
> store the right value for "user_data_len" (which is further needed) i 
> have to get the length from the "text" field. Unfortunately this is 
> not enough. If the text contains extension characters like {[]} etc. 
> then the "user_data_len" has to be bigger because these characters 
> needs two septets. Therefore i use a switch statement so search for 
> these characters. A better solution for that is to store the right 
> "user_data_len" to the database (on the encoding / decoding 
> procedure). But i don't know if this is a suitable solution for all of 
> you (because you have to change your database structure etc.).
>
>
> Best Regards
> Dennis Wehrle
>
>

-------------- next part --------------
A non-text attachment was scrubbed...
Name: sms_libosmocore.patch
Type: text/x-patch
Size: 18678 bytes
Desc: not available
URL: <http://lists.osmocom.org/pipermail/openbsc/attachments/20110707/9a882abf/attachment.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: sms_openbsc.patch
Type: text/x-patch
Size: 18944 bytes
Desc: not available
URL: <http://lists.osmocom.org/pipermail/openbsc/attachments/20110707/9a882abf/attachment-0001.bin>


More information about the OpenBSC mailing list