* LIABILITY|WHETHER IN CONTRACT|STRICT LIABILITY|OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE|EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Contributors:
+ * James Zhang <jzhang@sangoma.com>
+ *
*/
#if 0
}
#ifdef SMG_RELAY_DBG
- stream->write_function(stream, " blk_flag= %x ckt_flag = %d", ss7_info->blk_flags, ss7_info->ckt_flags );
+ stream->write_function(stream," blk_flag=%x | ckt_flag=%x | chan_flag=%x", ss7_info->blk_flags, ss7_info->ckt_flags, ftdmchan->flags);
#endif
stream->write_function(stream, "\n");
} /* if ( span and chan) */
}
#ifdef SMG_RELAY_DBG
- stream->write_function(stream," blk_flag= %x ckt_flag = %d", ss7_info->blk_flags, ss7_info->ckt_flags );
+ stream->write_function(stream," blk_flag=%x | ckt_flag=%x | chan_flag=%x", ss7_info->blk_flags, ss7_info->ckt_flags, ftdmchan->flags);
#endif
stream->write_function(stream, "\n");
} /* if ( hole, sig, voice) */
if (sngss7_test_ckt_flag (sngss7_info, FLAG_REMOTE_REL)) {
/* check if this hangup is from a tx RSC */
if (sngss7_test_ckt_flag (sngss7_info, FLAG_RESET_TX)) {
- /* go to RESTART State until RSCa is received */
- state_flag = 0;
- ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_RESTART);
+ if (!sngss7_test_ckt_flag(sngss7_info, FLAG_RESET_SENT)) {
+ ft_to_sngss7_rsc (ftdmchan);
+ sngss7_set_ckt_flag(sngss7_info, FLAG_RESET_SENT);
+ ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_RESTART);
+ } else if (sngss7_test_ckt_flag(sngss7_info, FLAG_RESET_TX_RSP)) {
+ state_flag = 0;
+ ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_DOWN);
+ } else {
+ /* go to RESTART State until RSCa is received */
+ state_flag = 0;
+ ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_RESTART);
+ }
} else {
/* if the hangup is from a rx RSC, rx GRS, or glare don't sent RLC */
if (!(sngss7_test_ckt_flag(sngss7_info, FLAG_RESET_RX)) &&
if ((sngss7_test_ckt_flag(sngss7_info, FLAG_RESET_TX)) &&
!(sngss7_test_ckt_flag(sngss7_info, FLAG_RESET_SENT))) {
- /* send a reset request */
- ft_to_sngss7_rsc (ftdmchan);
- sngss7_set_ckt_flag(sngss7_info, FLAG_RESET_SENT);
+ /* don't send out reset before finished hanging up if I'm in-use. */
+ if (!ftdm_test_flag(ftdmchan, FTDM_CHANNEL_INUSE)) {
+ /* send a reset request */
+ ft_to_sngss7_rsc (ftdmchan);
+ sngss7_set_ckt_flag(sngss7_info, FLAG_RESET_SENT);
+ }
} /* if (sngss7_test_ckt_flag(sngss7_info, FLAG_RESET_TX)) */