]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
add ss7 skeleton config section
authorMoises Silva <moy@sangoma.com>
Wed, 14 Apr 2010 15:00:17 +0000 (11:00 -0400)
committerMoises Silva <moy@sangoma.com>
Wed, 14 Apr 2010 22:00:16 +0000 (18:00 -0400)
libs/freetdm/mod_freetdm/mod_freetdm.c
libs/freetdm/src/include/ftdm_types.h

index 9b7f1e1facf404696258db4b7fe05de3f2e0bb4f..d70a0a550b1f5d4afd5b2d689a89c1f39a2641dd 100644 (file)
@@ -91,6 +91,7 @@ static struct {
        char hold_music[256];
        switch_mutex_t *mutex;
        analog_option_t analog_options;
+       switch_hash_t *ss7_configs;
 } globals;
 
 struct private_object {
@@ -1961,6 +1962,15 @@ static FIO_SIGNAL_CB_FUNCTION(on_clear_channel_signal)
 }
 
 
+static FIO_SIGNAL_CB_FUNCTION(on_ss7_signal)
+{
+       if (on_common_signal(sigmsg) == FTDM_BREAK) {
+               return FTDM_SUCCESS;
+       }
+       ftdm_log(FTDM_LOG_DEBUG, "got ss7 sig %d:%d [%s]\n", sigmsg->channel->span_id, sigmsg->channel->chan_id, ftdm_signal_event2str(sigmsg->event_id));
+       return FTDM_SUCCESS;
+}
+
 static FIO_SIGNAL_CB_FUNCTION(on_analog_signal)
 {
        switch_status_t status = SWITCH_STATUS_FALSE;
@@ -2022,10 +2032,16 @@ static uint32_t enable_analog_option(const char *str, uint32_t current_options)
        
 }
 
+static ftdm_conf_node_t *get_ss7_config_node(switch_xml_t cfg, const char *confname)
+{
+       return NULL;
+}
+
 static switch_status_t load_config(void)
 {
        const char *cf = "freetdm.conf";
        switch_xml_t cfg, xml, settings, param, spans, myspan;
+       ftdm_conf_node_t *ss7confnode = NULL;
        ftdm_span_t *boost_spans[FTDM_MAX_PHYSICAL_SPANS_PER_LOGICAL_SPAN];
        ftdm_span_t *boost_span = NULL;
        unsigned boosti = 0;
@@ -2054,6 +2070,53 @@ static switch_status_t load_config(void)
                }
        }
 
+       switch_core_hash_init(&globals.ss7_configs, module_pool);
+       if ((spans = switch_xml_child(cfg, "ss7_spans"))) {
+               for (myspan = switch_xml_child(spans, "span"); myspan; myspan = myspan->next) {
+                       ftdm_status_t zstatus = FTDM_FAIL;
+                       char *id = (char *) switch_xml_attr(myspan, "id");
+                       char *name = (char *) switch_xml_attr(myspan, "name");
+                       char *configname = (char *) switch_xml_attr(myspan, "config");
+                       ftdm_span_t *span = NULL;
+                       uint32_t span_id = 0;
+                       if (!name || !configname || !id) {
+                               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "ss7 span missing required param 'id' or 'name' or 'config', skipping ...\n");
+                               continue;
+                       }
+                       if (name) {
+                               zstatus = ftdm_span_find_by_name(name, &span);
+                       } else {
+                               if (switch_is_number(id)) {
+                                       span_id = atoi(id);
+                                       zstatus = ftdm_span_find(span_id, &span);
+                               }
+
+                               if (zstatus != FTDM_SUCCESS) {
+                                       zstatus = ftdm_span_find_by_name(id, &span);
+                               }
+                       }
+
+                       if (zstatus != FTDM_SUCCESS) {
+                               ftdm_log(FTDM_LOG_ERROR, "Error finding FreeTDM span id:%s name:%s\n", switch_str_nil(id), switch_str_nil(name));
+                               continue;
+                       }
+                       
+                       if (!span_id) {
+                               span_id = span->span_id;
+                       }
+
+                       ss7confnode = get_ss7_config_node(cfg, configname);
+
+                       if (ftdm_configure_span("ss7", span, on_ss7_signal, 
+                                                                  "confnode", ss7confnode,
+                                                                  TAG_END) != FTDM_SUCCESS) {
+                               ftdm_log(FTDM_LOG_ERROR, "Error configuring ss7 FreeTDM span %d\n", span_id);
+                               continue;
+                       }
+                       ftdm_log(FTDM_LOG_DEBUG, "Configured ss7 FreeTDM span %d with config node %s\n", span_id, configname);
+               }
+       }
+
        if ((spans = switch_xml_child(cfg, "analog_spans"))) {
                for (myspan = switch_xml_child(spans, "span"); myspan; myspan = myspan->next) {
                        char *id = (char *) switch_xml_attr(myspan, "id");
index a13179e856d6264c1be701b37e70923e7735e344..c172ccb4ca962ec87a0def35b6b85ce9dd2bc72b 100644 (file)
@@ -572,6 +572,14 @@ typedef ftdm_status_t (*fio_api_t) FIO_API_ARGS ;
 
 #include "ftdm_dso.h"
 
+typedef struct ftdm_conf_node_s {
+       char name[255];
+       ftdm_conf_parameter_t attr[10];
+       ftdm_conf_parameter_t settings[100];
+       struct ftdm_conf_node_t *childs;
+       struct ftdm_config_node_s *next;
+} ftdm_conf_node_t;
+
 typedef struct {
        char name[256];
        fio_io_load_t io_load;
@@ -583,9 +591,9 @@ typedef struct {
          \brief configure a given span signaling 
          \see sig_configure
          This is just like sig_configure but receives
-         an array of paramters instead of va_list
+         an an ftdm_conf_node_t instead
          I'd like to deprecate sig_configure and move
-         all modules to use sigparam_configure
+         all modules to use configure_span_signaling
         */
        fio_configure_span_signaling_t configure_span_signaling;
        ftdm_dso_lib_t lib;