Project "FreeSWITCH Source" received a push.

branch: master updated

       via: 1607348f803a953e61379739e7d928ebb4b1149e (commit)
       via: 6ea5f03b445c3ddb023464e0d497b4325025025a (commit)
       via: 11cc6f95cddb45f261af348e03007e78de88b2ae (commit)
       via: d53f3cd15054ff0a4c6d6b3131dae628432d15cd (commit)
       via: 017842c87fb8f7c93e486e00076ffdfd684d41fb (commit)
       via: 1096e6732c6073228f78d7ab24be29780713f64c (commit)
       via: 500e9acd254e1e2b50d07aec2fe1241fe3e18aba (commit)
       via: 2e399b0baf871b82e8b1bd553fce16b54abe6d7b (commit)
       via: cd1982ceb7c7a7df598adea002cea51d040a3f62 (commit)
       via: f113c323fce749e1cc78caecef085f52957ef10e (commit)
       via: c9ee4fab736d1d0db6638468598bab11b1648c87 (commit)
       via: e281aca3463da39e3b0a339459d390b7c2f3ceab (commit)
       via: 86884e52568eb7cdca89995fa82f407d4c4059c9 (commit)
       via: 642882727f015be345501f6f7c727ef23ec70c9f (commit)
       via: d8add09a352cdfca64fa94688285ce6c96e6f6dc (commit)
       via: c81bf01fc977fd1a12b521cf29abb5b466f1fda2 (commit)
       via: c0e340b188f8899767e1e347cc011ee3c0a6e88a (commit)
       via: 4f254ebe15c6c512570cd8968d36e936a07a25f2 (commit)
       via: 25f9bba3743c72970c3285509129b09d93b6c22b (commit)
       via: c467886267db6b842b9bed9f50ee812d4ee427e4 (commit)
       via: 6cecbca2bbb8dc7cc4511e91a992ce77cb126d17 (commit)
       via: b6afdadc82a3d9c95ff61bad4a7f869d220cd0f9 (commit)
       via: c339d6f2e1e8111da4150974ca324d3c3b9393c0 (commit)
       via: 14e931ffbb1d0e3196420b0eceb7a21fcd09abf4 (commit)
      from: a53599b9b4cf991f9e5e3d8dd5ce7f249a41e039 (commit)


= COMMIT LOG ===========================================================
committer: Michael S Collins
comments: 
Merge branch 'master' of git://git.freeswitch.org/freeswitch
committer: Moises Silva
comments: 
Merge remote branch 'smgfs/master'
committer: Konrad Hammel
comments: 
freetdm: ss7 - update to configuration file to mirror ISDN configuration

diff --git a/libs/freetdm/mod_freetdm/mod_freetdm.c b/libs/freetdm/mod_freetdm/mod_freetdm.c
index 7f18b1f..4dc6cfc 100755
--- a/libs/freetdm/mod_freetdm/mod_freetdm.c
+++ b/libs/freetdm/mod_freetdm/mod_freetdm.c
@@ -2690,7 +2690,7 @@ static switch_status_t load_config(void)
 			ftdm_conf_parameter_t spanparameters[30];
 			char *id = (char *) switch_xml_attr(myspan, "id");
 			char *name = (char *) switch_xml_attr(myspan, "name");
-			char *configname = (char *) switch_xml_attr(myspan, "config");
+			char *configname = (char *) switch_xml_attr(myspan, "cfgprofile");
 			ftdm_span_t *span = NULL;
 			uint32_t span_id = 0;
 			unsigned paramindex = 0;
committer: Moises Silva
comments: 
Merge remote branch 'fsorig/master'
committer: Anthony Minessale
comments: 
FS-3056

