]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
freetdm: on hander do not go up unless all channel blocks/restes are cleared
authorNenad Corbic <ncorbic@sangoma.com>
Thu, 3 Nov 2011 18:29:47 +0000 (14:29 -0400)
committerNenad Corbic <ncorbic@sangoma.com>
Thu, 3 Nov 2011 18:29:47 +0000 (14:29 -0400)
         Added more documentation in main

libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_handle.c
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.c

index 3733a619a7e80cb79b36b9f676fb6b1cc18ea866..0f3515097ba36b8d91fa66da4413ef32fc81de96 100644 (file)
@@ -2571,7 +2571,9 @@ ftdm_status_t handle_cgu_req(uint32_t suInstId, uint32_t spInstId, uint32_t circ
                sigev.channel = ftdmchan;
 
                /* bring the sig status down */
-               sngss7_set_sig_status(sngss7_info, FTDM_SIG_STATE_UP);
+               if (sngss7_channel_status_clear(sngss7_info)) {
+                       sngss7_set_sig_status(sngss7_info, FTDM_SIG_STATE_UP);
+               }
        
                /* unlock the channel again before we exit */
                ftdm_mutex_unlock(ftdmchan->mutex);
index 1453581214314cf729ea8ea6923251663b0d76de..c4854f860c3b2fdd6887ec4d6d19d8b6af92fdc2 100644 (file)
@@ -1032,13 +1032,6 @@ ftdm_status_t ftdm_sangoma_ss7_process_state_change (ftdm_channel_t * ftdmchan)
                SS7_DEBUG_CHAN(ftdmchan,"RESTART: Current flags: ckt=0x%X, blk=0x%X\n", 
                                                                        sngss7_info->ckt_flags,
                                                                        sngss7_info->blk_flags);
-       
-#if 0  
-               if (sngss7_test_ckt_blk_flag(sngss7_info, FLAG_GRP_HW_UNBLK_TX) && sngss7_test_ckt_flag(sngss7_info, FLAG_INFID_RESUME)) {
-                       ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_SUSPENDED);
-                       break;
-               }
-#endif
 
                if (sngss7_test_ckt_blk_flag(sngss7_info, FLAG_CKT_UCIC_BLOCK)) {
                        if ((sngss7_test_ckt_flag(sngss7_info, FLAG_RESET_RX)) ||
@@ -1175,8 +1168,11 @@ ftdm_status_t ftdm_sangoma_ss7_process_state_change (ftdm_channel_t * ftdmchan)
                                if (!sngss7_reset_status_clear(sngss7_info)) {
                                        goto suspend_goto_restart;
                                } else if (!sngss7_block_status_clear(sngss7_info)) {
-                                       /* Do nothing just go and handle blocks */
+                                       /* Do nothing just go through and handle blocks below */
                                } else {
+                                       /* This should not happen as above function tests
+                                        * for reset and blocks */
+                                       SS7_ERROR_CHAN(ftdmchan, "Invalid code path: sngss7_channel_status_clear reset and block are both cleared%s\n", "");
                                        goto suspend_goto_restart;
                                }
                        } else {
@@ -1195,6 +1191,7 @@ ftdm_status_t ftdm_sangoma_ss7_process_state_change (ftdm_channel_t * ftdmchan)
                        }
 
                        /* Wait for RESUME */
+                       /* FIXME: Check if this is a correct action to wait for RESUME */
                        goto suspend_goto_last;
                } /* if (sngss7_test_ckt_flag(sngss7_info, FLAG_INFID_PAUSED)) { */
 
@@ -1290,19 +1287,20 @@ ftdm_status_t ftdm_sangoma_ss7_process_state_change (ftdm_channel_t * ftdmchan)
 
                        goto suspend_goto_last;
                }
-#if 0
-//jz: there is no such thing of "remote hw block". for receiver, there are only block and unblock
-//nc: yes there is: its part of the CGB - however its handled in ss7_handle.c
 
                /**********************************************************************/
-               // jz: hardware block/unblock rx
+#if 0
+               /* This logic is handled in the handle_cgu_req and handle_cgb_req */
+
                if (sngss7_test_ckt_blk_flag (sngss7_info, FLAG_GRP_HW_BLOCK_RX ) &&
                        !sngss7_test_ckt_blk_flag(sngss7_info, FLAG_GRP_HW_BLOCK_RX_DN )) {
 
                        SS7_DEBUG_CHAN(ftdmchan, "Processing FLAG_GRP_HW_BLOCK_RX flag %s\n", "");
 
                        sngss7_set_sig_status(sngss7_info, FTDM_SIG_STATE_DOWN);
-                       ft_to_sngss7_bla(ftdmchan);
+                       
+                       /* FIXME: Transmit CRG Ack */
+
                        sngss7_set_ckt_blk_flag(sngss7_info, FLAG_GRP_HW_BLOCK_RX_DN);
 
                        goto suspend_goto_last;
@@ -1319,16 +1317,13 @@ ftdm_status_t ftdm_sangoma_ss7_process_state_change (ftdm_channel_t * ftdmchan)
                                sngss7_set_sig_status(sngss7_info, FTDM_SIG_STATE_UP);
                        }
 
-                       if (sngss7_tx_block_status_clear(sngss7_info)) {
-                               ft_to_sngss7_uba(ftdmchan);
-                       }
+                       /* Transmit CRU Ack */
 
                        goto suspend_goto_last;
                }
 #endif
 
 
-
                /**********************************************************************/
                if (sngss7_test_ckt_blk_flag(sngss7_info, FLAG_CKT_MN_BLOCK_TX) &&
                        !sngss7_test_ckt_blk_flag(sngss7_info, FLAG_CKT_MN_BLOCK_TX_DN)) {
@@ -1861,9 +1856,6 @@ static FIO_SIG_LOAD_FUNCTION(ftdm_sangoma_ss7_init)
        sng_isup_version(&major, &minor, &build);
        SS7_INFO("Loaded LibSng-SS7 %d.%d.%d\n", major, minor, build);
 
-       /* crash on assert fail */
-       ftdm_global_set_crash_policy (FTDM_CRASH_ON_ASSERT);
-
        return FTDM_SUCCESS;
 }