]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
Merged latest FreeTDM code from Sangoma's repo
authorDavid Yat Sin <dyatsin@sangoma.com>
Wed, 12 Sep 2012 15:05:39 +0000 (11:05 -0400)
committerDavid Yat Sin <dyatsin@sangoma.com>
Wed, 12 Sep 2012 15:05:39 +0000 (11:05 -0400)
Merge remote branch 'smgfs/master'

Conflicts:
build/modules.conf.in
configure.in
libs/esl/fs_cli.c
libs/freetdm/mod_freetdm/mod_freetdm.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_ss7/ftmod_sangoma_ss7_logger.c
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_support.c
src/include/switch_types.h
src/mod/applications/mod_commands/mod_commands.c
src/mod/applications/mod_spandsp/mod_spandsp.c
src/mod/endpoints/mod_opal/mod_opal.cpp
src/mod/endpoints/mod_opal/mod_opal.h
src/mod/endpoints/mod_sofia/mod_sofia.h
src/mod/endpoints/mod_sofia/rtp.c
src/switch.c
src/switch_core.c
src/switch_rtp.c

12 files changed:
1  2 
libs/freetdm/Makefile.am
libs/freetdm/mod_freetdm/mod_freetdm.c
libs/freetdm/src/ftdm_io.c
libs/freetdm/src/ftdm_state.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_cfg.c
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_handle.c
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_support.c
libs/freetdm/src/ftmod/ftmod_wanpipe/ftmod_wanpipe.c
libs/freetdm/src/include/freetdm.h
libs/freetdm/src/include/private/ftdm_core.h

Simple merge
index f38ededc8e1fcf87d9794d6cd8975392e8716c76,26a26bf61f0a9028b4bd493041715599db4526a8..da6fb095b09ebfff3d9348c987628c7914c20cda
@@@ -598,10 -638,18 +633,18 @@@ static switch_status_t channel_on_hangu
                        if (hcause  < 1 || hcause > 127) {
                                hcause = FTDM_CAUSE_DESTINATION_OUT_OF_ORDER;
                        }
-                       ftdm_channel_call_hangup_with_cause(tech_pvt->ftdmchan, hcause);
+                       var = switch_channel_get_variable(channel, "ss7_rel_loc");
+                       if (var) {
+                               ftdm_usrmsg_t usrmsg;
+                               memset(&usrmsg, 0, sizeof(ftdm_usrmsg_t));
+                               ftdm_usrmsg_add_var(&usrmsg, "ss7_rel_loc", var);
+                               ftdm_channel_call_hangup_with_cause_ex(tech_pvt->ftdmchan, hcause, &usrmsg);
+                       } else {
+                               ftdm_channel_call_hangup_with_cause(tech_pvt->ftdmchan, hcause);
+                       }
                }
                break;
 -      default: 
 +      default:
                {
                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Unhandled channel type %d for channel %s\n", chantype, switch_channel_get_name(channel));
                }