diff --git a/src/mod/applications/mod_commands/mod_commands.c b/src/mod/applications/mod_commands/mod_commands.c
index 030cb8e..517134d 100644
--- a/src/mod/applications/mod_commands/mod_commands.c
+++ b/src/mod/applications/mod_commands/mod_commands.c
@@ -780,7 +780,7 @@ SWITCH_STANDARD_API(user_data_function)
 	if ((domain = strchr(user, '@'))) {
 		*domain++ = '\0';
 	} else {
-		if ((dup_domain = switch_core_get_variable("domain"))) {
+		if ((dup_domain = switch_core_get_variable_dup("domain"))) {
 			domain = dup_domain;
 		} else {
 			domain = "cluecon.com";
committer: Marc Olivier Chouinard
comments: 
switch_core_sqldb: Index column name wrong on table registrations.  (This wont create the index for people who already have the table)

diff --git a/src/switch_core_sqldb.c b/src/switch_core_sqldb.c
index 120b256..f135e95 100644
--- a/src/switch_core_sqldb.c
+++ b/src/switch_core_sqldb.c
@@ -1639,7 +1639,7 @@ static char create_registrations_sql[] =
 	"   network_proto VARCHAR(256),\n"
 	"   hostname VARCHAR(256)\n"
 	");\n"
-	"create index regindex1 on registrations (user,realm,hostname);\n";
+	"create index regindex1 on registrations (reg_user,realm,hostname);\n";
 	
 
 SWITCH_DECLARE(switch_status_t) switch_core_add_registration(const char *user, const char *realm, const char *token, const char *url, uint32_t expires, 
committer: Marc Olivier Chouinard
comments: 
switch_core: Add capability to specify core-db-name in switch.conf.xml to have sqlite in a different location.  This is important for everyone with relatively 'high' sip registration since the addition of sip registration to the core require sqlite db to be moved to a faster location (Ramdisk for example). Useful for everyone who moved their sqlite db for sofia to ramdisk because of performance issue.

diff --git a/conf/autoload_configs/switch.conf.xml b/conf/autoload_configs/switch.conf.xml
index 44893b9..95c4333 100644
--- a/conf/autoload_configs/switch.conf.xml
+++ b/conf/autoload_configs/switch.conf.xml
@@ -94,6 +94,8 @@
     <!--<param name="rtp-end-port" value="32768"/>-->
     <param name="rtp-enable-zrtp" value="true"/>
     <!-- <param name="core-db-dsn" value="dsn:username:password" /> -->
+    <!-- Allow to specify the sqlite db at a different location (In this example, move it to ramdrive for better performance on most linux distro (note, you loose the data if you reboot)) -->
+    <!-- <param name="core-db-name" value="/dev/shm/core.db" /> -->
     <!-- The system will create all the db schemas automatically, set this to false to avoid this behaviour-->
     <!--<param name="auto-create-schemas" value="true"/>-->
 	 <!-- <param name="core-dbtype" value="MSSQL"/> -->
diff --git a/src/include/private/switch_core_pvt.h b/src/include/private/switch_core_pvt.h
index 05cd24d..f8c6a79 100644
--- a/src/include/private/switch_core_pvt.h
+++ b/src/include/private/switch_core_pvt.h
@@ -236,6 +236,7 @@ struct switch_runtime {
 	char *odbc_dsn;
 	char *odbc_user;
 	char *odbc_pass;
+	char *dbname;
 	uint32_t debug_level;
 	uint32_t runlevel;
 	uint32_t tipping_point;
diff --git a/src/switch_core.c b/src/switch_core.c
index 0eb51cc..66731b6 100644
--- a/src/switch_core.c
+++ b/src/switch_core.c
@@ -1298,6 +1298,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_init(switch_core_flag_t flags, switc
 	runtime.default_dtmf_duration = SWITCH_DEFAULT_DTMF_DURATION;
 	runtime.min_dtmf_duration = SWITCH_MIN_DTMF_DURATION;
 	runtime.odbc_dbtype = DBTYPE_DEFAULT;
+	runtime.dbname = NULL;
 
 	/* INIT APR and Create the pool context */
 	if (apr_initialize() != SWITCH_STATUS_SUCCESS) {
@@ -1641,6 +1642,8 @@ static void switch_load_core_config(const char *file)
 					switch_rtp_set_start_port((switch_port_t) atoi(val));
 				} else if (!strcasecmp(var, "rtp-end-port") && !zstr(val)) {
 					switch_rtp_set_end_port((switch_port_t) atoi(val));
+				} else if (!strcasecmp(var, "core-db-name") && !zstr(val)) {
+					runtime.dbname = switch_core_strdup(runtime.memory_pool, val);
 				} else if (!strcasecmp(var, "core-db-dsn") && !zstr(val)) {
 					if (switch_odbc_available()) {
 						runtime.odbc_dsn = switch_core_strdup(runtime.memory_pool, val);
diff --git a/src/switch_core_sqldb.c b/src/switch_core_sqldb.c
index f54bd65..120b256 100644
--- a/src/switch_core_sqldb.c
+++ b/src/switch_core_sqldb.c
@@ -74,7 +74,11 @@ SWITCH_DECLARE(switch_status_t) _switch_core_db_handle(switch_cache_db_handle_t
 
 		r = _switch_cache_db_get_db_handle(dbh, SCDB_TYPE_ODBC, &options, file, func, line);
 	} else {
-		options.core_db_options.db_path = SWITCH_CORE_DB;
+		if (runtime.dbname) {
+			options.core_db_options.db_path = runtime.dbname;
+		} else {
+			options.core_db_options.db_path = SWITCH_CORE_DB;
+		}
 		r = _switch_cache_db_get_db_handle(dbh, SCDB_TYPE_CORE_DB, &options, file, func, line);
 	}
 
committer: Marc Olivier Chouinard
comments: 
mod_callcenter: force loopback_bowout=false on originate.  This will need to be reworked, but should fix basic issues call to an agent using loopback

diff --git a/src/mod/applications/mod_callcenter/mod_callcenter.c b/src/mod/applications/mod_callcenter/mod_callcenter.c
index a06520f..9d9feed 100644
--- a/src/mod/applications/mod_callcenter/mod_callcenter.c
+++ b/src/mod/applications/mod_callcenter/mod_callcenter.c
@@ -1384,6 +1384,8 @@ static void *SWITCH_THREAD_FUNC outbound_agent_thread_run(switch_thread_t *threa
 		switch_event_add_header(ovars, SWITCH_STACK_BOTTOM, "cc_agent", "%s", h->agent_name);
 		switch_event_add_header(ovars, SWITCH_STACK_BOTTOM, "cc_agent_type", "%s", h->agent_type);
 		switch_event_add_header(ovars, SWITCH_STACK_BOTTOM, "ignore_early_media", "true");
+		/* Force loopback to remain live, if not, the loop will detect the actual channel to gone */
+		switch_event_add_header(ovars, SWITCH_STACK_BOTTOM, "loopback_bowout", "false");
 
 		t_agent_called = switch_epoch_time_now(NULL);
 		dialstr = switch_mprintf("%s", h->originate_string);
committer: Marc Olivier Chouinard
comments: 
mod_callcenter: IMPORTANT UPDATE, DTMF during moh created an loop to reactivate MOH but got canceled right away because of pending DTMF in the queue never been cleaned.  Could cause masive disk write of debug, and can cause problem to the rest of FS stability.  This patch also include basic fundation for DTMF capture support for member waiting.

diff --git a/src/mod/applications/mod_callcenter/mod_callcenter.c b/src/mod/applications/mod_callcenter/mod_callcenter.c
index 61305bb..a06520f 100644
--- a/src/mod/applications/mod_callcenter/mod_callcenter.c
+++ b/src/mod/applications/mod_callcenter/mod_callcenter.c
@@ -2080,6 +2080,32 @@ void *SWITCH_THREAD_FUNC cc_member_thread_run(switch_thread_t *thread, void *obj
 	return NULL; 
 }
 
+struct moh_dtmf_helper {
+        const char *queue_name;
+        char dtmf;
+};
+
+static switch_status_t moh_on_dtmf(switch_core_session_t *session, void *input, switch_input_type_t itype, void *buf, unsigned int buflen) {
+	struct moh_dtmf_helper *h = (struct moh_dtmf_helper *) buf;
+
+	switch (itype) {
+		case SWITCH_INPUT_TYPE_DTMF:
+			{
+				/* Just laywork for people who want to get some DTMF actions */
+				switch_dtmf_t *dtmf = (switch_dtmf_t *) input;
+				if (strchr("#", dtmf->digit)) {
+					h->dtmf = dtmf->digit;
+					return SWITCH_STATUS_BREAK;
+				}
+			}
+			break;
+		default:
+			break;
+	}
+
+	return SWITCH_STATUS_SUCCESS;
+}
+
 #define CC_DESC "callcenter"
 #define CC_USAGE "queue_name"
 
@@ -2226,8 +2252,6 @@ SWITCH_STANDARD_APP(callcenter_function)
 	switch_thread_create(&thread, thd_attr, cc_member_thread_run, h, h->pool);
 
 	/* Playback MOH */
-	/* TODO Add DTMF callback support */
-	/* TODO add MOH infitite loop */	
 	if (cc_moh_override) {
 		cur_moh = switch_core_session_strdup(member_session, cc_moh_override);
 	} else {
@@ -2237,6 +2261,12 @@ SWITCH_STANDARD_APP(callcenter_function)
 
 	while (switch_channel_ready(member_channel)) {
 		switch_input_args_t args = { 0 };
+		struct moh_dtmf_helper ht;
+
+		ht.dtmf = '\0';
+		args.input_callback = moh_on_dtmf;
+		args.buf = (void *) &ht;
+		args.buflen = sizeof(h);
 
 		/* An agent was found, time to exit and let the bridge do it job */
 		if ((agent_uuid = switch_channel_get_variable(member_channel, "cc_agent_uuid"))) {
@@ -2260,6 +2290,8 @@ SWITCH_STANDARD_APP(callcenter_function)
 			switch_ivr_collect_digits_callback(session, &args, 0, 0);
 		}
 
+		switch_yield(1000);
+
 	}
 
 	/* Stop Member Thread */
committer: Moises Silva
comments: 
Merge branch 'master' of git.sangoma.com:smg_freeswitch
committer: Moises Silva
comments: 
freetdm: remove deprecated channel variables code

diff --git a/libs/freetdm/mod_freetdm/mod_freetdm.c b/libs/freetdm/mod_freetdm/mod_freetdm.c
index 78874de..b42a13b 100755
--- a/libs/freetdm/mod_freetdm/mod_freetdm.c
+++ b/libs/freetdm/mod_freetdm/mod_freetdm.c
@@ -1552,6 +1552,8 @@ ftdm_status_t ftdm_channel_from_event(ftdm_sigmsg_t *sigmsg, switch_core_session
 	switch_channel_set_variable_printf(channel, "freetdm_chan_number", "%d", chanid);
 	switch_channel_set_variable_printf(channel, "freetdm_bearer_capability", "%d", channel_caller_data->bearer_capability);	
 	switch_channel_set_variable_printf(channel, "freetdm_bearer_layer1", "%d", channel_caller_data->bearer_layer1);
+	switch_channel_set_variable_printf(channel, "freetdm_screening_ind", ftdm_screening2str(channel_caller_data->screen));
+	switch_channel_set_variable_printf(channel, "freetdm_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));
@@ -1580,21 +1582,13 @@ ftdm_status_t ftdm_channel_from_event(ftdm_sigmsg_t *sigmsg, switch_core_session
 	if (channel_caller_data->raw_data_len) {
 		switch_channel_set_variable_printf(channel, "freetdm_custom_call_data", "%s", channel_caller_data->raw_data);
 	}
-	/* Add any channel variable to the dial plan */
-	iter = ftdm_channel_get_var_iterator(sigmsg->channel, NULL);
-	for (curr = iter ; curr; curr = ftdm_iterator_next(curr)) {
-		ftdm_channel_get_current_var(curr, &var_name, &var_value);
-		snprintf(name, sizeof(name), FREETDM_VAR_PREFIX "%s", var_name);
-		switch_channel_set_variable_printf(channel, name, "%s", var_value);
-	}	
-	
 	/* Add any call variable to the dial plan */
 	iter = ftdm_call_get_var_iterator(channel_caller_data, iter);
 	for (curr = iter ; curr; curr = ftdm_iterator_next(curr)) {
 		ftdm_call_get_current_var(curr, &var_name, &var_value);
 		snprintf(name, sizeof(name), FREETDM_VAR_PREFIX "%s", var_name);
 		switch_channel_set_variable_printf(channel, name, "%s", var_value);
-		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Call Variable: %s=%s\n", name, var_value);
+		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Call Variable: %s = %s\n", name, var_value);
 	}
 	ftdm_iterator_free(iter);
 	
@@ -2149,8 +2143,6 @@ static FIO_SIGNAL_CB_FUNCTION(on_clear_channel_signal)
     switch(sigmsg->event_id) {
     case FTDM_SIGEVENT_START:
 		{
-			ftdm_call_add_var(caller_data, "screening_ind", ftdm_screening2str(caller_data->screen));
-			ftdm_call_add_var(caller_data, "presentation_ind", ftdm_presentation2str(caller_data->pres));
 			return ftdm_channel_from_event(sigmsg, &session);
 		}
 		break;
diff --git a/libs/freetdm/src/ftdm_io.c b/libs/freetdm/src/ftdm_io.c
index bd4e896..59615b4 100644
--- a/libs/freetdm/src/ftdm_io.c
+++ b/libs/freetdm/src/ftdm_io.c
@@ -65,7 +65,6 @@ ftdm_time_t time_current_throttle_log = 0;
 static ftdm_iterator_t *get_iterator(ftdm_iterator_type_t type, ftdm_iterator_t *iter);
 static ftdm_status_t ftdm_call_set_call_id(ftdm_channel_t *fchan, ftdm_caller_data_t *caller_data);
 static ftdm_status_t ftdm_call_clear_call_id(ftdm_caller_data_t *caller_data);
-static ftdm_status_t ftdm_channel_clear_vars(ftdm_channel_t *ftdmchan);
 static ftdm_status_t ftdm_channel_done(ftdm_channel_t *ftdmchan);
 
 static int time_is_init = 0;
@@ -2633,7 +2632,6 @@ static ftdm_status_t ftdm_channel_done(ftdm_channel_t *ftdmchan)
 	ftdm_buffer_destroy(&ftdmchan->pre_buffer);
 	ftdmchan->pre_buffer_size = 0;
 	ftdm_mutex_unlock(ftdmchan->pre_buffer_mutex);
-	ftdm_channel_clear_vars(ftdmchan);
 	if (ftdmchan->hangup_timer) {
 		ftdm_sched_cancel_timer(globals.timingsched, ftdmchan->hangup_timer);
 	}
@@ -4034,19 +4032,12 @@ done:
 
 FT_DECLARE(void) ftdm_call_clear_data(ftdm_caller_data_t *caller_data)
 {
-	ftdm_call_clear_vars(caller_data);
-	memset(&caller_data->raw_data, 0, sizeof(caller_data->raw_data));
-	caller_data->raw_data_len = 0;
-	return;
-}
-
-FT_DECLARE(ftdm_status_t) ftdm_call_clear_vars(ftdm_caller_data_t *caller_data)
-{
 	if (caller_data->variables) {
 		hashtable_destroy(caller_data->variables);
 	}
 	caller_data->variables = NULL;
-	return FTDM_SUCCESS;
+	memset(&caller_data->raw_data, 0, sizeof(caller_data->raw_data));
+	caller_data->raw_data_len = 0;
 }
 
 FT_DECLARE(ftdm_status_t) ftdm_call_remove_var(ftdm_caller_data_t *caller_data, const char *var_name)
@@ -4058,7 +4049,6 @@ FT_DECLARE(ftdm_status_t) ftdm_call_remove_var(ftdm_caller_data_t *caller_data,
 	return FTDM_SUCCESS;
 }
 
-
 FT_DECLARE(ftdm_status_t) ftdm_call_add_var(ftdm_caller_data_t *caller_data, const char *var_name, const char *value)
 {
 	char *t_name = 0, *t_val = 0;
@@ -4125,72 +4115,6 @@ FT_DECLARE(ftdm_status_t) ftdm_call_get_current_var(ftdm_iterator_t *iter, const
 	return FTDM_SUCCESS;
 }
 
-
-static ftdm_status_t ftdm_channel_clear_vars(ftdm_channel_t *ftdmchan)
-{
-	ftdm_channel_lock(ftdmchan);
-
-	if (ftdmchan->variable_hash) {
-		hashtable_destroy(ftdmchan->variable_hash);
-	}
-	ftdmchan->variable_hash = NULL;
-
-	ftdm_channel_unlock(ftdmchan);
-	return FTDM_SUCCESS;
-}
-
-FT_DECLARE(ftdm_status_t) ftdm_channel_add_var(ftdm_channel_t *ftdmchan, const char *var_name, const char *value)
-{
-	char *t_name = 0, *t_val = 0;
-
-	ftdm_status_t status = FTDM_FAIL;
-
-	if (!var_name || !value) {
-		return FTDM_FAIL;
-	}
-
-	ftdm_channel_lock(ftdmchan);
-
-	if (!ftdmchan->variable_hash) {
-		/* initialize on first use */
-		ftdmchan->variable_hash = create_hashtable(16, ftdm_hash_hashfromstring, ftdm_hash_equalkeys);
-		if (!ftdmchan->variable_hash) {
-			goto done;
-		}
-	}
-
-	t_name = ftdm_strdup(var_name);
-	t_val = ftdm_strdup(value);
-
-	hashtable_insert(ftdmchan->variable_hash, t_name, t_val, HASHTABLE_FLAG_FREE_KEY | HASHTABLE_FLAG_FREE_VALUE);
-
-	status = FTDM_SUCCESS;
-
-done:
-	ftdm_channel_unlock(ftdmchan);
-
-	return status;
-}
-
-
-FT_DECLARE(const char *) ftdm_channel_get_var(ftdm_channel_t *ftdmchan, const char *var_name)
-{
-	const char *var = NULL;
-
-	ftdm_channel_lock(ftdmchan);
-
-	if (!ftdmchan->variable_hash || !var_name) {
-		goto done;
-	}
-	
-	var = (const char *)hashtable_search(ftdmchan->variable_hash, (void *)var_name);
-
-done:
-	ftdm_channel_unlock(ftdmchan);
-
-	return var;
-}
-
 static ftdm_iterator_t *get_iterator(ftdm_iterator_type_t type, ftdm_iterator_t *iter)
 {
 	int allocated = 0;
@@ -4215,25 +4139,6 @@ static ftdm_iterator_t *get_iterator(ftdm_iterator_type_t type, ftdm_iterator_t
 	return iter;
 }
 
-FT_DECLARE(ftdm_iterator_t *) ftdm_channel_get_var_iterator(const ftdm_channel_t *ftdmchan, ftdm_iterator_t *iter)
-{
-	ftdm_hash_iterator_t *hashiter = NULL;
-	ftdm_channel_lock(ftdmchan);
-	hashiter = ftdmchan->variable_hash == NULL ? NULL : hashtable_first(ftdmchan->variable_hash);
-	ftdm_channel_unlock(ftdmchan);
-
-
-	if (hashiter == NULL) {
-		return NULL;
-	}
-	
-	if (!(iter = get_iterator(FTDM_ITERATOR_VARS, iter))) {
-		return NULL;
-	}
-	iter->pvt.hashiter = hashiter;
-	return iter;
-}
-
 FT_DECLARE(ftdm_iterator_t *) ftdm_span_get_chan_iterator(const ftdm_span_t *span, ftdm_iterator_t *iter)
 {
 	if (!(iter = get_iterator(FTDM_ITERATOR_CHANS, iter))) {
@@ -4244,24 +4149,6 @@ FT_DECLARE(ftdm_iterator_t *) ftdm_span_get_chan_iterator(const ftdm_span_t *spa
 	return iter;
 }
 
-FT_DECLARE(ftdm_status_t) ftdm_channel_get_current_var(ftdm_iterator_t *iter, const char **var_name, const char **var_val)
-{
-	const void *key = NULL;
-	void *val = NULL;
-
-	*var_name = NULL;
-	*var_val = NULL;
-
-	ftdm_assert_return(iter && (iter->type == FTDM_ITERATOR_VARS) && iter->pvt.hashiter, FTDM_FAIL, "Cannot get variable from invalid iterator!\n");
-
-	hashtable_this(iter->pvt.hashiter, &key, NULL, &val);
-
-	*var_name = key;
-	*var_val = val;
-
-	return FTDM_SUCCESS;
-}
-
 FT_DECLARE(ftdm_iterator_t *) ftdm_iterator_next(ftdm_iterator_t *iter)
 {
 	ftdm_assert_return(iter && iter->type, NULL, "Invalid iterator\n");
diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_out.c b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_out.c
index 06b0b21..918b284 100644
--- a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_out.c
+++ b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_out.c
@@ -299,7 +299,7 @@ void ft_to_sngss7_iam (ftdm_channel_t * ftdmchan)
 							ftdmchan->caller_data.dnis.digits,
 							iam.cdPtyNum.natAddrInd.val);
 
-	ftdm_call_clear_vars(&ftdmchan->caller_data);
+	ftdm_call_clear_data(&ftdmchan->caller_data);
 	SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 	return;
 }
@@ -379,7 +379,7 @@ void ft_to_sngss7_acm (ftdm_channel_t * ftdmchan)
 						ADDRCMPLT);
 	
 	SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx ACM\n", sngss7_info->circuit->cic);
-	ftdm_call_clear_vars(&ftdmchan->caller_data);
+	ftdm_call_clear_data(&ftdmchan->caller_data);
 	SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 	return;
 }
@@ -403,7 +403,7 @@ void ft_to_sngss7_anm (ftdm_channel_t * ftdmchan)
 						5);
 
   SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx ANM\n", sngss7_info->circuit->cic);
-  ftdm_call_clear_vars(&ftdmchan->caller_data);
+  ftdm_call_clear_data(&ftdmchan->caller_data);
   SS7_FUNC_TRACE_EXIT (__FUNCTION__);
   return;
 }
@@ -438,7 +438,7 @@ void ft_to_sngss7_rel (ftdm_channel_t * ftdmchan)
 	SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx REL cause=%d \n",
 							sngss7_info->circuit->cic,
 							ftdmchan->caller_data.hangup_cause );
-	ftdm_call_clear_vars(&ftdmchan->caller_data);
+	ftdm_call_clear_data(&ftdmchan->caller_data);
 	SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 	return;
 }
@@ -461,7 +461,7 @@ void ft_to_sngss7_rlc (ftdm_channel_t * ftdmchan)
 						&rlc);
 	
 	SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx RLC\n", sngss7_info->circuit->cic);
-	ftdm_call_clear_vars(&ftdmchan->caller_data);
+	ftdm_call_clear_data(&ftdmchan->caller_data);
 	SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 	return;
 }
@@ -482,7 +482,7 @@ void ft_to_sngss7_rsc (ftdm_channel_t * ftdmchan)
 						NULL);
 	
 	SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx RSC\n", sngss7_info->circuit->cic);
-	ftdm_call_clear_vars(&ftdmchan->caller_data);
+	ftdm_call_clear_data(&ftdmchan->caller_data);
 	SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 	return;
 }
@@ -503,7 +503,7 @@ void ft_to_sngss7_rsca (ftdm_channel_t * ftdmchan)
 						NULL);
 	
 	SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx RSC-RLC\n", sngss7_info->circuit->cic);
-	ftdm_call_clear_vars(&ftdmchan->caller_data);
+	ftdm_call_clear_data(&ftdmchan->caller_data);
 	SS7_FUNC_TRACE_EXIT (__FUNCTION__);
   return;
 }
@@ -524,7 +524,7 @@ void ft_to_sngss7_blo (ftdm_channel_t * ftdmchan)
 						NULL);
 	
 	SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx BLO\n", sngss7_info->circuit->cic);
-	ftdm_call_clear_vars(&ftdmchan->caller_data);
+	ftdm_call_clear_data(&ftdmchan->caller_data);
 	SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 	return;
 }
@@ -545,7 +545,7 @@ void ft_to_sngss7_bla (ftdm_channel_t * ftdmchan)
 						NULL);
 	
 	SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx BLA\n", sngss7_info->circuit->cic);
-	ftdm_call_clear_vars(&ftdmchan->caller_data);
+	ftdm_call_clear_data(&ftdmchan->caller_data);
 	SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 	return;
 }
@@ -567,7 +567,7 @@ ft_to_sngss7_ubl (ftdm_channel_t * ftdmchan)
 						NULL);
 	
 	SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx UBL\n", sngss7_info->circuit->cic);
