diff options
author | Daniel Willmann <daniel@totalueberwachung.de> | 2009-08-15 03:01:46 +0200 |
---|---|---|
committer | Daniel Willmann <daniel@totalueberwachung.de> | 2009-08-15 03:15:08 +0200 |
commit | 6b024cb83a02d4fec843af8951b481ba8dda0ee0 (patch) | |
tree | 420c5d0e45f25a404d1e4db88aedbefa0fd1c4ac /openbsc/src/gsm_04_11.c | |
parent | d19e58b13ce7716491d7fe22a91a52cf092b42a7 (diff) |
Handle SMS with UCS2 and binary userdata
Diffstat (limited to 'openbsc/src/gsm_04_11.c')
-rw-r--r-- | openbsc/src/gsm_04_11.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/openbsc/src/gsm_04_11.c b/openbsc/src/gsm_04_11.c index 85ad0ecd2..6290ce6d3 100644 --- a/openbsc/src/gsm_04_11.c +++ b/openbsc/src/gsm_04_11.c @@ -389,8 +389,8 @@ static int gsm340_gen_tpdu(struct msgb *msg, struct gsm_sms *sms) *smsp = sms->user_data_len; /* generate TP-UD */ - /* FIXME: Handle DSC of UCS2 or 8/bit default */ - if (gsm338_get_sms_alphabet(sms->data_coding_scheme) == DCS_7BIT_DEFAULT) { + switch (gsm338_get_sms_alphabet(sms->data_coding_scheme)) { + case DCS_7BIT_DEFAULT: octet_len = sms->user_data_len*7/8; if (sms->user_data_len*7%8 != 0) octet_len++; @@ -398,6 +398,15 @@ static int gsm340_gen_tpdu(struct msgb *msg, struct gsm_sms *sms) * (characters), we need amount of octets occupied */ smsp = msgb_put(msg, octet_len); memcpy(smsp, sms->user_data, octet_len); + break; + case DCS_UCS2: + case DCS_8BIT_DATA: + smsp = msgb_put(msg, sms->user_data_len); + memcpy(smsp, sms->user_data, sms->user_data_len); + break; + default: + DEBUGP(DSMS, "Unhandled Data Coding Scheme: 0x%02X\n", sms->data_coding_scheme); + break; } return msg->len - old_msg_len; |