@@@ -1416,9 -1497,9 +1492,9 @@@ static switch_call_cause_t channel_outg
                /* Used by ftmod_sangoma_ss7 only */
                sipvar = switch_channel_get_variable(channel, "sip_h_X-FreeTDM-DNIS-NADI");
                if (sipvar) {
-                       ftdm_usrmsg_add_var(&usrmsg, "ss7_clg_nadi", sipvar);
+                       ftdm_usrmsg_add_var(&usrmsg, "ss7_cld_nadi", sipvar);
                }
 -              
 +
                sipvar = switch_channel_get_variable(channel, "sip_h_X-FreeTDM-RDNIS");
                if (sipvar) {
                        ftdm_set_string(caller_data.rdnis.digits, sipvar);
@@@ -1744,10 -1915,12 +1909,12 @@@ ftdm_status_t ftdm_channel_from_event(f
        switch_channel_set_variable_printf(channel, "freetdm_calling_party_category", ftdm_calling_party_category2str(channel_caller_data->cpc));
        switch_channel_set_variable_printf(channel, "screening_ind", ftdm_screening2str(channel_caller_data->screen));
        switch_channel_set_variable_printf(channel, "presentation_ind", ftdm_presentation2str(channel_caller_data->pres));
 -      
 -      
 +
        if (globals.sip_headers) {
                switch_channel_set_variable(channel, "sip_h_X-FreeTDM-SpanName", ftdm_channel_get_span_name(sigmsg->channel));
 +              switch_channel_set_variable_printf(channel, "sip_h_X-FreeTDM-SpanNumber", "%d", spanid);
+               switch_channel_set_variable_printf(channel, "sip_h_X-FreeTDM-TransUUID", "%s",switch_core_session_get_uuid(session));   
+               switch_channel_set_variable_printf(channel, "sip_h_X-FreeTDM-SpanNumber", "%d", spanid);        
                switch_channel_set_variable_printf(channel, "sip_h_X-FreeTDM-ChanNumber", "%d", chanid);
  
                switch_channel_set_variable_printf(channel, "sip_h_X-FreeTDM-CallerName", "%s", channel_caller_data->cid_name);
                switch_channel_set_variable_printf(channel, "sip_h_X-FreeTDM-RDNIS-Plan", "%d", channel_caller_data->rdnis.plan);
                switch_channel_set_variable_printf(channel, "sip_h_X-FreeTDM-CPC", "%s", ftdm_calling_party_category2str(channel_caller_data->cpc));
  
 -      
+               var_value = ftdm_sigmsg_get_var(sigmsg, "ss7_iam_nature_connection_hex");
+               if (!ftdm_strlen_zero(var_value)) {
+                       switch_channel_set_variable_printf(channel, "sip_h_X-FreeTDM-IAM-NATURE-CONN-HEX", "%s", var_value);
+               }
+               
+               var_value = ftdm_sigmsg_get_var(sigmsg, "ss7_iam_fwd_ind_hex");
+               if (!ftdm_strlen_zero(var_value)) {
+                       switch_channel_set_variable_printf(channel, "sip_h_X-FreeTDM-IAM-FWD-IND-HEX", "%s", var_value);
+               }
+               
+               var_value = ftdm_sigmsg_get_var(sigmsg, "ss7_access_transport_urlenc");
+               if (!ftdm_strlen_zero(var_value)) {
+                       switch_channel_set_variable_printf(channel, "sip_h_X-FreeTDM-Access-Transport-URLENC", "%s", var_value);
+               }
+               
+               var_value = ftdm_sigmsg_get_var(sigmsg, "ss7_rdinfo_indicator");
+               if (!ftdm_strlen_zero(var_value)) {
+                       switch_channel_set_variable_printf(channel, "sip_h_X-FreeTDM-RDINF-Indicator", "%s", var_value);
+               }
+               var_value = ftdm_sigmsg_get_var(sigmsg, "ss7_rdinfo_orig");
+               if (!ftdm_strlen_zero(var_value)) {
+                       switch_channel_set_variable_printf(channel, "sip_h_X-FreeTDM-RDINF-OrigReason", "%s", var_value);
+               }
+               var_value = ftdm_sigmsg_get_var(sigmsg, "ss7_rdinfo_count");
+               if (!ftdm_strlen_zero(var_value)) {
+                       switch_channel_set_variable_printf(channel, "sip_h_X-FreeTDM-RDINF-Count", "%s", var_value);
+               }
+               var_value = ftdm_sigmsg_get_var(sigmsg, "ss7_rdinfo_reason");
+               if (!ftdm_strlen_zero(var_value)) {
+                       switch_channel_set_variable_printf(channel, "sip_h_X-FreeTDM-RDINF-Reason", "%s", var_value);
+               }
+                       
                var_value = ftdm_sigmsg_get_var(sigmsg, "ss7_clg_nadi");
                if (!ftdm_strlen_zero(var_value)) {
-                       switch_channel_set_variable_printf(channel, "sip_h_X-FreeTDM-NADI", "%d", var_value);
+                       switch_channel_set_variable_printf(channel, "sip_h_X-FreeTDM-NADI", "%s", var_value);
+                       switch_channel_set_variable_printf(channel, "sip_h_X-FreeTDM-ANI-NADI", "%s", var_value);
+               }
+               var_value = ftdm_sigmsg_get_var(sigmsg, "ss7_cld_nadi");
+               if (!ftdm_strlen_zero(var_value)) {
+                       switch_channel_set_variable_printf(channel, "sip_h_X-FreeTDM-DNIS-NADI", "%s", var_value);
                }
  
                var_value = ftdm_sigmsg_get_var(sigmsg, "ss7_rdnis_screen_ind");
@@@ -2574,11 -2853,12 +2822,11 @@@ static uint32_t enable_analog_option(co
                current_options |= ANALOG_OPTION_CALL_SWAP;
                current_options &= ~ANALOG_OPTION_3WAY;
        }
 -      
 +
        return current_options;
 -      
  }
  
- #define CONFIG_ERROR(...) { \
+ #define LOAD_ERROR(...) { \
                ftdm_log(FTDM_LOG_ERROR, __VA_ARGS__); \
                globals.config_error = 1; \
        }
@@@ -2845,10 -3261,10 +3231,10 @@@ static void parse_gsm_spans(switch_xml_
                }
  
                if (zstatus != FTDM_SUCCESS) {
-                       CONFIG_ERROR("Error finding FreeTDM span id:%s name:%s\n", switch_str_nil(id), switch_str_nil(name));
+                       LOAD_ERROR("Error finding FreeTDM span id:%s name:%s\n", switch_str_nil(id), switch_str_nil(name));
                        continue;
                }
 -              
 +
                if (!span_id) {
                        span_id = ftdm_span_get_id(span);
                }
                        }
                }
  
 -              if (ftdm_configure_span_signaling(span, 
 -                                                "gsm", 
 +              if (ftdm_configure_span_signaling(span,
 +                                                "gsm",
                                                  on_clear_channel_signal,
                                                  spanparameters) != FTDM_SUCCESS) {
-                       CONFIG_ERROR("Error configuring Sangoma GSM FreeTDM span %d\n", span_id);
+                       LOAD_ERROR("Error configuring Sangoma GSM FreeTDM span %d\n", span_id);
                        continue;
                }
                SPAN_CONFIG[span_id].span = span;
@@@ -2934,10 -3350,10 +3320,10 @@@ static void parse_bri_pri_spans(switch_
                }
  
                if (zstatus != FTDM_SUCCESS) {
-                       CONFIG_ERROR("Error finding FreeTDM span id:%s name:%s\n", switch_str_nil(id), switch_str_nil(name));
+                       LOAD_ERROR("Error finding FreeTDM span id:%s name:%s\n", switch_str_nil(id), switch_str_nil(name));
                        continue;
                }
 -              
 +
                if (!span_id) {
                        span_id = ftdm_span_get_id(span);
                }
                        }
                }
  
 -              if (ftdm_configure_span_signaling(span, 
 -                                                "sangoma_isdn", 
 +              if (ftdm_configure_span_signaling(span,
 +                                                "sangoma_isdn",
                                                  on_clear_channel_signal,
                                                  spanparameters) != FTDM_SUCCESS) {
-                       CONFIG_ERROR("Error configuring Sangoma ISDN FreeTDM span %d\n", span_id);
+                       LOAD_ERROR("Error configuring Sangoma ISDN FreeTDM span %d\n", span_id);
                        continue;
                }
                SPAN_CONFIG[span_id].span = span;
@@@ -3115,10 -3532,10 +3502,10 @@@ static switch_status_t load_config(void
                        }
  
                        if (zstatus != FTDM_SUCCESS) {
-                               CONFIG_ERROR("Error finding FreeTDM span id:%s name:%s\n", switch_str_nil(id), switch_str_nil(name));
+                               LOAD_ERROR("Error finding FreeTDM span id:%s name:%s\n", switch_str_nil(id), switch_str_nil(name));
                                continue;
                        }
 -                      
 +
                        if (!span_id) {
                                span_id = ftdm_span_get_id(span);
                        }
                                }
                        }
  
 -                      if (ftdm_configure_span_signaling(span, 
 -                                                        "sangoma_ss7", 
 +                      if (ftdm_configure_span_signaling(span,
 +                                                        "sangoma_ss7",
                                                          on_clear_channel_signal,
                                                          spanparameters) != FTDM_SUCCESS) {
-                               CONFIG_ERROR("Error configuring ss7 FreeTDM span %d\n", span_id);
+                               LOAD_ERROR("Error configuring ss7 FreeTDM span %d\n", span_id);
                                continue;
                        }
                        SPAN_CONFIG[span_id].span = span;
                        }
  
                        if (zstatus != FTDM_SUCCESS) {
-                               CONFIG_ERROR("Error finding FreeTDM span id:%s name:%s\n", switch_str_nil(id), switch_str_nil(name));
+                               LOAD_ERROR("Error finding FreeTDM span id:%s name:%s\n", switch_str_nil(id), switch_str_nil(name));
                                continue;
                        }
 -                      
 +
                        if (!span_id) {
                                span_id = ftdm_span_get_id(span);
                        }
                                        analog_options = enable_analog_option(val, analog_options);
                                }
                        }
 -                              
 +
                        if (!id && !name) {
-                               CONFIG_ERROR("span missing required param 'id'\n");
+                               LOAD_ERROR("span missing required param 'id'\n");
                                continue;
                        }
 -                      
 +
                        if (!tonegroup) {
                                tonegroup = "us";
                        }
                        }
  
                        if (zstatus != FTDM_SUCCESS) {
-                               CONFIG_ERROR("Error finding FreeTDM span id:%s name:%s\n", switch_str_nil(id), switch_str_nil(name));
+                               LOAD_ERROR("Error finding FreeTDM span id:%s name:%s\n", switch_str_nil(id), switch_str_nil(name));
                                continue;
                        }
 -                      
 +
                        if (!span_id) {
                                span_id = ftdm_span_get_id(span);
                        }
                                        analog_options = enable_analog_option(val, analog_options);
                                }
                        }
 -                              
 +
                        if (!id && !name) {
-                               CONFIG_ERROR("span missing required param 'id'\n");
+                               LOAD_ERROR("span missing required param 'id'\n");
                                continue;
                        }
  
                        }
  
                        if (zstatus != FTDM_SUCCESS) {
-                               CONFIG_ERROR("Error finding FreeTDM span id:%s name:%s\n", switch_str_nil(id), switch_str_nil(name));
+                               LOAD_ERROR("Error finding FreeTDM span id:%s name:%s\n", switch_str_nil(id), switch_str_nil(name));
                                continue;
                        }
 -                      
 +
                        if (!span_id) {
                                span_id = ftdm_span_get_id(span);
                        }
                                        paramindex++;
                                }
                        }
 -      
 +
                        zstatus = ftdm_span_find_by_name(name, &span);
                        if (zstatus != FTDM_SUCCESS) {
-                               CONFIG_ERROR("Error finding FreeTDM span %s\n", name);
+                               LOAD_ERROR("Error finding FreeTDM span %s\n", name);
                                continue;
                        }
  
