From 9f449b338f270e444d7359d04fb1e79767a3d98e Mon Sep 17 00:00:00 2001 From: David Yat Sin Date: Fri, 25 Mar 2011 14:49:14 -0400 Subject: [PATCH] freetdm: ISDN - fixed channel restart command not specifying channel ID --- .../ftmod_sangoma_isdn_stack_hndl.c | 2 +- .../ftmod_sangoma_isdn_stack_out.c | 19 ++++++++++++++----- .../ftmod_sangoma_isdn_support.c | 4 ---- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_hndl.c b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_hndl.c index 01d5de7f8d..b1af8a61c3 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_hndl.c +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_hndl.c @@ -662,7 +662,7 @@ void sngisdn_process_rel_ind (sngisdn_event_data_t *sngisdn_event) } break; case FTDM_CHANNEL_STATE_RESET: - ftdm_log_chan_msg(ftdmchan, FTDM_LOG_DEBUG, "Processing SETUP but channel in RESET state, ignoring\n"); + ftdm_log_chan_msg(ftdmchan, FTDM_LOG_DEBUG, "Processing RELEASE but channel in RESET state, ignoring\n"); break; default: ftdm_log_chan(ftdmchan, FTDM_LOG_CRIT, "Received RELEASE in an invalid state (%s)\n", diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_out.c b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_out.c index b56c95b10d..674e642719 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_out.c +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_out.c @@ -60,7 +60,7 @@ void sngisdn_snd_setup(ftdm_channel_t *ftdmchan) } ftdm_log_chan(sngisdn_info->ftdmchan, FTDM_LOG_INFO, "Outgoing call: Called No:[%s] Calling No:[%s]\n", ftdmchan->caller_data.dnis.digits, ftdmchan->caller_data.cid_num.digits); - set_chan_id_ie(ftdmchan, &conEvnt.chanId); + set_chan_id_ie(ftdmchan, &conEvnt.chanId); set_bear_cap_ie(ftdmchan, &conEvnt.bearCap[0]); set_called_num(ftdmchan, &conEvnt.cdPtyNmb); set_calling_num(ftdmchan, &conEvnt.cgPtyNmb); @@ -125,8 +125,11 @@ void sngisdn_snd_con_complete(ftdm_channel_t *ftdmchan) } memset(&cnStEvnt, 0, sizeof(cnStEvnt)); - - set_chan_id_ie(ftdmchan, &cnStEvnt.chanId); + + /* Indicate channel ID only in first response */ + if (!ftdm_test_flag(sngisdn_info, FLAG_SENT_CHAN_ID)) { + set_chan_id_ie(ftdmchan, &cnStEvnt.chanId); + } ftdm_log_chan(ftdmchan, FTDM_LOG_INFO, "Sending CONNECT COMPL (suId:%d suInstId:%u spInstId:%u dchan:%d ces:%d)\n", signal_data->cc_id, sngisdn_info->suInstId, sngisdn_info->spInstId, signal_data->dchan_id, sngisdn_info->ces); @@ -152,7 +155,10 @@ void sngisdn_snd_proceed(ftdm_channel_t *ftdmchan, ftdm_sngisdn_progind_t prog_i memset(&cnStEvnt, 0, sizeof(cnStEvnt)); - set_chan_id_ie(ftdmchan, &cnStEvnt.chanId); + /* Indicate channel ID only in first response */ + if (!ftdm_test_flag(sngisdn_info, FLAG_SENT_CHAN_ID)) { + set_chan_id_ie(ftdmchan, &cnStEvnt.chanId); + } set_prog_ind_ie(ftdmchan, &cnStEvnt.progInd, prog_ind); set_facility_ie(ftdmchan, &cnStEvnt.facilityStr); @@ -238,7 +244,10 @@ void sngisdn_snd_connect(ftdm_channel_t *ftdmchan) memset(&cnStEvnt, 0, sizeof(cnStEvnt)); - set_chan_id_ie(ftdmchan, &cnStEvnt.chanId); + /* Indicate channel ID only in first response */ + if (!ftdm_test_flag(sngisdn_info, FLAG_SENT_CHAN_ID)) { + set_chan_id_ie(ftdmchan, &cnStEvnt.chanId); + } set_prog_ind_ie(ftdmchan, &cnStEvnt.progInd, prog_ind); set_facility_ie(ftdmchan, &cnStEvnt.facilityStr); diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_support.c b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_support.c index 0f9a5ebeb3..0ac52b085c 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_support.c +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_support.c @@ -830,10 +830,6 @@ ftdm_status_t set_chan_id_ie(ftdm_channel_t *ftdmchan, ChanId *chanId) return FTDM_SUCCESS; } - if (ftdm_test_flag(sngisdn_info, FLAG_SENT_CHAN_ID)) { - /* Indicate channel ID only in first response */ - return FTDM_SUCCESS; - } ftdm_set_flag(sngisdn_info, FLAG_SENT_CHAN_ID); chanId->eh.pres = PRSNT_NODEF;