-	ftdm_call_clear_vars(&ftdmchan->caller_data);
+	ftdm_call_clear_data(&ftdmchan->caller_data);
 	SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 	return;
 }
@@ -588,7 +588,7 @@ void ft_to_sngss7_uba (ftdm_channel_t * ftdmchan)
 						NULL);
 	
 	SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx UBA\n", sngss7_info->circuit->cic);
-	ftdm_call_clear_vars(&ftdmchan->caller_data);
+	ftdm_call_clear_data(&ftdmchan->caller_data);
 	SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 	return;
 }
@@ -609,7 +609,7 @@ void ft_to_sngss7_lpa (ftdm_channel_t * ftdmchan)
 						NULL);
 	
 	SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx LPA\n", sngss7_info->circuit->cic);
-	ftdm_call_clear_vars(&ftdmchan->caller_data);
+	ftdm_call_clear_data(&ftdmchan->caller_data);
 	SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 return;
 }
@@ -654,7 +654,7 @@ void ft_to_sngss7_gra (ftdm_channel_t * ftdmchan)
 							sngss7_info->circuit->cic,
 							(sngss7_info->circuit->cic + sngss7_span->rx_grs.range));
 	
-	ftdm_call_clear_vars(&ftdmchan->caller_data);
+	ftdm_call_clear_data(&ftdmchan->caller_data);
 	SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 	return;
 }