Simple merge
Simple merge
index 40a89a80c805d3001fd01c14e846fd28345a43cf,4e9c9dcadd23191e5f4685c5e71d7859ad597127..cc4d1108f617cc02cb7ba1e4ef10eaadd9867558
@@@ -287,8 -274,7 +287,9 @@@ typedef struct sngisdn_span_data 
        uint8_t                 restart_timeout;
        uint8_t                 force_sending_complete;
        uint8_t                 cid_name_method;
 -      uint8_t                 send_cid_name;
 +      uint8_t                 send_cid_name;  
++      uint8_t                 send_connect_ack;
 +
        int32_t                 timer_t301;
        int32_t                 timer_t302;
        int32_t                 timer_t303;
        int32_t                 timer_t318;
        int32_t                 timer_t319;
        int32_t                 timer_t322;
 -      uint8_t                 send_connect_ack;
        char*                   local_numbers[SNGISDN_NUM_LOCAL_NUMBERS];
        ftdm_timer_id_t timers[SNGISDN_NUM_SPAN_TIMERS];
        ftdm_sched_t    *sched;
index 47da32d865b3c82f3b61f5533a5b4644a3b0d0d0,52c4ecd8de052670ec715cd21f8b7fcd87af392b..8356932ce68ec11da62a3c06556a336d4df03af6
@@@ -613,8 -466,8 +614,10 @@@ ftdm_status_t ftmod_isdn_parse_cfg(ftdm
                        parse_timer(val, &signal_data->timer_t319);
                } else if (!strcasecmp(var, "timer-t322")) {
                        parse_timer(val, &signal_data->timer_t322);
 +              } else if (!strcasecmp(var, "trunkgroup")) {
 +                      /* Do nothing, we already parsed this parameter */
+               } else if (!strcasecmp(var, "send-connect-ack")) {
+                       parse_yesno(var, val, &signal_data->send_connect_ack);
                } else {
                        ftdm_log(FTDM_LOG_WARNING, "Ignoring unknown parameter %s\n", ftdm_parameters[paramindex].var);
                }
