]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
freetdm: fix code using raw_data as an integer when is actually null
authorDavid Yat Sin <dyatsin@sangoma.com>
Tue, 31 Aug 2010 23:05:37 +0000 (19:05 -0400)
committerMoises Silva <moy@sangoma.com>
Thu, 2 Sep 2010 16:51:56 +0000 (12:51 -0400)
libs/freetdm/mod_freetdm/mod_freetdm.c
libs/freetdm/src/ftdm_io.c
libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.c
libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_cntrl.c

index 0117fcedf15f9e11de4d30e84c886e6affe47827..55f899e5c0d409c296ec8169f05d74fb102ad814 100755 (executable)
@@ -2117,10 +2117,10 @@ static FIO_SIGNAL_CB_FUNCTION(on_clear_channel_signal)
                }
                break;
        case FTDM_SIGEVENT_SIGSTATUS_CHANGED:
-               {
-                       ftdm_signaling_status_t *sigstatus = (ftdm_signaling_status_t*)(sigmsg->raw_data);
+               {       
+                       ftdm_signaling_status_t sigstatus = sigmsg->raw_data ? *((ftdm_signaling_status_t*)(sigmsg->raw_data)) : sigmsg->sigstatus;
                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "%d:%d signalling changed to :%s\n",
-                                       spanid, chanid, ftdm_signaling_status2str(*sigstatus));
+                                       spanid, chanid, ftdm_signaling_status2str(sigstatus));
                }
                break;
        default:
index 7f27177024514901131686b829a7e3a6f25f4764..dcb74d94fc06fb6b25d95ef1e717cb094c03d3f2 100644 (file)
@@ -4473,10 +4473,13 @@ FT_DECLARE(ftdm_status_t) ftdm_span_send_signal(ftdm_span_t *span, ftdm_sigmsg_t
        switch (sigmsg->event_id) {
 
        case FTDM_SIGEVENT_SIGSTATUS_CHANGED:
-               if (*((ftdm_signaling_status_t*)(sigmsg->raw_data)) == FTDM_SIG_STATE_UP) {
-                       ftdm_set_flag(sigmsg->channel, FTDM_CHANNEL_SIG_UP);
-               } else {
-                       ftdm_clear_flag(sigmsg->channel, FTDM_CHANNEL_SIG_UP);
+               {
+                       ftdm_signaling_status_t sigstatus = ftdm_test_flag(span, FTDM_SPAN_USE_SIGNALS_QUEUE) ? sigmsg->sigstatus : *((ftdm_signaling_status_t*)(sigmsg->raw_data));
+                       if (sigstatus == FTDM_SIG_STATE_UP) {
+                               ftdm_set_flag(sigmsg->channel, FTDM_CHANNEL_SIG_UP);
+                       } else {
+                               ftdm_clear_flag(sigmsg->channel, FTDM_CHANNEL_SIG_UP);
+                       }
                }
                break;
 
index a98429da738bf061f434e56ff56abcadccc57ff5..ef440634c86638730bf146d099c4c14fd403a8dc 100644 (file)
@@ -278,11 +278,11 @@ static void *ftdm_sangoma_isdn_run(ftdm_thread_t *me, void *obj)
                                        ftdm_channel_unlock(ftdmchan);
                                }
 
-                               /* Check if there are any timers to process */
                                while ((sngisdn_event = ftdm_queue_dequeue(signal_data->event_queue))) {
                                        ftdm_sangoma_isdn_process_stack_event(span, sngisdn_event);
                                        ftdm_safe_free(sngisdn_event);
-                               }
+                               }     
+        ftdm_span_trigger_signals(span); 
                                break;
                        case FTDM_TIMEOUT:
                                /* twiddle */
@@ -793,6 +793,7 @@ static FIO_CONFIGURE_SPAN_SIGNALING_FUNCTION(ftdm_sangoma_isdn_span_config)
        span->set_channel_sig_status = ftdm_sangoma_isdn_set_sig_status;
        span->state_map = &sangoma_isdn_state_map;
        ftdm_set_flag(span, FTDM_SPAN_USE_CHAN_QUEUE);
+       ftdm_set_flag(span, FTDM_SPAN_USE_SIGNALS_QUEUE);
 
        if (span->trunk_type == FTDM_TRUNK_BRI_PTMP ||
                span->trunk_type == FTDM_TRUNK_BRI) {
index 5299c91b44ed4e9062562a6a9a707e2cfa120619..7aba6a66ce7f23ae6d3c617d49f724bfabff41d2 100644 (file)
@@ -48,7 +48,7 @@ void sngisdn_set_chan_sig_status(ftdm_channel_t *ftdmchan, ftdm_signaling_status
        sig.span_id = ftdmchan->span_id;
        sig.channel = ftdmchan;
        sig.event_id = FTDM_SIGEVENT_SIGSTATUS_CHANGED;
-       sig.raw_data = &status;
+       sig.sigstatus = status;
        ftdm_span_send_signal(ftdmchan->span, &sig);
        return;
 }