]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
freetdm:Changed freetdm variables
authorDavid Yat Sin <dyatsin@sangoma.com>
Tue, 30 Nov 2010 17:57:43 +0000 (12:57 -0500)
committerDavid Yat Sin <dyatsin@sangoma.com>
Tue, 30 Nov 2010 17:57:43 +0000 (12:57 -0500)
1  2 
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.h
libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_cfg.c
libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_hndl.c
libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_out.c
libs/freetdm/src/ftmod/ftmod_wanpipe/ftmod_wanpipe.c

Simple merge
index d46f439b72b4f38c493a06ea2103403706cb34db,6957f9925e860900008e85e5e275718c50108c65..9cddecb04e293666ba80e2058ec0de71115c228c
@@@ -201,8 -231,8 +231,9 @@@ typedef struct sngisdn_span_data 
        uint8_t                 facility;
        int8_t                  facility_timeout;
        uint8_t                 num_local_numbers;
+       uint8_t                 ignore_cause_value;
        uint8_t                 timer_t3;
 +      uint8_t                 restart_opt;
        char*                   local_numbers[SNGISDN_NUM_LOCAL_NUMBERS];
        ftdm_sched_t    *sched;
        ftdm_queue_t    *event_queue;
index f6d670c45ecefe3d2c3af7c18629b8800b78591f,6b4e73ab2584898dbd62e22a6bb569437a5c1e46..6afab42a89913970b4867b23ae11ed8c8b55c0bb
@@@ -190,9 -201,9 +201,10 @@@ ftdm_status_t ftmod_isdn_parse_cfg(ftdm
        signal_data->min_digits = 8;
        signal_data->overlap_dial = SNGISDN_OPT_DEFAULT;
        signal_data->setup_arb = SNGISDN_OPT_DEFAULT;
-       signal_data->facility_ie_decode = SNGISDN_OPT_TRUE;
+       signal_data->facility_ie_decode = SNGISDN_OPT_DEFAULT;
+       signal_data->ignore_cause_value = SNGISDN_OPT_DEFAULT;
        signal_data->timer_t3 = 8;
 +      signal_data->restart_opt = SNGISDN_OPT_DEFAULT;
  
        signal_data->link_id = span->span_id;
        span->default_caller_data.bearer_capability = IN_ITC_SPEECH;
                } else if (!strcasecmp(var, "min_digits")) {
                        signal_data->min_digits = atoi(val);
                } else if (!strcasecmp(var, "outbound-called-ton")) {
-                       ftdm_span_set_ton(val, &span->default_caller_data.dnis.type);
+                       ftdm_set_ton(val, &span->default_caller_data.dnis.type);
                } else if (!strcasecmp(var, "outbound-called-npi")) {
-                       ftdm_span_set_npi(val, &span->default_caller_data.dnis.plan);
+                       ftdm_set_npi(val, &span->default_caller_data.dnis.plan);
                } else if (!strcasecmp(var, "outbound-calling-ton")) {
-                       ftdm_span_set_ton(val, &span->default_caller_data.cid_num.type);
+                       ftdm_set_ton(val, &span->default_caller_data.cid_num.type);
                } else if (!strcasecmp(var, "outbound-calling-npi")) {
-                       ftdm_span_set_npi(val, &span->default_caller_data.cid_num.plan);
+                       ftdm_set_npi(val, &span->default_caller_data.cid_num.plan);
                } else if (!strcasecmp(var, "outbound-rdnis-ton")) {
-                       ftdm_span_set_ton(val, &span->default_caller_data.rdnis.type);
+                       ftdm_set_ton(val, &span->default_caller_data.rdnis.type);
                } else if (!strcasecmp(var, "outbound-rdnis-npi")) {
-                       ftdm_span_set_npi(val, &span->default_caller_data.rdnis.plan);
+                       ftdm_set_npi(val, &span->default_caller_data.rdnis.plan);
                } else if (!strcasecmp(var, "outbound-bearer_cap")) {
-                       ftdm_span_set_bearer_capability(val, &span->default_caller_data.bearer_capability);
+                       ftdm_set_bearer_capability(val, (uint8_t*)&span->default_caller_data.bearer_capability);
                } else if (!strcasecmp(var, "outbound-bearer_layer1")) {
-                       ftdm_span_set_bearer_layer1(val, &span->default_caller_data.bearer_layer1);
 -                      ftdm_set_bearer_layer1(val, (uint8_t*)&span->default_caller_data.bearer_layer1);
 -              } else if (!strcasecmp(var, "local-number")) {
++                      ftdm_set_bearer_layer1(val, &span->default_caller_data.bearer_layer1);
 +              } else if (!strcasecmp(var, "channel-restart-on-link-up")) {
-                       if (!strcasecmp(val, "yes")) {
-                               signal_data->restart_opt = SNGISDN_OPT_TRUE;
-                       } else if (!strcasecmp(val, "no")) {
-                               signal_data->restart_opt = SNGISDN_OPT_FALSE;
-                       } else {
-                               ftdm_log(FTDM_LOG_ERROR, "Invalid value for parameter:%s:%s\n", var, val);
-                       }
-                       
++                      parse_yesno(var, val, &signal_data->restart_opt);
 +              } else if (!strcasecmp(var, "local-number")) {                  
                        if (add_local_number(val, span) != FTDM_SUCCESS) {
                                return FTDM_FAIL;
                        }
index f3fc23e317f9930ea5a5fc7c84932de92d427f61,6bf0c25212ce4825f2b6f868dd6d11b3f0b6b798..c4e9f4a33f3e4051740b13b66b6005ef8f1e2998
@@@ -151,33 -154,31 +153,34 @@@ void sngisdn_process_con_ind (sngisdn_e
  
                        if (conEvnt->facilityStr.eh.pres) {
                                if (signal_data->facility_ie_decode == SNGISDN_OPT_FALSE) {
-                                       get_facility_ie(&ftdmchan->caller_data, conEvnt->facilityStr.facilityStr.val, conEvnt->facilityStr.facilityStr.len);
+                                       get_facility_ie(ftdmchan, &conEvnt->facilityStr);
                                } else if (signal_data->facility == SNGISDN_OPT_TRUE) {
 -                                      /* Verify whether the Caller Name will come in a subsequent FACILITY message */
 -                                      uint16_t ret_val;
 -                                      char retrieved_str[255];
 -
 -                                      ret_val = sng_isdn_retrieve_facility_caller_name(conEvnt->facilityStr.facilityStr.val, conEvnt->facilityStr.facilityStr.len, retrieved_str);
 -                                      /*
 -                                              return values for "sng_isdn_retrieve_facility_information_following":
 -                                              If there will be no information following, or fails to decode IE, returns -1
 -                                              If there will be no information following, but current FACILITY IE contains a caller name, returns 0
 -                                              If there will be information following, returns 1
 -                                      */
 -
 -                                      if (ret_val == 1) {
 -                                              ftdm_log_chan_msg(ftdmchan, FTDM_LOG_DEBUG, "Expecting Caller name in FACILITY\n");
 -                                              ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_GET_CALLERID);
 -                                              /* Launch timer in case we never get a FACILITY msg */
 -                                              if (signal_data->facility_timeout) {
 -                                                      ftdm_sched_timer(signal_data->sched, "facility_timeout", signal_data->facility_timeout,
 -                                                                      sngisdn_facility_timeout, (void*) sngisdn_info, &sngisdn_info->timers[SNGISDN_TIMER_FACILITY]);
 +                                      if (signal_data->switchtype == SNGISDN_SWITCH_NI2) {
 +                                              /* Verify whether the Caller Name will come in a subsequent FACILITY message */
 +                                              uint16_t ret_val;
 +                                              char retrieved_str[255];
 +
 +                                              ret_val = sng_isdn_retrieve_facility_caller_name(conEvnt->facilityStr.facilityStr.val, conEvnt->facilityStr.facilityStr.len, retrieved_str);
 +                                              /*
 +                                                      return values for "sng_isdn_retrieve_facility_information_following":
 +                                                      If there will be no information following, or fails to decode IE, returns -1
 +                                                      If there will be no information following, but current FACILITY IE contains a caller name, returns 0
 +                                                      If there will be information following, returns 1
 +                                              */
 +
 +                                              if (ret_val == 1) {
 +                                                      ftdm_log_chan_msg(ftdmchan, FTDM_LOG_DEBUG, "Expecting Caller name in FACILITY\n");
 +                                                      ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_GET_CALLERID);
 +                                                      /* Launch timer in case we never get a FACILITY msg */
 +                                                      if (signal_data->facility_timeout) {
 +                                                              ftdm_sched_timer(signal_data->sched, "facility_timeout", signal_data->facility_timeout,
 +                                                                              sngisdn_facility_timeout, (void*) sngisdn_info, &sngisdn_info->timers[SNGISDN_TIMER_FACILITY]);
 +                                                      }
 +                                                      break;
 +                                              } else if (ret_val == 0) {
 +                                                      strcpy(ftdmchan->caller_data.cid_name, retrieved_str);
                                                }
 -                                      } else if (ret_val == 0) {
 -                                              strcpy(ftdmchan->caller_data.cid_name, retrieved_str);
+                                               break;
                                        }
                                }
                        }
@@@ -372,21 -377,15 +379,18 @@@ void sngisdn_process_cnst_ind (sngisdn_
                                                goto sngisdn_process_cnst_ind_end;
                                }
                        }
-                       /* fall-through */
-               case MI_ALERTING:
-               case MI_CALLPROC:
-               
+                               
                        switch(ftdmchan->state) {
                                case FTDM_CHANNEL_STATE_DIALING:
+                               case FTDM_CHANNEL_STATE_PROCEED:
                                        if (cnStEvnt->progInd.eh.pres && cnStEvnt->progInd.progDesc.val == IN_PD_IBAVAIL) {
                                                ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_PROGRESS_MEDIA);
 +                                      } else  if (evntType == MI_CALLPROC) {
 +                                              ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_PROCEED);
                                        } else {
                                                ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_PROGRESS);
                                        }