index 457964a95fac02b7319f78eb1d2ab5223801f501,8d2b501850f3b001826abfe8af282891f8b65ef0..70d13153534d4b55f94316b79124a79e03ef0111
@@@ -2468,10 -3334,11 +3334,11 @@@ ftdm_status_t sngss7_save_iam(ftdm_chan
        /* URL encode buffer to that its safe to store it in a string */
        ftdm_url_encode((const char*)compressed_iam, url_encoded_iam, len);
  
 -      ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "IAM variable length:%d\n", strlen(url_encoded_iam));
 +      ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "IAM variable length:%"FTDM_SIZE_FMT"\n", strlen(url_encoded_iam));
  
-       if (strlen(url_encoded_iam) > g_ftdm_sngss7_data.cfg.transparent_iam_max_size) {
-               ftdm_log_chan(ftdmchan, FTDM_LOG_CRIT, "IAM variable length exceeds max size (len:%"FTDM_SIZE_FMT" max:%d) \n", strlen(url_encoded_iam), g_ftdm_sngss7_data.cfg.transparent_iam_max_size);
+       if (strlen(url_encoded_iam) > sngss7_info->circuit->transparent_iam_max_size) {
+               ftdm_log_chan(ftdmchan, FTDM_LOG_CRIT, "IAM variable length exceeds max size (len:%d max:%d) \n", 
+                       strlen(url_encoded_iam), sngss7_info->circuit->transparent_iam_max_size);
                ret_val = FTDM_FAIL;
                goto done;
        }
index 1476ee0158c7102f7f680839acdfa9f03c11b2bf,18dfb7605b152d1f82d65bfcb4d3e735afd4e133..f430ae263e95ead741265f0f6981f18e8530adba
@@@ -1773,33 -1775,11 +1804,33 @@@ FT_DECLARE(ftdm_trunk_type_t) ftdm_span
  /*! \brief For display debugging purposes you can display this string which describes the trunk type of a span */
  FT_DECLARE(const char *) ftdm_span_get_trunk_type_str(const ftdm_span_t *span);
  
 +/*!
 + * Set the trunk mode for a span
 + * \note      This must be called before configuring any channels within the span!
 + * \param[in] span    The span
 + * \param[in] type    The trunk mode
 + */
 +FT_DECLARE(void) ftdm_span_set_trunk_mode(ftdm_span_t *span, ftdm_trunk_mode_t mode);
 +
 +/*!
 + * Get the trunk mode for a span
 + * \param[in] span    The span
 + * \return    Span trunk mode
 + */
 +FT_DECLARE(ftdm_trunk_mode_t) ftdm_span_get_trunk_mode(const ftdm_span_t *span);
 +
 +/*!
 + * Get the trunk mode of a span in textual form
 + * \param[in] span    The span
 + * \return    Span mode name as a string
 + */
 +FT_DECLARE(const char *) ftdm_span_get_trunk_mode_str(const ftdm_span_t *span);
 +
  /*! 
-  * \brief Return the channel identified by the provided id
+  * \brief Return the channel identified by the provided logical id
   *
   * \param span The span where the channel belongs
-  * \param chanid The channel id within the span
+  * \param chanid The logical channel id within the span
   *
   * \return The channel pointer if found, NULL otherwise
   */