aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src/gsm_04_11.c
diff options
context:
space:
mode:
authorStefan Schmidt <stefan@datenfreihafen.org>2009-08-13 21:01:25 +0200
committerStefan Schmidt <stefan@datenfreihafen.org>2009-08-13 21:01:25 +0200
commitaa665876c0275fec245d2c51aa9a960c7e98264e (patch)
treeb255d3194e89643debad441008a07a1c16db9e21 /openbsc/src/gsm_04_11.c
parent689537af9dc9f5d141d82f06e3d9c8ec44d51dc2 (diff)
parentbc9e9f856b6bf2a82d64d5cb6fc31b065044cc75 (diff)
Merge branch 'master' of git@192.168.100.10:openbsc
Diffstat (limited to 'openbsc/src/gsm_04_11.c')
-rw-r--r--openbsc/src/gsm_04_11.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/openbsc/src/gsm_04_11.c b/openbsc/src/gsm_04_11.c
index 16c5c079b..1b1368f82 100644
--- a/openbsc/src/gsm_04_11.c
+++ b/openbsc/src/gsm_04_11.c
@@ -175,6 +175,10 @@ static unsigned long gsm340_validity_period(u_int8_t sms_vpf, u_int8_t *sms_vp)
/* FIXME: implementation */
DEBUGP(DSMS, "VPI enhanced not implemented yet\n");
break;
+ case GSM340_TP_VPF_NONE:
+ /* Default validity: two days */
+ minutes = 24 * 60 * 2;
+ break;
}
return minutes;
}
@@ -272,6 +276,7 @@ static int gsm340_gen_tpdu(struct msgb *msg, struct gsm_sms *sms)
u_int8_t *smsp;
u_int8_t oa[12]; /* max len per 03.40 */
u_int8_t oa_len = 0;
+ u_int8_t octet_len;
unsigned int old_msg_len = msg->len;
/* generate first octet with masked bits */
@@ -317,10 +322,13 @@ static int gsm340_gen_tpdu(struct msgb *msg, struct gsm_sms *sms)
/* generate TP-UD */
/* FIXME: Handle DSC of UCS2 or 8/bit default */
if (gsm338_get_sms_alphabet(sms->data_coding_scheme) == DCS_7BIT_DEFAULT) {
+ octet_len = sms->user_data_len*7/8;
+ if (sms->user_data_len*7%8 != 0)
+ octet_len++;
/* 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));
+ smsp = msgb_put(msg, octet_len);
+ memcpy(smsp, sms->user_data, octet_len);
}
return msg->len - old_msg_len;
@@ -383,6 +391,9 @@ static int gsm340_rx_tpdu(struct msgb *msg)
sms_vp = smsp;
smsp += 7;
break;
+ case GSM340_TP_VPF_NONE:
+ sms_vp = 0;
+ break;
default:
DEBUGP(DSMS, "SMS Validity period not implemented: 0x%02x\n",
sms_vpf);
@@ -954,6 +965,8 @@ static int subscr_sig_cb(unsigned int subsys, unsigned int signal,
struct gsm_lchan *lchan;
struct gsm_sms *sms;
+ u_int32_t token;
+
switch (signal) {
case S_SUBSCR_ATTACHED:
/* A subscriber has attached. Check if there are