X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=blobdiff_plain;f=gsm_bs.cpp;h=829d58af99683dcf87f3112b3f30ff721114b6e9;hp=8bb647f2db4778af7767bcb50e2285db133d7936;hb=740846314923a61f9608ac0b59830ed459537b90;hpb=2f9f37a9110e3c8fe7a317894c8aec5ed602b39c diff --git a/gsm_bs.cpp b/gsm_bs.cpp index 8bb647f..829d58a 100644 --- a/gsm_bs.cpp +++ b/gsm_bs.cpp @@ -862,6 +862,10 @@ int mncc_send(struct gsm_network *instance, int msg_type, void *data) /* close MNCC socket */ static int mncc_fd_close(struct lcr_fd *lfd) { + class Port *port; + class Pgsm_bs *pgsm_bs = NULL; + struct lcr_msg *message; + printf("mncc_sock: closing\n"); close(lfd->fd); unregister_fd(lfd); @@ -871,7 +875,20 @@ static int mncc_fd_close(struct lcr_fd *lfd) while (mncc_q_dequeue()) ; - /* FIXME: free all the calls that were running through the MNCC interface */ + /* free all the calls that were running through the MNCC interface */ + port = port_first; + while(port) { + if ((port->p_type & PORT_CLASS_GSM_MASK) == PORT_CLASS_GSM_BS) { + pgsm_bs = (class Pgsm_bs *)port; + message = message_create(pgsm_bs->p_serial, ACTIVE_EPOINT(pgsm_bs->p_epointlist), PORT_TO_EPOINT, MESSAGE_RELEASE); + message->param.disconnectinfo.cause = 27; // temp. unavail. + message->param.disconnectinfo.location = LOCATION_PRIVATE_LOCAL; + message_put(message); + pgsm_bs->new_state(PORT_STATE_RELEASE); + trigger_work(&pgsm_bs->p_m_g_delete); + } + port = port->next; + } /* FIXME: start a re-connect timer */