diff options
author | Harald Welte <laforge@gnumonks.org> | 2010-12-22 23:17:50 +0100 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2010-12-26 19:20:56 +0100 |
commit | 2dc40296d52dd8218047e206766c0c2fbdf67a10 (patch) | |
tree | 7bec3ea49ed988081a9cdb4fbe44b26027d2c42d /openbsc/src | |
parent | f89f6d89923e382ce7e3dc16377b9c765befb411 (diff) |
mncc_sock: Clear all calls if MNCC application (LCR) disconnects
Diffstat (limited to 'openbsc/src')
-rw-r--r-- | openbsc/src/gsm_04_08.c | 12 | ||||
-rw-r--r-- | openbsc/src/mncc_sock.c | 4 |
2 files changed, 15 insertions, 1 deletions
diff --git a/openbsc/src/gsm_04_08.c b/openbsc/src/gsm_04_08.c index 64308bcad..3c65a5bf7 100644 --- a/openbsc/src/gsm_04_08.c +++ b/openbsc/src/gsm_04_08.c @@ -330,6 +330,18 @@ void gsm0408_clear_request(struct gsm_subscriber_connection *conn, uint32_t caus } } +void gsm0408_clear_all_trans(struct gsm_network *net, int protocol) +{ + struct gsm_trans *trans, *temp; + + LOGP(DCC, LOGL_NOTICE, "Clearing all currently active transactions!!!\n"); + + llist_for_each_entry_safe(trans, temp, &net->trans_list, entry) { + if (trans->protocol == protocol) + trans_free(trans); + } +} + /* Chapter 9.2.14 : Send LOCATION UPDATING REJECT */ int gsm0408_loc_upd_rej(struct gsm_subscriber_connection *conn, u_int8_t cause) { diff --git a/openbsc/src/mncc_sock.c b/openbsc/src/mncc_sock.c index be0d9b933..7e0a2088c 100644 --- a/openbsc/src/mncc_sock.c +++ b/openbsc/src/mncc_sock.c @@ -66,7 +66,9 @@ static void mncc_sock_close(struct mncc_sock_state *state) state->listen_bfd.when |= BSC_FD_READ; /* FIXME: make sure we don't enqueue anymore */ - /* FIXME: release all exisitng calls */ + + /* release all exisitng calls */ + gsm0408_clear_all_trans(state->net, GSM48_PDISC_CC); /* flush the queue */ while (!llist_empty(&state->net->upqueue)) { |