aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc
diff options
context:
space:
mode:
authorDaniel Willmann <daniel@totalueberwachung.de>2009-08-15 03:01:46 +0200
committerDaniel Willmann <daniel@totalueberwachung.de>2009-08-15 03:15:08 +0200
commit6b024cb83a02d4fec843af8951b481ba8dda0ee0 (patch)
tree420c5d0e45f25a404d1e4db88aedbefa0fd1c4ac /openbsc
parentd19e58b13ce7716491d7fe22a91a52cf092b42a7 (diff)
Handle SMS with UCS2 and binary userdata
Diffstat (limited to 'openbsc')
-rw-r--r--openbsc/src/gsm_04_11.c13
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;