-                               case FTDM_CHANNEL_STATE_PROCEED:
 +                                      break;
                                case FTDM_CHANNEL_STATE_PROGRESS:
                                        if (cnStEvnt->progInd.eh.pres && cnStEvnt->progInd.progDesc.val == IN_PD_IBAVAIL) {
                                                ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_PROGRESS_MEDIA);
index 65c587c3507785e62c902d1b2efd1af4581558e3,c13455dd211adf74fdedb568be8b2076c115c77c..fbb827e27f22f2a23e55947fdb1a3b988437d72c
@@@ -785,110 -777,44 +785,113 @@@ static FIO_COMMAND_FUNCTION(wanpipe_com
        return FTDM_SUCCESS;
  }
  
 -static void wanpipe_read_stats(ftdm_channel_t *ftdmchan, wp_tdm_api_rx_hdr_t *rx_stats)
 +static void wanpipe_write_stats(ftdm_channel_t *ftdmchan, wp_tdm_api_tx_hdr_t *tx_stats)
  {
 -      ftdmchan->iostats.stats.rx.flags = 0;
 +      ftdmchan->iostats.tx.errors = tx_stats->wp_api_tx_hdr_errors;
 +      ftdmchan->iostats.tx.queue_size = tx_stats->wp_api_tx_hdr_max_queue_length;
 +      ftdmchan->iostats.tx.queue_len = tx_stats->wp_api_tx_hdr_number_of_frames_in_queue;
 +      
 +      if (ftdmchan->iostats.tx.queue_len >= (0.8 * ftdmchan->iostats.tx.queue_size)) {
 +              ftdm_log_chan(ftdmchan, FTDM_LOG_WARNING, "Tx Queue length exceeded 80% threshold (%d/%d)\n",
 +                                                      ftdmchan->iostats.tx.queue_len, ftdmchan->iostats.tx.queue_size);
 +              ftdm_set_flag(&(ftdmchan->iostats.tx), FTDM_IOSTATS_ERROR_QUEUE_THRES);
 +      } else if (ftdm_test_flag(&(ftdmchan->iostats.tx), FTDM_IOSTATS_ERROR_QUEUE_THRES)){
 +              ftdm_log_chan(ftdmchan, FTDM_LOG_NOTICE, "Tx Queue length reduced 80% threshold (%d/%d)\n",
 +                                                      ftdmchan->iostats.tx.queue_len, ftdmchan->iostats.tx.queue_size);
 +              ftdm_clear_flag(&(ftdmchan->iostats.tx), FTDM_IOSTATS_ERROR_QUEUE_THRES);
 +      }
 +      
-       if (ftdmchan->iostats.tx.queue_len >= ftdmchan->iostats.rx.queue_size) {
++      if (ftdmchan->iostats.tx.queue_len >= ftdmchan->iostats.tx.queue_size) {
 +              ftdm_log_chan(ftdmchan, FTDM_LOG_CRIT, "Tx Queue Full (%d/%d)\n",
-                                         ftdmchan->iostats.rx.queue_len, ftdmchan->iostats.rx.queue_size);
-               ftdm_set_flag(&(ftdmchan->iostats.rx), FTDM_IOSTATS_ERROR_QUEUE_FULL);
++                                        ftdmchan->iostats.rx.queue_len, ftdmchan->iostats.tx.queue_size);
++              ftdm_set_flag(&(ftdmchan->iostats.tx), FTDM_IOSTATS_ERROR_QUEUE_FULL);
 +      } else if (ftdm_test_flag(&(ftdmchan->iostats.tx), FTDM_IOSTATS_ERROR_QUEUE_FULL)){
 +              ftdm_log_chan(ftdmchan, FTDM_LOG_NOTICE, "Tx Queue no longer full (%d/%d)\n",
 +                                        ftdmchan->iostats.tx.queue_len, ftdmchan->iostats.tx.queue_size);
 +              ftdm_clear_flag(&(ftdmchan->iostats.tx), FTDM_IOSTATS_ERROR_QUEUE_FULL);
 +      }
  
 -      ftdmchan->iostats.stats.rx.errors = rx_stats->wp_api_rx_hdr_errors;
 -      ftdmchan->iostats.stats.rx.rx_queue_size = rx_stats->wp_api_rx_hdr_max_queue_length;
 -      ftdmchan->iostats.stats.rx.rx_queue_len = rx_stats->wp_api_rx_hdr_number_of_frames_in_queue;
 +      if (ftdmchan->iostats.tx.idle_packets < tx_stats->wp_api_tx_hdr_number_of_frames_in_queue) {
 +              ftdmchan->iostats.tx.idle_packets = tx_stats->wp_api_tx_hdr_tx_idle_packets;
-               ftdm_log_chan(ftdmchan, FTDM_LOG_WARNING, "Tx idle:  %d\n", ftdmchan->iostats.tx.idle_packets);
++              /* HDLC channels do not always transmit, so its ok for drivers to fill with idle */
++              if (FTDM_IS_VOICE_CHANNEL(ftdmchan)) {
++                      ftdm_log_chan(ftdmchan, FTDM_LOG_WARNING, "Tx idle:  %d\n", ftdmchan->iostats.tx.idle_packets);
++              }
 +      }
 +
 +      if (!ftdmchan->iostats.tx.packets) {
 +              ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "First packet write stats: Tx queue len: %d, Tx queue size: %d, Tx idle: %d\n", 
 +                              ftdmchan->iostats.tx.queue_len, 
 +                              ftdmchan->iostats.tx.queue_size,
 +                              ftdmchan->iostats.tx.idle_packets);
 +      }
 +
 +      ftdmchan->iostats.tx.packets++;
 +}
 +
 +static void wanpipe_read_stats(ftdm_channel_t *ftdmchan, wp_tdm_api_rx_hdr_t *rx_stats)
 +{
 +      ftdmchan->iostats.rx.errors = rx_stats->wp_api_rx_hdr_errors;
 +      ftdmchan->iostats.rx.queue_size = rx_stats->wp_api_rx_hdr_max_queue_length;
 +      ftdmchan->iostats.rx.queue_len = rx_stats->wp_api_rx_hdr_number_of_frames_in_queue;
        
 -      if (rx_stats->wp_api_rx_hdr_error_map & (1<<WP_ABORT_ERROR_BIT)) {
 -              ftdm_set_flag(&(ftdmchan->iostats.stats.rx), FTDM_IOSTATS_ERROR_ABORT);
 +      if ((rx_stats->wp_api_rx_hdr_error_map & (1 << WP_ABORT_ERROR_BIT))) {
 +              ftdm_set_flag(&(ftdmchan->iostats.rx), FTDM_IOSTATS_ERROR_ABORT);
 +      } else {
 +              ftdm_clear_flag(&(ftdmchan->iostats.rx), FTDM_IOSTATS_ERROR_ABORT);
        }
 -      if (rx_stats->wp_api_rx_hdr_error_map & (1<<WP_DMA_ERROR_BIT)) {
 -              ftdm_set_flag(&(ftdmchan->iostats.stats.rx), FTDM_IOSTATS_ERROR_DMA);
 +
 +      if ((rx_stats->wp_api_rx_hdr_error_map & (1 << WP_DMA_ERROR_BIT))) {
 +              ftdm_set_flag(&(ftdmchan->iostats.rx), FTDM_IOSTATS_ERROR_DMA);
 +      } else {
 +              ftdm_clear_flag(&(ftdmchan->iostats.rx), FTDM_IOSTATS_ERROR_DMA);
        }
 -      if (rx_stats->wp_api_rx_hdr_error_map & (1<<WP_FIFO_ERROR_BIT)) {
 -              ftdm_set_flag(&(ftdmchan->iostats.stats.rx), FTDM_IOSTATS_ERROR_FIFO);
 +
 +      if ((rx_stats->wp_api_rx_hdr_error_map & (1 << WP_FIFO_ERROR_BIT))) {
 +              ftdm_set_flag(&(ftdmchan->iostats.rx), FTDM_IOSTATS_ERROR_FIFO);
 +      } else {
 +              ftdm_clear_flag(&(ftdmchan->iostats.rx), FTDM_IOSTATS_ERROR_FIFO);
        }
 -      if (rx_stats->wp_api_rx_hdr_error_map & (1<<WP_CRC_ERROR_BIT)) {
 -              ftdm_set_flag(&(ftdmchan->iostats.stats.rx), FTDM_IOSTATS_ERROR_CRC);
 +
 +      if ((rx_stats->wp_api_rx_hdr_error_map & (1 << WP_CRC_ERROR_BIT))) {
 +              ftdm_set_flag(&(ftdmchan->iostats.rx), FTDM_IOSTATS_ERROR_CRC);
 +      } else {
 +              ftdm_clear_flag(&(ftdmchan->iostats.rx), FTDM_IOSTATS_ERROR_CRC);
        }
 -      if (rx_stats->wp_api_rx_hdr_error_map & (1<<WP_FRAME_ERROR_BIT)) {
 -              ftdm_set_flag(&(ftdmchan->iostats.stats.rx), FTDM_IOSTATS_ERROR_FRAME);
 +
 +      if ((rx_stats->wp_api_rx_hdr_error_map & (1 << WP_FRAME_ERROR_BIT))) {
 +              ftdm_set_flag(&(ftdmchan->iostats.rx), FTDM_IOSTATS_ERROR_FRAME);
 +      } else {
 +              ftdm_clear_flag(&(ftdmchan->iostats.rx), FTDM_IOSTATS_ERROR_FRAME);
        }
  
 -      if (ftdmchan->iostats.stats.rx.rx_queue_len >= (0.8*ftdmchan->iostats.stats.rx.rx_queue_size)) {
 -              ftdm_log_chan(ftdmchan, FTDM_LOG_WARNING, "Rx Queue length exceeded threshold (%d/%d)\n",
 -                                                                                                      ftdmchan->iostats.stats.rx.rx_queue_len, ftdmchan->iostats.stats.rx.rx_queue_size);
 -              
 -              ftdm_set_flag(&(ftdmchan->iostats.stats.rx), FTDM_IOSTATS_ERROR_QUEUE_THRES);
 +      if (ftdmchan->iostats.rx.queue_len >= (0.8 * ftdmchan->iostats.rx.queue_size)) {
 +              ftdm_log_chan(ftdmchan, FTDM_LOG_WARNING, "Rx Queue length exceeded 80% threshold (%d/%d)\n",
 +                                                      ftdmchan->iostats.rx.queue_len, ftdmchan->iostats.rx.queue_size);
 +              ftdm_set_flag(&(ftdmchan->iostats.rx), FTDM_IOSTATS_ERROR_QUEUE_THRES);
 +      } else if (ftdm_test_flag(&(ftdmchan->iostats.rx), FTDM_IOSTATS_ERROR_QUEUE_THRES)){
 +              /* any reason we have wanpipe_tdm_api_iface.h in ftmod_wanpipe/ dir? */
 +              ftdm_log_chan(ftdmchan, FTDM_LOG_NOTICE, "Rx Queue length reduced 80% threshold (%d/%d)\n",
 +                                                      ftdmchan->iostats.rx.queue_len, ftdmchan->iostats.rx.queue_size);
 +              ftdm_clear_flag(&(ftdmchan->iostats.rx), FTDM_IOSTATS_ERROR_QUEUE_THRES);
        }
        
 -      if (ftdmchan->iostats.stats.rx.rx_queue_len >= ftdmchan->iostats.stats.rx.rx_queue_size) {
 +      if (ftdmchan->iostats.rx.queue_len >= ftdmchan->iostats.rx.queue_size) {
                ftdm_log_chan(ftdmchan, FTDM_LOG_CRIT, "Rx Queue Full (%d/%d)\n",
 -                                        ftdmchan->iostats.stats.rx.rx_queue_len, ftdmchan->iostats.stats.rx.rx_queue_size);
 -              
 -              ftdm_set_flag(&(ftdmchan->iostats.stats.rx), FTDM_IOSTATS_ERROR_QUEUE_FULL);
 +                                        ftdmchan->iostats.rx.queue_len, ftdmchan->iostats.rx.queue_size);
 +              ftdm_set_flag(&(ftdmchan->iostats.rx), FTDM_IOSTATS_ERROR_QUEUE_FULL);
 +      } else if (ftdm_test_flag(&(ftdmchan->iostats.rx), FTDM_IOSTATS_ERROR_QUEUE_FULL)){
 +              ftdm_log_chan(ftdmchan, FTDM_LOG_NOTICE, "Rx Queue no longer full (%d/%d)\n",
 +                                        ftdmchan->iostats.rx.queue_len, ftdmchan->iostats.rx.queue_size);
 +              ftdm_clear_flag(&(ftdmchan->iostats.rx), FTDM_IOSTATS_ERROR_QUEUE_FULL);
        }
 -      return;
 +
 +      if (!ftdmchan->iostats.rx.packets) {
 +              ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "First packet read stats: Rx queue len: %d, Rx queue size: %d\n", 
 +                              ftdmchan->iostats.rx.queue_len, ftdmchan->iostats.rx.queue_size);
 +      }
 +
 +      ftdmchan->iostats.rx.packets++;
  }
  
  /**