aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src/libmsc/osmo_msc.c
diff options
context:
space:
mode:
Diffstat (limited to 'openbsc/src/libmsc/osmo_msc.c')
-rw-r--r--openbsc/src/libmsc/osmo_msc.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/openbsc/src/libmsc/osmo_msc.c b/openbsc/src/libmsc/osmo_msc.c
index 4dd172b88..90fa56507 100644
--- a/openbsc/src/libmsc/osmo_msc.c
+++ b/openbsc/src/libmsc/osmo_msc.c
@@ -53,7 +53,13 @@ static int msc_compl_l3(struct gsm_subscriber_connection *conn, struct msgb *msg
gsm0408_dispatch(conn, msg);
/* TODO: do better */
- return BSC_API_CONN_POL_ACCEPT;
+ if (conn->silent_call)
+ return BSC_API_CONN_POL_ACCEPT;
+ if (conn->loc_operation || conn->sec_operation || conn->anch_operation)
+ return BSC_API_CONN_POL_ACCEPT;
+ if (trans_has_conn(conn))
+ return BSC_API_CONN_POL_ACCEPT;
+ return BSC_API_CONN_POL_REJECT;
}
static void msc_dtap(struct gsm_subscriber_connection *conn, uint8_t link_id, struct msgb *msg)
@@ -162,10 +168,8 @@ void msc_release_connection(struct gsm_subscriber_connection *conn)
if (conn->loc_operation || conn->sec_operation || conn->anch_operation)
return;
- llist_for_each_entry(trans, &conn->bts->network->trans_list, entry) {
- if (trans->conn == conn)
- return;
- }
+ if (trans_has_conn(conn))
+ return;
/* no more connections, asking to release the channel */
conn->in_release = 1;