From 0267ab566d33803abdd30a8c0ee3b8f655499616 Mon Sep 17 00:00:00 2001 From: Moises Silva Date: Wed, 6 Aug 2014 23:27:10 -0400 Subject: [PATCH] OPENZAP-238: [freetdm] Fix state transition on hangup after a raw call is placed --- libs/freetdm/src/ftmod/ftmod_gsm/ftmod_gsm.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/libs/freetdm/src/ftmod/ftmod_gsm/ftmod_gsm.c b/libs/freetdm/src/ftmod/ftmod_gsm/ftmod_gsm.c index bbf5d13949..32ecdd4f4b 100755 --- a/libs/freetdm/src/ftmod/ftmod_gsm/ftmod_gsm.c +++ b/libs/freetdm/src/ftmod/ftmod_gsm/ftmod_gsm.c @@ -392,7 +392,6 @@ void on_wat_con_sts(unsigned char span_id, uint8_t call_id, wat_con_status_t *st void on_wat_rel_ind(unsigned char span_id, uint8_t call_id, wat_rel_event_t *rel_event) { ftdm_span_t *span = NULL; - //ftdm_status_t ftdm_status = FTDM_FAIL; ftdm_gsm_span_data_t *gsm_data = NULL; ftdm_log(FTDM_LOG_INFO, "s%d: Call hangup (id:%d) cause:%d\n", span_id, call_id, rel_event->cause); @@ -401,14 +400,17 @@ void on_wat_rel_ind(unsigned char span_id, uint8_t call_id, wat_rel_event_t *rel return; } - if (gsm_data->bchan->state == FTDM_CHANNEL_STATE_HANGUP || - gsm_data->bchan->state == FTDM_CHANNEL_STATE_DOWN) { - /* this might be due to a call to enable call forwarding, - * which does not run the state machine */ + if (gsm_data->bchan->state == FTDM_CHANNEL_STATE_DOWN) { + /* This is most likely due to a call to enable call + * forwarding, which does not run the state machine */ + ftdm_clear_flag(gsm_data->bchan, FTDM_CHANNEL_INUSE); return; } - ftdm_set_state(gsm_data->bchan, FTDM_CHANNEL_STATE_HANGUP); + if (gsm_data->bchan->state > FTDM_CHANNEL_STATE_DOWN && + gsm_data->bchan->state < FTDM_CHANNEL_STATE_HANGUP) { + ftdm_set_state(gsm_data->bchan, FTDM_CHANNEL_STATE_HANGUP); + } } void on_wat_rel_cfm(unsigned char span_id, uint8_t call_id)