]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
Added new channel type clear-channel for channels that do not have a signalling module
authorDavid Yat Sin <dyatsin@sangoma.com>
Thu, 26 Jul 2012 00:41:01 +0000 (20:41 -0400)
committerDavid Yat Sin <dyatsin@sangoma.com>
Thu, 26 Jul 2012 00:41:01 +0000 (20:41 -0400)
libs/freetdm/src/ftdm_io.c
libs/freetdm/src/ftmod/ftmod_wanpipe/ftmod_wanpipe.c
libs/freetdm/src/include/freetdm.h

index ec623ad6e692df41241c7db2ae927770dfa42edd..2a5f1cb6ee6d58392dd2c945f5b76de4a58a25e9 100644 (file)
@@ -1470,13 +1470,23 @@ FT_DECLARE(ftdm_status_t) ftdm_group_channel_use_count(ftdm_group_t *group, uint
 
 static __inline__ int chan_is_avail(ftdm_channel_t *check)
 {
-       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) ||
-               check->state != FTDM_CHANNEL_STATE_DOWN) {
-               return 0;
+       if (check->type == FTDM_CHAN_TYPE_CLEAR) {
+               if (!ftdm_test_flag(check, FTDM_CHANNEL_READY) ||
+                       ftdm_test_flag(check, FTDM_CHANNEL_INUSE) ||
+                       ftdm_test_flag(check, FTDM_CHANNEL_SUSPENDED) ||
+                       ftdm_test_flag(check, FTDM_CHANNEL_IN_ALARM) ||
+                       check->state != FTDM_CHANNEL_STATE_DOWN) {
+                       return 0;
+               }
+       } else {
+               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) ||
+                       check->state != FTDM_CHANNEL_STATE_DOWN) {
+                       return 0;
+               }
        }
        return 1;
 }
@@ -5129,6 +5139,12 @@ static ftdm_status_t load_config(void)
                                } else {
                                        ftdm_log(FTDM_LOG_WARNING, "Cannot add EM channels to a non-EM trunk!\n");
                                }
+                       } else if (!strcasecmp(var, "clear-channel")) {
+                               unsigned chans_configured = 0;
+                               chan_config.type = FTDM_CHAN_TYPE_CLEAR;
+                               if (ftdm_configure_span_channels(span, val, &chan_config, &chans_configured) == FTDM_SUCCESS) {
+                                       configured += chans_configured;
+                               }
                        } else if (!strcasecmp(var, "b-channel")) {
                                unsigned chans_configured = 0;
                                chan_config.type = FTDM_CHAN_TYPE_B;
index 87ba7ed7283d0483fcfbda8d142860ffbac31c11..85ccba53bb2fdef18878b989e9022432fda0aadc 100755 (executable)
@@ -306,7 +306,8 @@ static unsigned wp_open_range(ftdm_span_t *span, unsigned spanno, unsigned start
                        if (type == FTDM_CHAN_TYPE_FXS 
                        || type == FTDM_CHAN_TYPE_FXO 
                        || type == FTDM_CHAN_TYPE_CAS
-                       || type == FTDM_CHAN_TYPE_B) {
+                       || type == FTDM_CHAN_TYPE_B 
+                       || type == FTDM_CHAN_TYPE_CLEAR) {
                                int err;
                                
                                hwec_str = "unavailable";
index f7de8519b7055413efb55216040d6714252c477b..a45fdfe66114c9ba125f458590a5580a92eea583 100755 (executable)
@@ -181,9 +181,10 @@ typedef enum {
        FTDM_CHAN_TYPE_FXO, /*!< FXO analog channel */
        FTDM_CHAN_TYPE_EM, /*!< E & M channel */
        FTDM_CHAN_TYPE_CAS, /*!< CAS channel */
+       FTDM_CHAN_TYPE_CLEAR, /* Clear channnel - no signalling module */
        FTDM_CHAN_TYPE_COUNT /*!< Count of channel types */
 } ftdm_chan_type_t;
-#define CHAN_TYPE_STRINGS "B", "DQ921", "DQ931", "FXS", "FXO", "EM", "CAS", "INVALID"
+#define CHAN_TYPE_STRINGS "B", "DQ921", "DQ931", "FXS", "FXO", "EM", "CAS", "CLEAR", "INVALID"
 /*! \brief transform from channel type to string and from string to channel type 
  * ftdm_str2ftdm_chan_type transforms a channel string (ie: "FXO" to FTDM_CHAN_TYPE_FXO) 
  * ftdm_chan_type2str transforms a channel type to string (ie: FTDM_CHAN_TYPE_B to "B")