aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src/gsm_04_11.c
diff options
context:
space:
mode:
authorDaniel Willmann <daniel@totalueberwachung.de>2009-08-12 21:17:06 +0200
committerHarald Welte (local) <laflocal@hanuman.gnumonks.org>2009-08-12 23:49:48 +0200
commit6b1e822611ee542ea42e880e63e8581f3c7a42ae (patch)
tree1713e3333b34c4e3fa793fdb1950d34de3b05c14 /openbsc/src/gsm_04_11.c
parent7984d5c2604131f9e44cc5a23672b6790d41754f (diff)
Fix gsm_7bit_{en,de}code function and sms user_data calculations
With the 7bit alphabet the user_data_len field needs to be in septets (characters) and not in octets occupied.
Diffstat (limited to 'openbsc/src/gsm_04_11.c')
-rw-r--r--openbsc/src/gsm_04_11.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/openbsc/src/gsm_04_11.c b/openbsc/src/gsm_04_11.c
index 9b3f44ec8..05e55d4dc 100644
--- a/openbsc/src/gsm_04_11.c
+++ b/openbsc/src/gsm_04_11.c
@@ -315,8 +315,13 @@ static int gsm340_gen_tpdu(struct msgb *msg, struct gsm_sms *sms)
*smsp = sms->user_data_len;
/* generate TP-UD */
- smsp = msgb_put(msg, sms->user_data_len);
- memcpy(smsp, sms->user_data, sms->user_data_len);
+ /* FIXME: Handle DSC of UCS2 or 8/bit default */
+ if (gsm338_get_sms_alphabet(sms->data_coding_scheme) == DCS_7BIT_DEFAULT) {
+ /* Warning, user_data_len indicates the amount of septets
+ * (characters), we need amount of octets occupied */
+ smsp = msgb_put(msg, ceil(sms->user_data_len*7/8.0));
+ memcpy(smsp, sms->user_data, ceil(sms->user_data_len*7/8.0));
+ }
return msg->len - old_msg_len;
}