aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src/libmsc
diff options
context:
space:
mode:
Diffstat (limited to 'openbsc/src/libmsc')
-rw-r--r--openbsc/src/libmsc/Makefile.am3
-rw-r--r--openbsc/src/libmsc/gsm_04_11.c4
-rw-r--r--openbsc/src/libmsc/gsm_04_11_helper.c37
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;
+}
+