diff options
author | Stefan Schmidt <stefan@datenfreihafen.org> | 2009-08-13 21:01:25 +0200 |
---|---|---|
committer | Stefan Schmidt <stefan@datenfreihafen.org> | 2009-08-13 21:01:25 +0200 |
commit | aa665876c0275fec245d2c51aa9a960c7e98264e (patch) | |
tree | b255d3194e89643debad441008a07a1c16db9e21 /openbsc/src/gsm_04_11.c | |
parent | 689537af9dc9f5d141d82f06e3d9c8ec44d51dc2 (diff) | |
parent | bc9e9f856b6bf2a82d64d5cb6fc31b065044cc75 (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.c | 17 |
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 |