]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
Added signalling state handle for boost modules
authorDavid Yat Sin <dyatsin@sangoma.com>
Fri, 23 Apr 2010 21:34:57 +0000 (17:34 -0400)
committerDavid Yat Sin <dyatsin@sangoma.com>
Fri, 23 Apr 2010 21:34:57 +0000 (17:34 -0400)
libs/freetdm/mod_freetdm/mod_freetdm.c
libs/freetdm/src/ftdm_io.c
libs/freetdm/src/ftmod/ftmod_sangoma_boost/ftmod_sangoma_boost.c
libs/freetdm/src/include/ftdm_types.h

index fc3f1c4ca9c5deb0af7692ef7a10d9d6b2214584..269908ba27c407a29022472f833668ef5216f0f1 100644 (file)
@@ -1950,6 +1950,16 @@ static FIO_SIGNAL_CB_FUNCTION(on_clear_channel_signal)
                                        sigmsg->channel->span_id, sigmsg->channel->chan_id, (uuid) ? uuid : "N/A");
                        }
                }
+               break;
+       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);
+                       }
+               }
+               break;
        default:
                {
                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Unhandled msg type %d for channel %d:%d\n",
@@ -2992,6 +3002,8 @@ void dump_chan(ftdm_span_t *span, uint32_t chan_id, switch_stream_handle_t *stre
                                                   "chan_id: %u\n"
                                                   "physical_span_id: %u\n"
                                                   "physical_chan_id: %u\n"
+                                                  "physical_state: %s\n"
+                                                  "signaling_state: %s\n"
                                                   "type: %s\n"
                                                   "state: %s\n"
                                                   "last_state: %s\n"
@@ -3009,6 +3021,8 @@ void dump_chan(ftdm_span_t *span, uint32_t chan_id, switch_stream_handle_t *stre
                                                   span->channels[chan_id]->chan_id,
                                                   span->channels[chan_id]->physical_span_id,
                                                   span->channels[chan_id]->physical_chan_id,
+                                                (span->channels[chan_id]->alarm_flags) ? "DOWN" : "UP",
+                                            ftdm_test_flag(span->channels[chan_id], FTDM_CHANNEL_SIG_UP) ? "UP" : "DOWN",
                                                   ftdm_chan_type2str(span->channels[chan_id]->type),
                                                   ftdm_channel_state2str(span->channels[chan_id]->state),
                                                   ftdm_channel_state2str(span->channels[chan_id]->last_state),
@@ -3037,6 +3051,8 @@ void dump_chan_xml(ftdm_span_t *span, uint32_t chan_id, switch_stream_handle_t *
                                                   "  <chan-id>%u</chan-id>>\n"
                                                   "  <physical-span-id>%u</physical-span-id>\n"
                                                   "  <physical-chan-id>%u</physical-chan-id>\n"
+                                                  "  <physical-state>%s</physical-state>\n"
+                                                  "  <signaling-state>%s</signaling-state>\n"
                                                   "  <type>%s</type>\n"
                                                   "  <state>%s</state>\n"
                                                   "  <last-state>%s</last-state>\n"
@@ -3055,6 +3071,8 @@ void dump_chan_xml(ftdm_span_t *span, uint32_t chan_id, switch_stream_handle_t *
                                                   span->channels[chan_id]->chan_id,
                                                   span->channels[chan_id]->physical_span_id,
                                                   span->channels[chan_id]->physical_chan_id,
+                                                  (span->channels[chan_id]->alarm_flags) ? "DOWN" : "UP",
+                                            ftdm_test_flag(span->channels[chan_id], FTDM_CHANNEL_SIG_UP) ? "UP" : "DOWN",
                                                   ftdm_chan_type2str(span->channels[chan_id]->type),
                                                   ftdm_channel_state2str(span->channels[chan_id]->state),
                                                   ftdm_channel_state2str(span->channels[chan_id]->last_state),
index f00e7988e3d48d68ea0b8a3cec87e92b72cb4595..86fbd88da451dedb8743dc02e8e3082a277d53a1 100644 (file)
@@ -1279,9 +1279,10 @@ FT_DECLARE(ftdm_status_t) ftdm_channel_open_by_group(uint32_t group_id, ftdm_dir
                if (!(check = group->channels[i])) {
                        status = FTDM_FAIL;
                        break;
-               }
+               } 
 
-               if (ftdm_test_flag(check, FTDM_CHANNEL_READY) && 
+               if (ftdm_test_flag(check, FTDM_CHANNEL_READY) &&
+                       ftdm_test_flag(check, FTDM_CHANNEL_SIG_UP) &&
                        !ftdm_test_flag(check, FTDM_CHANNEL_INUSE) && 
                        !ftdm_test_flag(check, FTDM_CHANNEL_SUSPENDED) && 
                        !ftdm_test_flag(check, FTDM_CHANNEL_IN_ALARM) &&
@@ -1401,7 +1402,8 @@ FT_DECLARE(ftdm_status_t) ftdm_channel_open_by_span(uint32_t span_id, ftdm_direc
                        break;
                }
                        
-               if (ftdm_test_flag(check, FTDM_CHANNEL_READY) && 
+               if (ftdm_test_flag(check, FTDM_CHANNEL_READY) &&
+                       ftdm_test_flag(check, FTDM_CHANNEL_SIG_UP) &&
                        !ftdm_test_flag(check, FTDM_CHANNEL_INUSE) && 
                        !ftdm_test_flag(check, FTDM_CHANNEL_SUSPENDED) && 
                        !ftdm_test_flag(check, FTDM_CHANNEL_IN_ALARM) && 
index a45c5189d31c6b4fd0f7a456ce1613e64877b3d2..ef641deb51adcf2406046563853e9d3e8a3017e9 100644 (file)
@@ -2119,6 +2119,7 @@ static FIO_SIG_UNLOAD_FUNCTION(ftdm_sangoma_boost_destroy)
 static ftdm_status_t ftdm_sangoma_boost_start(ftdm_span_t *span)
 {
        int err;
+
        ftdm_sangoma_boost_data_t *sangoma_boost_data = span->signal_data;
        ftdm_set_flag(sangoma_boost_data, FTDM_SANGOMA_BOOST_RUNNING);
        err=ftdm_thread_create_detached(ftdm_sangoma_boost_run, span);
@@ -2137,23 +2138,23 @@ static ftdm_status_t ftdm_sangoma_boost_start(ftdm_span_t *span)
 
 static ftdm_status_t ftdm_sangoma_boost_stop(ftdm_span_t *span)
 {
+       int cnt = 10;
        ftdm_status_t status = FTDM_SUCCESS;
        ftdm_sangoma_boost_data_t *sangoma_boost_data = span->signal_data;
        if (sangoma_boost_data->sigmod) {
+
+               /* FIXME: we should make sure the span thread is stopped (use pthread_kill or freetdm thread kill function) */
                /* I think stopping the span before destroying the queue makes sense
                   otherwise may be boost events would still arrive when the queue is already destroyed! */
                status = sangoma_boost_data->sigmod->stop_span(span);
 
                ftdm_queue_enqueue(sangoma_boost_data->boost_queue, NULL);
-       }
-
-       while (ftdm_test_flag(sangoma_boost_data, FTDM_SANGOMA_BOOST_RUNNING)) {
-               ftdm_log(FTDM_LOG_DEBUG, "Waiting for boost thread\n");
-               ftdm_sleep(100);
-       }
-
-       if (sangoma_boost_data->sigmod) {
+               while(ftdm_test_flag(sangoma_boost_data, FTDM_SANGOMA_BOOST_RUNNING) && cnt-- > 0) {
+                       ftdm_log(FTDM_LOG_DEBUG, "Waiting for boost thread\n");
+                       ftdm_sleep(500);
+               }
                ftdm_queue_destroy(&sangoma_boost_data->boost_queue);
+               return status;
        }
        return status;
 }
index bf7720efd1b8812a41669bb884afdef5bda0e09e..90562104dbfebbf73c58e2cc8b2ebb81dba016cb 100644 (file)
@@ -415,6 +415,7 @@ typedef enum {
        FTDM_CHANNEL_USE_RX_GAIN = (1 << 25),
        FTDM_CHANNEL_USE_TX_GAIN = (1 << 26),
        FTDM_CHANNEL_IN_ALARM = (1 << 27),
+       FTDM_CHANNEL_SIG_UP = (1 << 28),
 } ftdm_channel_flag_t;
 #if defined(__cplusplus) && defined(WIN32) 
     // fix C2676