diff options
Diffstat (limited to 'openbsc/src/libmsc')
-rw-r--r-- | openbsc/src/libmsc/Makefile.am | 3 | ||||
-rw-r--r-- | openbsc/src/libmsc/gsm_04_11.c | 4 | ||||
-rw-r--r-- | openbsc/src/libmsc/gsm_04_11_helper.c | 37 |
3 files changed, 41 insertions, 3 deletions
diff --git a/openbsc/src/libmsc/Makefile.am b/openbsc/src/libmsc/Makefile.am index 2b5059986..1e58cd101 100644 --- a/openbsc/src/libmsc/Makefile.am +++ b/openbsc/src/libmsc/Makefile.am @@ -6,7 +6,8 @@ noinst_LIBRARIES = libmsc.a libmsc_a_SOURCES = auth.c \ db.c \ - gsm_04_08.c gsm_04_11.c gsm_04_80.c \ + gsm_04_08.c gsm_04_11.c gsm_04_11_helper.c \ + gsm_04_80.c \ gsm_subscriber.c \ mncc.c mncc_builtin.c mncc_sock.c \ rrlp.c \ diff --git a/openbsc/src/libmsc/gsm_04_11.c b/openbsc/src/libmsc/gsm_04_11.c index 97a67ee53..45e5dc5e9 100644 --- a/openbsc/src/libmsc/gsm_04_11.c +++ b/openbsc/src/libmsc/gsm_04_11.c @@ -450,7 +450,7 @@ static int gsm411_rp_sendmsg(struct gsm411_smr_inst *inst, struct msgb *msg, rp = (struct gsm411_rp_hdr *)msgb_push(msg, sizeof(*rp)); rp->len = len + 2; rp->msg_type = rp_msg_type; - rp->msg_ref = rp_msg_ref; /* FIXME: Choose randomly */ + rp->msg_ref = rp_msg_ref; return gsm411_smr_send(inst, rl_msg_type, msg); } @@ -836,7 +836,7 @@ int gsm411_send_sms(struct gsm_subscriber_connection *conn, struct gsm_sms *sms) struct msgb *msg = gsm411_msgb_alloc(); struct gsm_trans *trans; uint8_t *data, *rp_ud_len; - uint8_t msg_ref = 42; + uint8_t msg_ref = sms_next_rp_msg_ref(conn); int transaction_id; int rc; diff --git a/openbsc/src/libmsc/gsm_04_11_helper.c b/openbsc/src/libmsc/gsm_04_11_helper.c new file mode 100644 index 000000000..f48c6de0b --- /dev/null +++ b/openbsc/src/libmsc/gsm_04_11_helper.c @@ -0,0 +1,37 @@ +/* Helpers for SMS/GSM 04.11 */ +/* + * (C) 2014 by Holger Hans Peter Freyther + * + * All Rights Reserved + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +#include <openbsc/gsm_data.h> +#include <openbsc/gsm_04_11.h> + +uint8_t sms_next_rp_msg_ref(struct gsm_subscriber_connection *conn) +{ + const uint8_t rp_msg_ref = conn->next_rp_ref; + /* + * This should wrap as the valid range is 0 to 255. We only + * transfer one SMS at a time so we don't need to check if + * the id has been already assigned. + */ + conn->next_rp_ref += 1; + + return rp_msg_ref; +} + |