mncc_sock: Clear all calls if MNCC application (LCR) disconnects

This commit is contained in:
Harald Welte 2010-12-22 23:17:50 +01:00
parent 49a2ddeec0
commit 371efe5955
3 changed files with 16 additions and 1 deletions

View File

@ -25,6 +25,7 @@ static inline struct msgb *gsm48_msgb_alloc(void)
/* config options controlling the behaviour of the lower leves */
void gsm0408_allow_everyone(int allow);
void gsm0408_clear_request(struct gsm_subscriber_connection *conn, uint32_t cause);
void gsm0408_clear_all_trans(struct gsm_network *net, int protocol);
int gsm0408_dispatch(struct gsm_subscriber_connection *conn, struct msgb *msg);
int gsm0408_rcvmsg(struct msgb *msg, u_int8_t link_id);

View File

@ -329,6 +329,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)
{

View File

@ -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)) {