]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
added code to ftdm_sangoma_ss7_run api to avoid code execution for M2UA
authorkapil <kgupta@sangoma.com>
Fri, 18 May 2012 06:54:27 +0000 (12:24 +0530)
committerkapil <kgupta@sangoma.com>
Fri, 18 May 2012 06:54:27 +0000 (12:24 +0530)
SG

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

index 3c71b6741132f5d59b44f1669d513f5d1600530d..dbb1c1974c071bc13b3fe1f046b3ae27824ce501 100644 (file)
@@ -356,14 +356,7 @@ static void *ftdm_sangoma_ss7_run(ftdm_thread_t * me, void *obj)
        /* set IN_THREAD flag so that we know this thread is running */
        ftdm_set_flag (ftdmspan, FTDM_SPAN_IN_THREAD);
 
-       if(SNG_SS7_OPR_MODE_M2UA_SG == g_ftdm_operating_mode){
-               ftdm_log (FTDM_LOG_INFO, "FreeTDM running as M2UA_SG mode, freetdm dont have to do anything \n"); 
 
-               while (ftdm_running () && !(ftdm_test_flag (ftdmspan, FTDM_SPAN_STOP_THREAD))) {
-                       continue;
-               }
-               goto ftdm_sangoma_ss7_stop;
-       }
 
        /* get an interrupt queue for this span for channel state changes */
        if (ftdm_queue_get_interrupt (ftdmspan->pendingchans, &ftdm_sangoma_ss7_int[0]) != FTDM_SUCCESS) {
@@ -377,6 +370,40 @@ static void *ftdm_sangoma_ss7_run(ftdm_thread_t * me, void *obj)
                goto ftdm_sangoma_ss7_run_exit;
        }
 
+       if(SNG_SS7_OPR_MODE_M2UA_SG == g_ftdm_operating_mode){
+               ftdm_log (FTDM_LOG_INFO, "FreeTDM running as M2UA_SG mode, freetdm dont have to do anything \n"); 
+
+               while (ftdm_running () && !(ftdm_test_flag (ftdmspan, FTDM_SPAN_STOP_THREAD))) {
+
+                       switch ((ftdm_interrupt_multiple_wait(ftdm_sangoma_ss7_int, ftdm_array_len(ftdm_sangoma_ss7_int), 100))) {
+
+                               case FTDM_SUCCESS:      /* process all pending state changes */
+
+                                       SS7_DEVEL_DEBUG ("ftdm_interrupt_wait FTDM_SUCCESS on span = %d\n",ftdmspan->span_id);
+
+                                       /**********************************************************************/
+                               case FTDM_TIMEOUT:
+                                       SS7_DEVEL_DEBUG ("ftdm_interrupt_wait timed-out on span = %d\n",ftdmspan->span_id);
+
+                                       break;
+                                       /**********************************************************************/
+                               case FTDM_FAIL:
+                                       SS7_ERROR ("ftdm_interrupt_wait returned error!\non span = %d\n", ftdmspan->span_id);
+
+                                       break;
+                                       /**********************************************************************/
+                               default:
+                                       SS7_ERROR("ftdm_interrupt_wait returned with unknown code on span = %d\n",ftdmspan->span_id);
+
+                                       break;
+                                       /**********************************************************************/
+                       }
+
+
+               }
+               goto ftdm_sangoma_ss7_stop;
+       }
+
        while (ftdm_running () && !(ftdm_test_flag (ftdmspan, FTDM_SPAN_STOP_THREAD))) {
                int x = 0;
                if (b_alarm_test) {