static ftdm_status_t handle_tx_rsc(ftdm_stream_handle_t *stream, int span, int chan, int verbose);
static ftdm_status_t handle_tx_grs(ftdm_stream_handle_t *stream, int span, int chan, int range, int verbose);
+static ftdm_status_t handle_tx_susp(ftdm_stream_handle_t *stream, int span, int chan, int verbose);
+static ftdm_status_t handle_tx_resm(ftdm_stream_handle_t *stream, int span, int chan, int verbose);
+static ftdm_status_t handle_tx_rels(ftdm_stream_handle_t *stream, int span, int chan, int verbose);
+
static ftdm_status_t handle_tx_blo(ftdm_stream_handle_t *stream, int span, int chan, int verbose);
static ftdm_status_t handle_tx_ubl(ftdm_stream_handle_t *stream, int span, int chan, int verbose);
goto handle_cli_error;
/**********************************************************************/
}
+
/**************************************************************************/
- } else if (!strcasecmp(argv[c], "blo")) {
+ /* sending resume for a ckt's call */
+ } else if (!strcasecmp(argv[c], "resm") == FTDM_FAIL) {
+ if (check_arg_count(argc, 5) == FTDM_FAIL) {
+ goto handle_cli_error_argc;
+ }
+
+ if (extract_span_chan(argv, 2, &span, &chan) == FTDM_SUCCESS) {
+ handle_tx_resm(stream, span, chan, verbose);
+ } else {
+ stream->write_function(stream, "Bad command format. \n");
+ goto handle_cli_error_argc;
+ }
/**************************************************************************/
+ /* sending resume for a ckt's call */
+ } else if (!strcasecmp(argv[c], "rels")) {
+ if (check_arg_count(argc, 5) == FTDM_FAIL) {
+ goto handle_cli_error_argc;
+ }
+
+ if (extract_span_chan(argv, 2, &span, &chan) == FTDM_SUCCESS) {
+ handle_tx_rels(stream, span, chan, verbose);
+ } else {
+ stream->write_function(stream, "Bad command format.\n");
+ goto handle_cli_error_argc;
+ }
+
+ /**************************************************************************/
+ /* sending suspend for a ckt's call */
+ } else if (!strcasecmp(argv[c], "susp")) {
+ if (check_arg_count(argc, 5) == FTDM_FAIL) {
+ goto handle_cli_error_argc;
+ }
+
+ if (extract_span_chan(argv, 2, &span, &chan) == FTDM_SUCCESS) {
+ handle_tx_susp(stream, span, chan, verbose);
+ } else {
+ stream->write_function(stream, "Bad command format. \n");
+ goto handle_cli_error_argc;
+ }
+ /**************************************************************************/
+ } else if (!strcasecmp(argv[c], "blo")) {
if (check_arg_count(argc, 2)) goto handle_cli_error_argc;
c++;
return FTDM_SUCCESS;
}
+static ftdm_status_t handle_tx_resm(ftdm_stream_handle_t *stream, int span, int chan, int verbose)
+{
+ SS7_ERROR("JZ error alert. handle_tx_resm \n");
+ return FTDM_FAIL;
+}
+static ftdm_status_t handle_tx_rels(ftdm_stream_handle_t *stream, int span, int chan, int verbose)
+{
+ SS7_ERROR("JZ error alert. handle_tx_rels \n");
+ return FTDM_FAIL;
+}
+
+/******************************************************************************/
+static ftdm_status_t handle_tx_susp(ftdm_stream_handle_t *stream, int span, int chan, int verbose)
+{
+ int x;
+ sngss7_chan_data_t *ss7_info;
+ ftdm_channel_t *ftdmchan;
+ int lspan;
+ int lchan;
+
+ SS7_ERROR("JZ error alert. handle_tx_susp \n");
+ return FTDM_FAIL;
+
+ x = (g_ftdm_sngss7_data.cfg.procId * 1000) + 1;
+ while (g_ftdm_sngss7_data.cfg.isupCkt[x].id != 0) {
+ if (g_ftdm_sngss7_data.cfg.isupCkt[x].type == SNG_CKT_VOICE) {
+ ss7_info = (sngss7_chan_data_t *)g_ftdm_sngss7_data.cfg.isupCkt[x].obj;
+ ftdmchan = ss7_info->ftdmchan;
+
+ /* if span == 0 then all spans should be printed */
+ if (span == 0) {
+ lspan = ftdmchan->physical_span_id;
+ } else {
+ lspan = span;
+ }
+
+ /* if chan == 0 then all chans should be printed */
+ if (chan == 0) {
+ lchan = ftdmchan->physical_chan_id;
+ } else {
+ lchan = chan;
+ }
+
+ if ((ftdmchan->physical_span_id == lspan) && (ftdmchan->physical_chan_id == lchan)) {
+ /* now that we have the right channel...put a lock on it so no-one else can use it */
+ ftdm_mutex_lock(ftdmchan->mutex);
+
+ /* check if there is a pending state change|give it a bit to clear */
+ if (check_for_state_change(ftdmchan)) {
+ SS7_ERROR("Failed to wait for pending state change on CIC = %d\n", ss7_info->circuit->cic);
+ /* check if we need to die */
+ ftdm_assert(0, "State change not completed\n");
+ /* unlock the channel again before we exit */
+ ftdm_mutex_unlock(ftdmchan->mutex);
+ /* move to the next channel */
+ continue;
+ } else {
+ /* throw the ckt block flag */
+ sngss7_set_ckt_blk_flag(ss7_info, FLAG_CKT_MN_BLOCK_TX);
+
+ /* set the channel to suspended state */
+ ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_SUSPENDED);
+ }
+
+ /* unlock the channel again before we exit */
+ ftdm_mutex_unlock(ftdmchan->mutex);
+
+ } /* if ( span and chan) */
+
+ } /* if ( cic != 0) */
+
+ /* go the next circuit */
+ x++;
+ } /* while (g_ftdm_sngss7_data.cfg.isupCkt[x]id != 0) */
+
+ handle_show_blocks(stream, span, chan, verbose);
+
+ return FTDM_SUCCESS;
+}
/******************************************************************************/
static ftdm_status_t handle_tx_blo(ftdm_stream_handle_t *stream, int span, int chan, int verbose)
{
/* INCLUDE ********************************************************************/
#include "ftmod_sangoma_ss7_main.h"
-#include <sng_ss7/ci_db.h>
-#include <sng_ss7/cm_hash.h>
-#include <sng_ss7/cm_hash.x>
-#include <sng_ss7/si.h>
-#include <sng_ss7/si_mf.h>
-#include <sng_ss7/si_mf.x>
-#include <sng_ss7/si.x>
/******************************************************************************/
/* DEFINES ********************************************************************/
if (sngss7_test_ckt_flag(sngss7_info, FLAG_SUS_RECVD) &&
!sngss7_test_ckt_flag(sngss7_info, FLAG_T6_CANCELED)) {
+ if (sng_cancel_isup_tmr(sngss7_info->suInstId, ISUP_T6i) == RFAILED ) {
+ SS7_ERROR_CHAN(ftdmchan,"[CIC:%d]could not stop timer T6 \n", sngss7_info->circuit->cic);
+ } else {
+ sngss7_set_ckt_flag(sngss7_info, FLAG_T6_CANCELED);
+ SS7_ERROR_CHAN(ftdmchan,"[CIC:%d] isup timer T6 has been cancelled. \n", sngss7_info->circuit->cic);
+ }
+
+#if 0
/* SPIROU cert, disable ISUP T6 when bridged natively */
int trc = 0;
SiCon *siCon = NULL;
} else {
SS7_ERROR_CHAN(ftdmchan,"[CIC:%d]could not find siCon\n", sngss7_info->circuit->cic);
}
+#endif
}
}
if (sngss7_test_ckt_flag(sngss7_info, FLAG_SUS_RECVD) &&
!sngss7_test_ckt_flag(sngss7_info, FLAG_T6_CANCELED)) {
+ if (sng_cancel_isup_tmr(sngss7_info->suInstId, ISUP_T6i) == RFAILED ) {
+ SS7_ERROR_CHAN(ftdmchan,"[CIC:%d]could not stop timer T6 \n", sngss7_info->circuit->cic);
+ } else {
+ sngss7_set_ckt_flag(sngss7_info, FLAG_T6_CANCELED);
+ SS7_ERROR_CHAN(ftdmchan,"[CIC:%d] isup timer T6 has been cancelled. \n", sngss7_info->circuit->cic);
+ }
+
+#if 0
/* SPIROU cert, disable ISUP T6 when bridged natively */
int trc = 0;
SiCon *siCon = NULL;
} else {
SS7_ERROR_CHAN(ftdmchan,"[CIC:%d]could not find siCon\n", sngss7_info->circuit->cic);
}
+#endif
}
-
-
}
static ftdm_status_t ftdm_sangoma_ss7_native_bridge_state_change(ftdm_channel_t *ftdmchan);