]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
freetdm: check protocol status after configuring the signaling
authorMoises Silva <moy@sangoma.com>
Wed, 28 Apr 2010 22:16:22 +0000 (18:16 -0400)
committerMoises Silva <moy@sangoma.com>
Wed, 28 Apr 2010 22:17:52 +0000 (18:17 -0400)
libs/freetdm/mod_freetdm/mod_freetdm.c
libs/freetdm/src/ftdm_io.c
libs/freetdm/src/include/freetdm.h
libs/freetdm/src/testanalog.c
libs/freetdm/src/testboost.c
libs/freetdm/src/testpri.c
libs/freetdm/src/testr2.c
libs/freetdm/src/testsangomaboost.c

index 710fdd614d2c7e3f30e5f5cdbfe688f3976497e0..842bde83477393646b2c115a44109641f19cfb6d 100644 (file)
@@ -2345,7 +2345,7 @@ static switch_status_t load_config(void)
                                }
                        }
 
-                       if (ftdm_configure_span("ss7", span, on_ss7_signal,
+                       if (ftdm_configure_span(span, "ss7", on_ss7_signal,
                                                                   "confnode", ss7confnode,
                                                                   "parameters", spanparameters,
                                                                   FTDM_TAG_END) != FTDM_SUCCESS) {
@@ -2450,7 +2450,7 @@ static switch_status_t load_config(void)
                                span_id = ftdm_span_get_id(span);
                        }
 
-                       if (ftdm_configure_span("analog", span, on_analog_signal, 
+                       if (ftdm_configure_span(span, "analog", on_analog_signal, 
                                                                   "tonemap", tonegroup, 
                                                                   "digit_timeout", &to,
                                                                   "max_dialstr", &max,
@@ -2566,7 +2566,7 @@ static switch_status_t load_config(void)
                        }
 
 
-                       if (ftdm_configure_span("analog_em", span, on_analog_signal, 
+                       if (ftdm_configure_span(span, "analog_em", on_analog_signal, 
                                                                   "tonemap", tonegroup, 
                                                                   "digit_timeout", &to,
                                                                   "max_dialstr", &max,
@@ -2683,7 +2683,7 @@ static switch_status_t load_config(void)
                                tonegroup = "us";
                        }
                        
-                       if (ftdm_configure_span("isdn", span, on_clear_channel_signal, 
+                       if (ftdm_configure_span(span, "isdn", on_clear_channel_signal, 
                                                                   "mode", mode,
                                                                   "dialect", dialect,
                                                                   "digit_timeout", &to,
@@ -2778,7 +2778,7 @@ static switch_status_t load_config(void)
                        }
                        
                        
-                       if (ftdm_configure_span("libpri", span, on_clear_channel_signal, 
+                       if (ftdm_configure_span(span, "libpri", on_clear_channel_signal, 
                                                                   "node", o_node,
                                                                   "switch", o_switch,
                                                                   "dp", o_dp,
@@ -2866,7 +2866,7 @@ static switch_status_t load_config(void)
                                span_id = ftdm_span_get_id(span);
                        }
 
-                       if (ftdm_configure_span_signaling("sangoma_boost", span, on_clear_channel_signal, spanparameters) != FTDM_SUCCESS) {
+                       if (ftdm_configure_span_signaling(span, "sangoma_boost", on_clear_channel_signal, spanparameters) != FTDM_SUCCESS) {
                                ftdm_log(FTDM_LOG_ERROR, "Error starting FreeTDM span %d error: %s\n", span_id, ftdm_span_get_last_error(span));
                                continue;
                        }
@@ -3001,7 +3001,7 @@ static switch_status_t load_config(void)
                                span_id = ftdm_span_get_id(span);
                        }
 
-                       if (ftdm_configure_span("r2", span, on_r2_signal, 
+                       if (ftdm_configure_span(span, "r2", on_r2_signal, 
                                "variant", variant, 
                                "max_ani", max_ani,
                                "max_dnis", max_dnis,
@@ -3420,14 +3420,14 @@ SWITCH_STANDARD_API(ft_function)
                tmp_path=switch_mprintf("%s%s%s.pcap", SWITCH_GLOBAL_dirs.log_dir, SWITCH_PATH_SEPARATOR, pcapfn);
                
                if(!strcasecmp(argv[2], "on")) {
-                       if (ftdm_configure_span("isdn", span, on_clear_channel_signal, "q931topcap", 1, "pcapfilename", tmp_path, FTDM_TAG_END) != FTDM_SUCCESS) {
+                       if (ftdm_configure_span(span, "isdn", on_clear_channel_signal, "q931topcap", 1, "pcapfilename", tmp_path, FTDM_TAG_END) != FTDM_SUCCESS) {
                                 ftdm_log(FTDM_LOG_WARNING, "Error couldn't (re-)enable Q931-To-Pcap!\n");
                                goto end;
                         } else {
                                stream->write_function(stream, "+OK\n");
                        }
                } else if(!strcasecmp(argv[2], "off")) {
-                       if (ftdm_configure_span("isdn", span, on_clear_channel_signal, "q931topcap", 0, FTDM_TAG_END) != FTDM_SUCCESS) {
+                       if (ftdm_configure_span(span, "isdn", on_clear_channel_signal, "q931topcap", 0, FTDM_TAG_END) != FTDM_SUCCESS) {
                                 ftdm_log(FTDM_LOG_ERROR, "Error couldn't enable Q931-To-Pcap!\n");
                                 goto end;
                        } else {
index 03c1853ddc93fe79f3b448b4628b5082f68189e7..0aedd8ff0e1247792b9107a9b697fc5b8936090f 100644 (file)
@@ -1369,7 +1369,6 @@ FT_DECLARE(ftdm_status_t) ftdm_channel_open_by_group(uint32_t group_id, ftdm_dir
                        status = check->fio->open(check);
                                
                        if (status == FTDM_SUCCESS) {
-                               ftdm_set_flag(check, FTDM_CHANNEL_INUSE);
                                ftdm_channel_open_chan(check);
                                *ftdmchan = check;
                                break;
@@ -1489,7 +1488,6 @@ FT_DECLARE(ftdm_status_t) ftdm_channel_open_by_span(uint32_t span_id, ftdm_direc
                        status = check->fio->open(check);
                                
                        if (status == FTDM_SUCCESS) {
-                               ftdm_set_flag(check, FTDM_CHANNEL_INUSE);
                                ftdm_channel_open_chan(check);
                                *ftdmchan = check;
                                break;
@@ -1639,7 +1637,7 @@ FT_DECLARE(ftdm_status_t) ftdm_channel_open(uint32_t span_id, uint32_t chan_id,
        status = FTDM_FAIL;
 
        if (ftdm_test_flag(check, FTDM_CHANNEL_READY) && (!ftdm_test_flag(check, FTDM_CHANNEL_INUSE) || 
-                                                                                                       (check->type == FTDM_CHAN_TYPE_FXS && check->token_count == 1))) {
+               (check->type == FTDM_CHAN_TYPE_FXS && check->token_count == 1))) {
                if (!ftdm_test_flag(check, FTDM_CHANNEL_OPEN)) {
                        status = check->fio->open(check);
                        if (status == FTDM_SUCCESS) {
@@ -3790,7 +3788,23 @@ FT_DECLARE(ftdm_status_t) ftdm_unload_modules(void)
        return FTDM_SUCCESS;
 }
 
-FT_DECLARE(ftdm_status_t) ftdm_configure_span(const char *type, ftdm_span_t *span, fio_signal_cb_t sig_cb, ...)
+static ftdm_status_t post_configure_span_channels(ftdm_span_t *span)
+{
+       unsigned i = 0;
+       ftdm_signaling_status_t status = FTDM_SUCCESS;
+       for (i = 1; i <= span->chan_count; i++) {
+               ftdm_channel_get_sig_status(span->channels[i], &status);
+               if (status == FTDM_SIG_STATE_UP) {
+                       ftdm_set_flag(span->channels[i], FTDM_CHANNEL_SIG_UP);
+               }
+       }
+       if (ftdm_test_flag(span, FTDM_SPAN_USE_CHAN_QUEUE)) {
+               status = ftdm_queue_create(&span->pendingchans, SPAN_PENDING_CHANS_QUEUE_SIZE);
+       }
+       return status;
+}
+
+FT_DECLARE(ftdm_status_t) ftdm_configure_span(ftdm_span_t *span, const char *type, fio_signal_cb_t sig_cb, ...)
 {
        ftdm_module_t *mod = (ftdm_module_t *) hashtable_search(globals.module_hash, (void *)type);
        ftdm_status_t status = FTDM_FAIL;
@@ -3812,8 +3826,8 @@ FT_DECLARE(ftdm_status_t) ftdm_configure_span(const char *type, ftdm_span_t *spa
                va_start(ap, sig_cb);
                status = mod->sig_configure(span, sig_cb, ap);
                va_end(ap);
-               if (status == FTDM_SUCCESS && ftdm_test_flag(span, FTDM_SPAN_USE_CHAN_QUEUE)) {
-                       status = ftdm_queue_create(&span->pendingchans, SPAN_PENDING_CHANS_QUEUE_SIZE);
+               if (status == FTDM_SUCCESS) {
+                       status = post_configure_span_channels(span);
                }
        } else {
                ftdm_log(FTDM_LOG_ERROR, "can't find '%s'\n", type);
@@ -3823,7 +3837,7 @@ FT_DECLARE(ftdm_status_t) ftdm_configure_span(const char *type, ftdm_span_t *spa
        return status;
 }
 
-FT_DECLARE(ftdm_status_t) ftdm_configure_span_signaling(const char *type, ftdm_span_t *span, fio_signal_cb_t sig_cb, ftdm_conf_parameter_t *parameters) 
+FT_DECLARE(ftdm_status_t) ftdm_configure_span_signaling(ftdm_span_t *span, const char *type, fio_signal_cb_t sig_cb, ftdm_conf_parameter_t *parameters) 
 {
        ftdm_module_t *mod = (ftdm_module_t *) hashtable_search(globals.module_hash, (void *)type);
        ftdm_status_t status = FTDM_FAIL;
@@ -3852,8 +3866,8 @@ FT_DECLARE(ftdm_status_t) ftdm_configure_span_signaling(const char *type, ftdm_s
 
        if (mod->configure_span_signaling) {
                status = mod->configure_span_signaling(span, sig_cb, parameters);
-               if (status == FTDM_SUCCESS && ftdm_test_flag(span, FTDM_SPAN_USE_CHAN_QUEUE)) {
-                       status = ftdm_queue_create(&span->pendingchans, SPAN_PENDING_CHANS_QUEUE_SIZE);
+               if (status == FTDM_SUCCESS) {
+                       status = post_configure_span_channels(span);
                }
        } else {
                ftdm_log(FTDM_LOG_ERROR, "Module %s did not implement the signaling configuration method\n", type);
index b61a835b0fbf85b25f53579c316042543fc3600c..c3bf93392d9f918372496eac74bca0e9cfd1219d 100644 (file)
@@ -1005,8 +1005,8 @@ FT_DECLARE(uint32_t) ftdm_channel_get_ph_id(const ftdm_channel_t *ftdmchan);
  *
  * \note This function does the same as ftdm_configure_span_signaling
  *
- * \param type The signaling type ("boost", "isdn" and others, this depends on the available signaling modules)
  * \param span The span to configure
+ * \param type The signaling type ("boost", "isdn" and others, this depends on the available signaling modules)
  * \param sig_cb The callback that the signaling stack will use to notify about events
  * \param ... variable argument list with "var", value sequence, the variable and values are signaling type dependant
  *        the last argument must be FTDM_TAG_END
@@ -1014,22 +1014,22 @@ FT_DECLARE(uint32_t) ftdm_channel_get_ph_id(const ftdm_channel_t *ftdmchan);
  * \retval FTDM_SUCCESS success 
  * \retval FTDM_FAIL failure 
  */
-FT_DECLARE(ftdm_status_t) ftdm_configure_span(const char *type, ftdm_span_t *span, fio_signal_cb_t sig_cb, ...);
+FT_DECLARE(ftdm_status_t) ftdm_configure_span(ftdm_span_t *span, const char *type, fio_signal_cb_t sig_cb, ...);
 #define FTDM_TAG_END NULL
 
 
 /*! 
  * \brief Configure span with a signaling type
  *
- * \param type The signaling type ("boost", "isdn" and others, this depends on the available signaling modules)
  * \param span The span to configure
+ * \param type The signaling type ("boost", "isdn" and others, this depends on the available signaling modules)
  * \param sig_cb The callback that the signaling stack will use to notify about events
  * \param ... variable argument list with "var", value sequence, the variable and values are signaling type dependant
  *
  * \retval FTDM_SUCCESS success 
  * \retval FTDM_FAIL failure 
  */
-FT_DECLARE(ftdm_status_t) ftdm_configure_span_signaling(const char *type, ftdm_span_t *span, fio_signal_cb_t sig_cb, ftdm_conf_parameter_t *parameters);
+FT_DECLARE(ftdm_status_t) ftdm_configure_span_signaling(ftdm_span_t *span, const char *type, fio_signal_cb_t sig_cb, ftdm_conf_parameter_t *parameters);
 
 /*! 
  * \brief Start the span signaling (must call ftdm_configure_span_signaling first)
index ccfa33a1615fb690965d8af51fcd82d51fa03928..83bace9b4a4200db5102a870cd8a9f40cb95f1df 100644 (file)
@@ -100,7 +100,7 @@ int main(int argc, char *argv[])
        }
        
 
-       if (ftdm_configure_span("analog", span, on_signal, 
+       if (ftdm_configure_span(span, "analog", on_signal, 
                                                   "tonemap", "us", 
                                                   "digit_timeout", &digit_timeout,
                                                   "max_dialstr", &max_dialstr,
index 93d7d894af155966b03e26f139105d02f66a6057..f55a46a11a6978dc89965525bd9c7df461181e57 100644 (file)
@@ -53,7 +53,7 @@ int main(int argc, char *argv[])
        parameters[1].var = "signalling";       
        parameters[1].val = "pri_cpe";  
        parameters[2].var = NULL;
-       if (ftdm_configure_span_signaling("sangoma_boost", span, on_signal, parameters) == FTDM_SUCCESS) {
+       if (ftdm_configure_span_signaling(span, "sangoma_boost", on_signal, parameters) == FTDM_SUCCESS) {
                ftdm_span_start(span);
        } else {
                fprintf(stderr, "Error starting SS7_BOOST\n");
index eb498f3b80fe384eb071d2b09fadf0d299d7819f..b75295d841a35e2953aa52c72205814f8f3881a6 100644 (file)
@@ -128,7 +128,7 @@ int main(int argc, char *argv[])
 
 
        if (ftdm_configure_span(
-                                                  "libpri", span, on_signal,
+                                                  span, "libpri", on_signal,
                                                   "node", "cpe",
                                                   "switch", "euroisdn",
                                                   "dp", "unknown",
index 8ceb527e588d052a3c6c079823635989b7533968..8ac90c59fd43da53f75617e041010885beed4021 100644 (file)
@@ -46,7 +46,7 @@ int main(int argc, char *argv[])
        
 
 
-       if (ftdm_configure_span("r2", span, on_r2_signal,
+       if (ftdm_configure_span(span, "r2", on_r2_signal,
                                                   "variant", "mx",
                                                   "max_ani", 10,
                                                   "max_dnis", 4,
index 7dbe32e83d99ad5743195a693bd0f269504c62ee..b85bcc0634eec45c48b76efa2ca770036b3e03df 100644 (file)
@@ -339,7 +339,7 @@ int main(int argc, char *argv[])
        parameters[3].var = NULL;
 
        /* send the configuration values down to the stack */
-       if (ftdm_configure_span_signaling("sangoma_boost", span, on_signaling_event, parameters) != FTDM_SUCCESS) {
+       if (ftdm_configure_span_signaling(span, "sangoma_boost", on_signaling_event, parameters) != FTDM_SUCCESS) {
                fprintf(stderr, "Error configuring sangoma_boost signaling abstraction in span %s\n", ftdm_span_get_name(span));
                goto done;
        }