@@ -688,7 +688,7 @@ void ft_to_sngss7_grs (ftdm_channel_t * ftdmchan)
 							sngss7_info->circuit->cic,
 							(sngss7_info->circuit->cic + sngss7_span->tx_grs.range));
 
-	ftdm_call_clear_vars(&ftdmchan->caller_data);
+	ftdm_call_clear_data(&ftdmchan->caller_data);
 	SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 return;
 }
@@ -737,7 +737,7 @@ void ft_to_sngss7_cgba(ftdm_channel_t * ftdmchan)
 
 	/* clean out the saved data */
 	memset(&sngss7_span->rx_cgb, 0x0, sizeof(sngss7_group_data_t));
-	ftdm_call_clear_vars(&ftdmchan->caller_data);
+	ftdm_call_clear_data(&ftdmchan->caller_data);
 	SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 	return;
 }
@@ -787,7 +787,7 @@ void ft_to_sngss7_cgua(ftdm_channel_t * ftdmchan)
 	/* clean out the saved data */
 	memset(&sngss7_span->rx_cgu, 0x0, sizeof(sngss7_group_data_t));
 
-	ftdm_call_clear_vars(&ftdmchan->caller_data);
+	ftdm_call_clear_data(&ftdmchan->caller_data);
 	SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 	return;
 }
