Question about how to read / send SMS from an external program

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

Kang-min Liu gugod at gugod.org
Sun Jul 3 03:54:23 UTC 2011


On 2011/7/2, at 下午10:19, Sylvain Munaut wrote:

> Hi
> 
>> It will be really appreciated if anyone with similar experience can offer insight to my issue here.
> 
> No idea if that's the problem but one known issue with external
> interaction to hlr.sqlite3 is that the binary coding/decoding routinge
> (to store binary data inside sqlite) are not standard.
> 
> The DBI interface we use has it's own routines and if you try a
> 'native' sqlite3 driver, you may not get the right data. When
> accessing binary data fields from a auto-provisionning app for 27c3
> from a python script, I actually had to write my own 'dbi-equivalent'
> binary coding routine ...
> 
> See the dbi source code for more info about the algorithm itself.


Sylvian, thanks a lot for the great hint! I also ported the dbd_decode_binary routine to perl an it correctly decoded the sms text from user_data.

The overall logic looks like:
    
    my $dbh = DBI->connect("dbi:SQLite:dbname=hlr.sqlite3");
    $dbh->{sqlite_unicode} = 0;
    my $sth = $dbh->prepare("SELECT * FROM SMS;");
    $sth->execute();
    my $row = $sth->fetchrow_hashref();
    say gsm_7bit_decode(  dbd_decode_binary($row->{user_data}) );    

The implementation of gsm_7bit_decode and dbd_decode_binary in perl is posted there: https://gist.github.com/1061933

This really surprise me. I briefly looked the libdbi implementation and turns out it can only perform SQL INSERT or UPDATE with only full SQL statements, and the dbd_encode_binary basically turns any BLOB into TEXT (by escaping \0) so it can be part of the SQL statement.







More information about the OpenBSC mailing list