aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src/libmsc
diff options
context:
space:
mode:
authorNeels Hofmeyr <nhofmeyr@sysmocom.de>2016-03-04 14:39:22 +0100
committerNeels Hofmeyr <nhofmeyr@sysmocom.de>2016-03-04 14:57:09 +0100
commit5d9004bc9b6f486fff032aaa2a6cc10fca180de3 (patch)
treefeb1289dbede42ad3c7ec4a77df445be4421794d /openbsc/src/libmsc
parenta4198d192234a8180a89be8b91e867a1cbc1f512 (diff)
gsm_subscriber_connection: further split between BSC and MSC
Move some Iu/A members into the MSC #ifdef. Have separate allocate and free functions for the two scopes.
Diffstat (limited to 'openbsc/src/libmsc')
-rw-r--r--openbsc/src/libmsc/gsm_subscriber.c28
-rw-r--r--openbsc/src/libmsc/iu_cs.c2
-rw-r--r--openbsc/src/libmsc/osmo_msc.c3
3 files changed, 30 insertions, 3 deletions
diff --git a/openbsc/src/libmsc/gsm_subscriber.c b/openbsc/src/libmsc/gsm_subscriber.c
index 9342a2972..7489b169f 100644
--- a/openbsc/src/libmsc/gsm_subscriber.c
+++ b/openbsc/src/libmsc/gsm_subscriber.c
@@ -370,3 +370,31 @@ void subscr_expire(struct gsm_subscriber_group *sgrp)
{
db_subscriber_expire(sgrp->net, subscr_expire_callback);
}
+
+struct gsm_subscriber_connection *msc_subscr_con_allocate(struct gsm_network *network)
+{
+ struct gsm_subscriber_connection *conn;
+
+ conn = talloc_zero(network, struct gsm_subscriber_connection);
+ if (!conn)
+ return NULL;
+
+ conn->network = network;
+ llist_add_tail(&conn->entry, &network->subscr_conns);
+ return conn;
+}
+
+void msc_subscr_con_free(struct gsm_subscriber_connection *conn)
+{
+ if (!conn)
+ return;
+
+
+ if (conn->subscr) {
+ subscr_put(conn->subscr);
+ conn->subscr = NULL;
+ }
+
+ llist_del(&conn->entry);
+ talloc_free(conn);
+}
diff --git a/openbsc/src/libmsc/iu_cs.c b/openbsc/src/libmsc/iu_cs.c
index 646235f7c..2aabf200f 100644
--- a/openbsc/src/libmsc/iu_cs.c
+++ b/openbsc/src/libmsc/iu_cs.c
@@ -95,7 +95,7 @@ int gsm0408_rcvmsg_iucs(struct gsm_network *network, struct msgb *msg)
rc = msc_compl_l3(conn, msg, 0);
if (rc != MSC_CONN_ACCEPT) {
- subscr_con_free(conn);
+ msc_subscr_con_free(conn);
rc = -1;
}
else
diff --git a/openbsc/src/libmsc/osmo_msc.c b/openbsc/src/libmsc/osmo_msc.c
index 8618b00f7..0e91512d7 100644
--- a/openbsc/src/libmsc/osmo_msc.c
+++ b/openbsc/src/libmsc/osmo_msc.c
@@ -151,6 +151,5 @@ void msc_release_connection(struct gsm_subscriber_connection *conn)
subscr_update_expire_lu(conn->network, conn->subscr);
conn->in_release = 1;
- gsm0808_clear(conn);
- subscr_con_free(conn);
+ msc_subscr_con_free(conn);
}