@@ -838,7 +838,7 @@ void ft_to_sngss7_cgb(ftdm_channel_t * ftdmchan)
 	/* clean out the saved data */
 	memset(&sngss7_span->tx_cgb, 0x0, sizeof(sngss7_group_data_t));
 
-	ftdm_call_clear_vars(&ftdmchan->caller_data);
+	ftdm_call_clear_data(&ftdmchan->caller_data);
 	SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 	return;
 }
@@ -889,7 +889,7 @@ void ft_to_sngss7_cgu(ftdm_channel_t * ftdmchan)
 	/* clean out the saved data */
 	memset(&sngss7_span->tx_cgu, 0x0, sizeof(sngss7_group_data_t));
 
-	ftdm_call_clear_vars(&ftdmchan->caller_data);
+	ftdm_call_clear_data(&ftdmchan->caller_data);
 	SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 	return;
 }
diff --git a/libs/freetdm/src/include/freetdm.h b/libs/freetdm/src/include/freetdm.h
index 588dc31..bb4b08b 100644
--- a/libs/freetdm/src/include/freetdm.h
+++ b/libs/freetdm/src/include/freetdm.h
@@ -1368,34 +1368,12 @@ FT_DECLARE(ftdm_status_t) ftdm_channel_read(ftdm_channel_t *ftdmchan, void *data
  */
 FT_DECLARE(ftdm_status_t) ftdm_channel_write(ftdm_channel_t *ftdmchan, void *data, ftdm_size_t datasize, ftdm_size_t *datalen);
 
-/*! \brief Add a custom variable to the channel
- *  \note This variables may be used by signaling modules to override signaling parameters
- *  \todo Document which signaling variables are available
- * */
-FT_DECLARE(ftdm_status_t) ftdm_channel_add_var(ftdm_channel_t *ftdmchan, const char *var_name, const char *value);
-
-/*! \brief Get a custom variable from the channel. 
- *  \note The variable pointer returned is only valid while the channel is open and it'll be destroyed when the channel is closed. */
-FT_DECLARE(const char *) ftdm_channel_get_var(ftdm_channel_t *ftdmchan, const char *var_name);
-
-/*! \brief Get an iterator to iterate over the channel variables
- *  \param ftdmchan The channel structure containing the variables
- *  \param iter Optional iterator. You can reuse an old iterator (not previously freed) to avoid the extra allocation of a new iterator.
- *  \note The iterator pointer returned is only valid while the channel is open and it'll be destroyed when the channel is closed. 
- *        This iterator is completely non-thread safe, if you are adding variables or removing variables while iterating 
- *        results are unpredictable
- */
-FT_DECLARE(ftdm_iterator_t *) ftdm_channel_get_var_iterator(const ftdm_channel_t *ftdmchan, ftdm_iterator_t *iter);
-
 /*! \brief Get iterator current value (depends on the iterator type)
  *  \note Channel iterators return a pointer to ftdm_channel_t
  *        Variable iterators return a pointer to the variable name (not the variable value)
  */
 FT_DECLARE(void *) ftdm_iterator_current(ftdm_iterator_t *iter);
 
-/*! \brief Get variable name and value for the current iterator position */
-FT_DECLARE(ftdm_status_t) ftdm_channel_get_current_var(ftdm_iterator_t *iter, const char **var_name, const char **var_val);
-
 /*! \brief Advance iterator */
 FT_DECLARE(ftdm_iterator_t *) ftdm_iterator_next(ftdm_iterator_t *iter);
 
@@ -1426,23 +1404,6 @@ FT_DECLARE(ftdm_iterator_t *) ftdm_call_get_var_iterator(const ftdm_caller_data_
 /*! \brief Get variable name and value for the current iterator position */
 FT_DECLARE(ftdm_status_t) ftdm_call_get_current_var(ftdm_iterator_t *iter, const char **var_name, const char **var_val);
 
-/*! \brief Clear all variables  attached to the call
- *  \note Variables are cleared at the end of each call back, so it is not necessary for the user to call this function.
- *  \todo Document which signaling variables are available
- * */
-FT_DECLARE(ftdm_status_t) ftdm_call_clear_vars(ftdm_caller_data_t *caller_data);
-
-/*! \brief Remove a variable attached to the call
- *  \note Removes a variable that was attached to the call.
- *  \todo Document which call variables are available
- * */
-FT_DECLARE(ftdm_status_t) ftdm_call_remove_var(ftdm_caller_data_t *caller_data, const char *var_name);
-
-/*! \brief Clears all the temporary data attached to this call
- *  \note Clears caller_data->variables and caller_data->raw_data.
- * */
-FT_DECLARE(void) ftdm_call_clear_data(ftdm_caller_data_t *caller_data);
-		
 /*! \brief Get the span pointer associated to the channel */
 FT_DECLARE(ftdm_span_t *) ftdm_channel_get_span(const ftdm_channel_t *ftdmchan);
 
diff --git a/libs/freetdm/src/include/private/ftdm_core.h b/libs/freetdm/src/include/private/ftdm_core.h
index ba16c7c..07717a4 100644
--- a/libs/freetdm/src/include/private/ftdm_core.h
+++ b/libs/freetdm/src/include/private/ftdm_core.h
@@ -451,7 +451,6 @@ struct ftdm_channel {
 	struct ftdm_caller_data caller_data;
 	struct ftdm_span *span;
 	struct ftdm_io_interface *fio;
-	ftdm_hash_t *variable_hash;
 	unsigned char rx_cas_bits;
 	uint32_t pre_buffer_size;
 	uint8_t rxgain_table[FTDM_GAINS_TABLE_SIZE];
@@ -629,6 +628,24 @@ FT_DECLARE(void) ftdm_channel_clear_detected_tones(ftdm_channel_t *ftdmchan);
 FT_DECLARE(void) ftdm_set_echocancel_call_begin(ftdm_channel_t *chan);
 FT_DECLARE(void) ftdm_set_echocancel_call_end(ftdm_channel_t *chan);
 
+/*! \brief Clear all variables  attached to the call
+ *  \note Variables are cleared at the end of each call back, so it is not necessary for the user to call this function.
+ *  \todo Document which signaling variables are available
+ * */
+FT_DECLARE(ftdm_status_t) ftdm_call_clear_vars(ftdm_caller_data_t *caller_data);
+
+/*! \brief Remove a variable attached to the call
+ *  \note Removes a variable that was attached to the call.
+ *  \todo Document which call variables are available
+ * */
+FT_DECLARE(ftdm_status_t) ftdm_call_remove_var(ftdm_caller_data_t *caller_data, const char *var_name);
+
+/*! \brief Clears all the temporary data attached to this call
+ *  \note Clears caller_data->variables and caller_data->raw_data.
+ * */
+FT_DECLARE(void) ftdm_call_clear_data(ftdm_caller_data_t *caller_data);
+		
+
 /*!
   \brief Assert condition
 */
committer: Moises Silva
comments: 
Merge branch 'netborder' of git.sangoma.com:smg_freeswitch into netborder
committer: Moises Silva
comments: 
Merge branch 'master' into netborder
committer: Moises Silva
comments: 
freetdm: added CLI completion for core commands

diff --git a/libs/freetdm/mod_freetdm/mod_freetdm.c b/libs/freetdm/mod_freetdm/mod_freetdm.c
index c0fdaa6..3cb7dce 100755
--- a/libs/freetdm/mod_freetdm/mod_freetdm.c
+++ b/libs/freetdm/mod_freetdm/mod_freetdm.c
@@ -4269,7 +4269,9 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_freetdm_load)
 	switch_console_set_complete("add ftdm gains");
 	switch_console_set_complete("add ftdm dtmf on");
 	switch_console_set_complete("add ftdm dtmf off");
-
+	switch_console_set_complete("add ftdm core state");
+	switch_console_set_complete("add ftdm core flag");
+	switch_console_set_complete("add ftdm core calls");
 
 	SWITCH_ADD_APP(app_interface, "disable_ec", "Disable Echo Canceller", "Disable Echo Canceller", disable_ec_function, "", SAF_NONE);
 	SWITCH_ADD_APP(app_interface, "disable_dtmf", "Disable DTMF Detection", "Disable DTMF Detection", disable_dtmf_function, "", SAF_NONE);
committer: Moises Silva
comments: 
freetdm: ftmod_r2 - Disable MF dump on call accepted          core - Do not start DTMF debugging until media is available

diff --git a/libs/freetdm/src/ftdm_io.c b/libs/freetdm/src/ftdm_io.c
index 906fbfe..3ef2278 100644
--- a/libs/freetdm/src/ftdm_io.c
+++ b/libs/freetdm/src/ftdm_io.c
@@ -5536,10 +5536,6 @@ FT_DECLARE(ftdm_status_t) ftdm_span_send_signal(ftdm_span_t *span, ftdm_sigmsg_t
 			}
 			ftdm_set_flag(sigmsg->channel, FTDM_CHANNEL_CALL_STARTED);
 			ftdm_call_set_call_id(sigmsg->channel, &sigmsg->channel->caller_data);
-			if (sigmsg->channel->dtmfdbg.requested) {
-				ftdm_channel_command(sigmsg->channel, FTDM_COMMAND_ENABLE_DEBUG_DTMF, NULL);
-			}
-
 			/* when cleaning up the public API I added this because mod_freetdm.c on_fxs_signal was
 			* doing it during SIGEVENT_START, but now that flags are private they can't, wonder if
 			* is needed at all?
diff --git a/libs/freetdm/src/ftmod/ftmod_r2/ftmod_r2.c b/libs/freetdm/src/ftmod/ftmod_r2/ftmod_r2.c
index 83705d9..4265c9b 100644
--- a/libs/freetdm/src/ftmod/ftmod_r2/ftmod_r2.c
+++ b/libs/freetdm/src/ftmod/ftmod_r2/ftmod_r2.c
@@ -676,12 +676,6 @@ static void ftdm_r2_on_call_offered(openr2_chan_t *r2chan, const char *ani, cons
 	ftdm_log_chan(ftdmchan, FTDM_LOG_NOTICE, "Call offered with ANI = %s, DNIS = %s, Category = %d, ANI restricted = %s\n", 
 			ani, dnis, category, ani_restricted ? "Yes" : "No");
 
-	/* nothing went wrong during call setup, MF has ended, we can and must disable the MF dump */
-	if (r2data->mf_dump_size) {
-		ftdm_channel_command(ftdmchan, FTDM_COMMAND_DISABLE_INPUT_DUMP, NULL);
-		ftdm_channel_command(ftdmchan, FTDM_COMMAND_DISABLE_OUTPUT_DUMP, NULL);
-	}
-
 	/* check if this is a collect call and if we should accept it */
 	if (!r2data->allow_collect_calls && category == OR2_CALLING_PARTY_CATEGORY_COLLECT_CALL) {
 		ftdm_log_chan_msg(ftdmchan, FTDM_LOG_NOTICE, "Rejecting collect call\n");
@@ -770,6 +764,12 @@ static void ftdm_r2_on_call_accepted(openr2_chan_t *r2chan, openr2_call_mode_t m
 	
 	R2CALL(ftdmchan)->accepted = 1;
 
+	/* nothing went wrong during call setup, MF has ended, we can and must disable the MF dump */
+	if (r2data->mf_dump_size) {
+		ftdm_channel_command(ftdmchan, FTDM_COMMAND_DISABLE_INPUT_DUMP, NULL);
+		ftdm_channel_command(ftdmchan, FTDM_COMMAND_DISABLE_OUTPUT_DUMP, NULL);
+	}
+
 	if (OR2_DIR_BACKWARD == openr2_chan_get_direction(r2chan)) {
 		if (R2CALL(ftdmchan)->answer_pending) {
 			ftdm_log_chan_msg(ftdmchan, FTDM_LOG_DEBUG, "Answer was pending, answering now.\n");
@@ -778,11 +778,6 @@ static void ftdm_r2_on_call_accepted(openr2_chan_t *r2chan, openr2_call_mode_t m
 			return;
 		}
 	} else {
-		/* nothing went wrong during call setup, MF has ended, we can and must disable the MF dump */
-		if (r2data->mf_dump_size) {
-			ftdm_channel_command(ftdmchan, FTDM_COMMAND_DISABLE_INPUT_DUMP, NULL);
-			ftdm_channel_command(ftdmchan, FTDM_COMMAND_DISABLE_OUTPUT_DUMP, NULL);
-		}
 		ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_PROGRESS_MEDIA);
 	}
 }
diff --git a/libs/freetdm/src/include/private/ftdm_core.h b/libs/freetdm/src/include/private/ftdm_core.h
index ba16c7c..7b26d65 100644
--- a/libs/freetdm/src/include/private/ftdm_core.h
+++ b/libs/freetdm/src/include/private/ftdm_core.h
@@ -688,6 +688,9 @@ FT_DECLARE(void) ftdm_set_echocancel_call_end(ftdm_channel_t *chan);
 			if (!ftdm_test_flag((fchan), FTDM_CHANNEL_MEDIA)) { \
 				ftdm_set_flag((fchan), FTDM_CHANNEL_MEDIA); \
 				ftdm_set_echocancel_call_begin((fchan)); \
+				if ((fchan)->dtmfdbg.requested) { \
+					ftdm_channel_command((fchan), FTDM_COMMAND_ENABLE_DEBUG_DTMF, NULL); \
+				} \
 			} \
 		} while (0);
 
committer: Moises Silva
comments: 
freetdm: ftmod_r2 - set MF dump directory default to logdir

diff --git a/libs/freetdm/src/ftmod/ftmod_r2/ftmod_r2.c b/libs/freetdm/src/ftmod/ftmod_r2/ftmod_r2.c
index d86fb43..83705d9 100644
--- a/libs/freetdm/src/ftmod/ftmod_r2/ftmod_r2.c
+++ b/libs/freetdm/src/ftmod/ftmod_r2/ftmod_r2.c
@@ -725,9 +725,10 @@ static void dump_mf(openr2_chan_t *r2chan)
 	if (r2data->mf_dump_size) {
 		char *logname = R2CALL(ftdmchan)->logname;
 		
-		ftdm_log_chan(ftdmchan, FTDM_LOG_ERROR, "Dumping IO output in prefix %s\n", logname);
-		snprintf(dfile, sizeof(dfile), logname ? "%s.s%dc%d.input.alaw" : "%s/s%dc%d.input.alaw", 
-				logname ? logname : r2data->logdir, ftdmchan->span_id, ftdmchan->chan_id);
+		ftdm_log_chan(ftdmchan, FTDM_LOG_ERROR, "Dumping IO output in prefix %s\n", !ftdm_strlen_zero(logname)
+				? logname : r2data->logdir);
+		snprintf(dfile, sizeof(dfile), !ftdm_strlen_zero(logname) ? "%s.s%dc%d.input.alaw" : "%s/s%dc%d.input.alaw", 
+				!ftdm_strlen_zero(logname) ? logname : r2data->logdir, ftdmchan->span_id, ftdmchan->chan_id);
 		f = fopen(dfile, "wb");
 		if (f) {
 			ftdm_log_chan(ftdmchan, FTDM_LOG_ERROR, "Dumping IO input in file %s\n", dfile);
@@ -737,8 +738,8 @@ static void dump_mf(openr2_chan_t *r2chan)
 			ftdm_log_chan(ftdmchan, FTDM_LOG_ERROR, "Could not dump IO input in file %s, error: %s", dfile, strerror(errno));
 		}
 
-		snprintf(dfile, sizeof(dfile), logname ? "%s.s%dc%d.output.alaw" : "%s/s%dc%d.output.alaw", 
-				logname ? logname : r2data->logdir, ftdmchan->span_id, ftdmchan->chan_id);
+		snprintf(dfile, sizeof(dfile), !ftdm_strlen_zero(logname) ? "%s.s%dc%d.output.alaw" : "%s/s%dc%d.output.alaw", 
+				!ftdm_strlen_zero(logname) ? logname : r2data->logdir, ftdmchan->span_id, ftdmchan->chan_id);
 		f = fopen(dfile, "wb");
 		if (f) {
 			ftdm_log_chan(ftdmchan, FTDM_LOG_ERROR, "Dumping IO output in file %s\n", dfile);
committer: Konrad Hammel
comments: 
freetdm: ss7 - update cli usuage print

diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cli.c b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cli.c
index 0298429..280107a 100644
--- a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cli.c
+++ b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cli.c
@@ -680,8 +680,8 @@ static ftdm_status_t handle_print_usuage(ftdm_stream_handle_t *stream)
 	stream->write_function(stream, "ftdm ss7 set mtrace X Y\n");
 	stream->write_function(stream, "\n");
 	stream->write_function(stream, "Ftmod_sangoma_ss7 information:\n");
-	stream->write_function(stream, "ftdm ss7 show status link X\n");
-	stream->write_function(stream, "ftdm ss7 show status linkset X\n");
+	stream->write_function(stream, "ftdm ss7 show status mtp3 X\n");
+	stream->write_function(stream, "ftdm ss7 show status mtp2 X\n");
 	stream->write_function(stream, "ftdm ss7 show status span X chan Y\n");
 	stream->write_function(stream, "ftdm ss7 show free span X chan Y\n");
 	stream->write_function(stream, "ftdm ss7 show inuse span X chan Y\n");
committer: Konrad Hammel
comments: 
freetdm: ss7: bug fix for ticket 6290, channel status was not showing channel 1

diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_xml.c b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_xml.c
index 2f67d3f..166fe5d 100644
--- a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_xml.c
+++ b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_xml.c
@@ -2833,7 +2833,7 @@ static int ftmod_ss7_fill_in_ccSpan(sng_ccSpan_t *ccSpan)
 		}
 
 		/* find a spot for this circuit in the global structure */
-		x = (ccSpan->procId * 1000);
+		x = (ccSpan->procId * 1000) + 1;
 		flag = 0;
 		while (flag == 0) {
 		/**********************************************************************/
committer: David Yat Sin
comments: 
Merge branch 'master' into netborder
committer: David Yat Sin
comments: 
freetdm: Added sigmsg->call_priv member that contains caller_data.priv originally set by user

diff --git a/libs/freetdm/src/ftdm_io.c b/libs/freetdm/src/ftdm_io.c
index c9000de..906fbfe 100644
--- a/libs/freetdm/src/ftdm_io.c
+++ b/libs/freetdm/src/ftdm_io.c
@@ -5504,6 +5504,7 @@ FT_DECLARE(ftdm_status_t) ftdm_span_send_signal(ftdm_span_t *span, ftdm_sigmsg_t
 		sigmsg->chan_id = sigmsg->channel->chan_id;
 		sigmsg->span_id = sigmsg->channel->span_id;
 		sigmsg->call_id = sigmsg->channel->caller_data.call_id;
+		sigmsg->call_priv = sigmsg->channel->caller_data.priv;
 	}
 	
 	/* some core things to do on special events */
diff --git a/libs/freetdm/src/include/freetdm.h b/libs/freetdm/src/include/freetdm.h
index 588dc31..77abf6a 100644
--- a/libs/freetdm/src/include/freetdm.h
+++ b/libs/freetdm/src/include/freetdm.h
@@ -554,6 +554,7 @@ struct ftdm_sigmsg {
 	uint32_t chan_id; /*!< easy access to chan id */
 	uint32_t span_id; /*!< easy access to span_id */
 	uint32_t call_id; /*!< unique call id for this call */
+	void *call_priv; /*!< Private data for the FreeTDM user from ftdm_caller_data->priv */
 	union {
 		ftdm_event_sigstatus_t sigstatus; /*!< valid if event_id is FTDM_SIGEVENT_SIGSTATUS_CHANGED */
 		ftdm_event_trace_t trace;	/*!< valid if event_id is FTDM_SIGEVENT_TRACE or FTDM_SIGEVENT_TRACE_RAW */
committer: David Yat Sin
comments: 
freetdm: ISDN - Removed unnecessay locks since lock is now done by ftdm core

diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.c b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.c
index 5702b72..608b0b6 100644
--- a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.c
+++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.c
@@ -912,9 +912,6 @@ static FIO_CHANNEL_OUTGOING_CALL_FUNCTION(ftdm_sangoma_isdn_outgoing_call)
 	sngisdn_chan_data_t  *sngisdn_info = ftdmchan->call_data;
 	ftdm_status_t status = FTDM_FAIL;	
 	
-	/* lock the channel while we check whether it is availble */
-	ftdm_channel_lock(ftdmchan);
-
 	switch (ftdmchan->state) {
 
 		case FTDM_CHANNEL_STATE_DOWN:
@@ -939,10 +936,9 @@ static FIO_CHANNEL_OUTGOING_CALL_FUNCTION(ftdm_sangoma_isdn_outgoing_call)
 			ftdm_log_chan_msg(ftdmchan, FTDM_LOG_WARNING, "Outgoing call requested channel in already in use\n");
 			status = FTDM_BREAK;
 		}
-		break;		  
+		break;
 	}
 
-	ftdm_channel_unlock(ftdmchan);
 	return status;
 }
 static FIO_CHANNEL_GET_SIG_STATUS_FUNCTION(ftdm_sangoma_isdn_get_chan_sig_status)
committer: Moises Silva
comments: 
no test

diff --git a/libs/freetdm/src/ftdm_io.c b/libs/freetdm/src/ftdm_io.c
index 3ac9f4c..529a30f 100644
--- a/libs/freetdm/src/ftdm_io.c
+++ b/libs/freetdm/src/ftdm_io.c
@@ -37,10 +37,6 @@
  *
  */
 
-#ifdef MOYTEST
-crap
-#endif
-
 #define _GNU_SOURCE
 #include "private/ftdm_core.h"
 #include <stdarg.h>
committer: Moises Silva
comments: 
test

diff --git a/libs/freetdm/src/ftdm_io.c b/libs/freetdm/src/ftdm_io.c
index 529a30f..3ac9f4c 100644
--- a/libs/freetdm/src/ftdm_io.c
+++ b/libs/freetdm/src/ftdm_io.c
@@ -37,6 +37,10 @@
  *
  */
 
+#ifdef MOYTEST
+crap
+#endif
+
 #define _GNU_SOURCE
 #include "private/ftdm_core.h"
 #include <stdarg.h>
committer: David Yat Sin
comments: 
Merge branch 'master' of git://git.freeswitch.org/freeswitch into netborder
========================================================================

Summary of changes:
 conf/autoload_configs/switch.conf.xml              |    2 +
 libs/freetdm/mod_freetdm/mod_freetdm.c             |   20 +--
 libs/freetdm/src/ftdm_io.c                         |  122 +-------------------
 libs/freetdm/src/ftmod/ftmod_r2/ftmod_r2.c         |   28 ++---
 .../ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.c  |    6 +-
 .../ftmod_sangoma_ss7/ftmod_sangoma_ss7_cli.c      |    4 +-
 .../ftmod_sangoma_ss7/ftmod_sangoma_ss7_out.c      |   36 +++---
 .../ftmod_sangoma_ss7/ftmod_sangoma_ss7_xml.c      |    2 +-
 libs/freetdm/src/include/freetdm.h                 |   40 +------
 libs/freetdm/src/include/private/ftdm_core.h       |   22 ++++-
 src/include/private/switch_core_pvt.h              |    1 +
 .../applications/mod_callcenter/mod_callcenter.c   |   38 ++++++-
 src/mod/applications/mod_commands/mod_commands.c   |    2 +-
 src/switch_core.c                                  |    3 +
 src/switch_core_sqldb.c                            |    8 +-
 15 files changed, 115 insertions(+), 219 deletions(-)

this email was generated because of /git/your-repo.git/hooks/post-receive by the file /git-core/contrib/hooks/post-receive-email
For more info, see http://blog.chomperstomp.com/?p=630 --
FreeSWITCH Source