<h1>Project "FreeSWITCH Source" received a push.</h1>
<h2>branch: master updated</h2>
<pre>
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)
</pre>= COMMIT LOG ===========================================================
<div class="highlight"><pre>committer: Michael S Collins
comments:
Merge branch 'master' of git://git.freeswitch.org/freeswitch
</pre></div>
<div class="highlight"><pre>committer: Moises Silva
comments:
Merge remote branch 'smgfs/master'
</pre></div>
<div class="highlight"><pre>committer: Konrad Hammel
comments:
freetdm: ss7 - update to configuration file to mirror ISDN configuration
<span style="color: #000080; font-weight: bold">diff --git a/libs/freetdm/mod_freetdm/mod_freetdm.c b/libs/freetdm/mod_freetdm/mod_freetdm.c</span>
<span style="color: #000080; font-weight: bold">index 7f18b1f..4dc6cfc 100755</span>
<span style="color: #A00000">--- a/libs/freetdm/mod_freetdm/mod_freetdm.c</span>
<span style="color: #00A000">+++ b/libs/freetdm/mod_freetdm/mod_freetdm.c</span>
<span style="color: #800080; font-weight: bold">@@ -2690,7 +2690,7 @@ static switch_status_t load_config(void)</span>
                        ftdm_conf_parameter_t spanparameters[30];
                        char *id = (char *) switch_xml_attr(myspan, "id");
                        char *name = (char *) switch_xml_attr(myspan, "name");
<span style="color: #A00000">-                        char *configname = (char *) switch_xml_attr(myspan, "config");</span>
<span style="color: #00A000">+                        char *configname = (char *) switch_xml_attr(myspan, "cfgprofile");</span>
                        ftdm_span_t *span = NULL;
                        uint32_t span_id = 0;
                        unsigned paramindex = 0;
</pre></div>
<div class="highlight"><pre>committer: Moises Silva
comments:
Merge remote branch 'fsorig/master'
</pre></div>
<div class="highlight"><pre>committer: Anthony Minessale
comments:
FS-3056
<span style="color: #000080; font-weight: bold">diff --git a/src/mod/applications/mod_commands/mod_commands.c b/src/mod/applications/mod_commands/mod_commands.c</span>
<span style="color: #000080; font-weight: bold">index 030cb8e..517134d 100644</span>
<span style="color: #A00000">--- a/src/mod/applications/mod_commands/mod_commands.c</span>
<span style="color: #00A000">+++ b/src/mod/applications/mod_commands/mod_commands.c</span>
<span style="color: #800080; font-weight: bold">@@ -780,7 +780,7 @@ SWITCH_STANDARD_API(user_data_function)</span>
        if ((domain = strchr(user, '@'))) {
                *domain++ = '\0';
        } else {
<span style="color: #A00000">-                if ((dup_domain = switch_core_get_variable("domain"))) {</span>
<span style="color: #00A000">+                if ((dup_domain = switch_core_get_variable_dup("domain"))) {</span>
                        domain = dup_domain;
                } else {
                        domain = "cluecon.com";
</pre></div>
<div class="highlight"><pre>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)
<span style="color: #000080; font-weight: bold">diff --git a/src/switch_core_sqldb.c b/src/switch_core_sqldb.c</span>
<span style="color: #000080; font-weight: bold">index 120b256..f135e95 100644</span>
<span style="color: #A00000">--- a/src/switch_core_sqldb.c</span>
<span style="color: #00A000">+++ b/src/switch_core_sqldb.c</span>
<span style="color: #800080; font-weight: bold">@@ -1639,7 +1639,7 @@ static char create_registrations_sql[] =</span>
        " network_proto VARCHAR(256),\n"
        " hostname VARCHAR(256)\n"
        ");\n"
<span style="color: #A00000">-        "create index regindex1 on registrations (user,realm,hostname);\n";</span>
<span style="color: #00A000">+        "create index regindex1 on registrations (reg_user,realm,hostname);\n";</span>
        
SWITCH_DECLARE(switch_status_t) switch_core_add_registration(const char *user, const char *realm, const char *token, const char *url, uint32_t expires,
</pre></div>
<div class="highlight"><pre>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.
<span style="color: #000080; font-weight: bold">diff --git a/conf/autoload_configs/switch.conf.xml b/conf/autoload_configs/switch.conf.xml</span>
<span style="color: #000080; font-weight: bold">index 44893b9..95c4333 100644</span>
<span style="color: #A00000">--- a/conf/autoload_configs/switch.conf.xml</span>
<span style="color: #00A000">+++ b/conf/autoload_configs/switch.conf.xml</span>
<span style="color: #800080; font-weight: bold">@@ -94,6 +94,8 @@</span>
<!--<param name="rtp-end-port" value="32768"/>-->
<param name="rtp-enable-zrtp" value="true"/>
<!-- <param name="core-db-dsn" value="dsn:username:password" /> -->
<span style="color: #00A000">+ <!-- 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)) --></span>
<span style="color: #00A000">+ <!-- <param name="core-db-name" value="/dev/shm/core.db" /> --></span>
<!-- 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"/> -->
<span style="color: #000080; font-weight: bold">diff --git a/src/include/private/switch_core_pvt.h b/src/include/private/switch_core_pvt.h</span>
<span style="color: #000080; font-weight: bold">index 05cd24d..f8c6a79 100644</span>
<span style="color: #A00000">--- a/src/include/private/switch_core_pvt.h</span>
<span style="color: #00A000">+++ b/src/include/private/switch_core_pvt.h</span>
<span style="color: #800080; font-weight: bold">@@ -236,6 +236,7 @@ struct switch_runtime {</span>
        char *odbc_dsn;
        char *odbc_user;
        char *odbc_pass;
<span style="color: #00A000">+        char *dbname;</span>
        uint32_t debug_level;
        uint32_t runlevel;
        uint32_t tipping_point;
<span style="color: #000080; font-weight: bold">diff --git a/src/switch_core.c b/src/switch_core.c</span>
<span style="color: #000080; font-weight: bold">index 0eb51cc..66731b6 100644</span>
<span style="color: #A00000">--- a/src/switch_core.c</span>
<span style="color: #00A000">+++ b/src/switch_core.c</span>
<span style="color: #800080; font-weight: bold">@@ -1298,6 +1298,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_init(switch_core_flag_t flags, switc</span>
        runtime.default_dtmf_duration = SWITCH_DEFAULT_DTMF_DURATION;
        runtime.min_dtmf_duration = SWITCH_MIN_DTMF_DURATION;
        runtime.odbc_dbtype = DBTYPE_DEFAULT;
<span style="color: #00A000">+        runtime.dbname = NULL;</span>
        /* INIT APR and Create the pool context */
        if (apr_initialize() != SWITCH_STATUS_SUCCESS) {
<span style="color: #800080; font-weight: bold">@@ -1641,6 +1642,8 @@ static void switch_load_core_config(const char *file)</span>
                                        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));
<span style="color: #00A000">+                                } else if (!strcasecmp(var, "core-db-name") && !zstr(val)) {</span>
<span style="color: #00A000">+                                        runtime.dbname = switch_core_strdup(runtime.memory_pool, val);</span>
                                } else if (!strcasecmp(var, "core-db-dsn") && !zstr(val)) {
                                        if (switch_odbc_available()) {
                                                runtime.odbc_dsn = switch_core_strdup(runtime.memory_pool, val);
<span style="color: #000080; font-weight: bold">diff --git a/src/switch_core_sqldb.c b/src/switch_core_sqldb.c</span>
<span style="color: #000080; font-weight: bold">index f54bd65..120b256 100644</span>
<span style="color: #A00000">--- a/src/switch_core_sqldb.c</span>
<span style="color: #00A000">+++ b/src/switch_core_sqldb.c</span>
<span style="color: #800080; font-weight: bold">@@ -74,7 +74,11 @@ SWITCH_DECLARE(switch_status_t) _switch_core_db_handle(switch_cache_db_handle_t</span>
                r = _switch_cache_db_get_db_handle(dbh, SCDB_TYPE_ODBC, &options, file, func, line);
        } else {
<span style="color: #A00000">-                options.core_db_options.db_path = SWITCH_CORE_DB;</span>
<span style="color: #00A000">+                if (runtime.dbname) {</span>
<span style="color: #00A000">+                        options.core_db_options.db_path = runtime.dbname;</span>
<span style="color: #00A000">+                } else {</span>
<span style="color: #00A000">+                        options.core_db_options.db_path = SWITCH_CORE_DB;</span>
<span style="color: #00A000">+                }</span>
                r = _switch_cache_db_get_db_handle(dbh, SCDB_TYPE_CORE_DB, &options, file, func, line);
        }
</pre></div>
<div class="highlight"><pre>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
<span style="color: #000080; font-weight: bold">diff --git a/src/mod/applications/mod_callcenter/mod_callcenter.c b/src/mod/applications/mod_callcenter/mod_callcenter.c</span>
<span style="color: #000080; font-weight: bold">index a06520f..9d9feed 100644</span>
<span style="color: #A00000">--- a/src/mod/applications/mod_callcenter/mod_callcenter.c</span>
<span style="color: #00A000">+++ b/src/mod/applications/mod_callcenter/mod_callcenter.c</span>
<span style="color: #800080; font-weight: bold">@@ -1384,6 +1384,8 @@ static void *SWITCH_THREAD_FUNC outbound_agent_thread_run(switch_thread_t *threa</span>
                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");
<span style="color: #00A000">+                /* Force loopback to remain live, if not, the loop will detect the actual channel to gone */</span>
<span style="color: #00A000">+                switch_event_add_header(ovars, SWITCH_STACK_BOTTOM, "loopback_bowout", "false");</span>
                t_agent_called = switch_epoch_time_now(NULL);
                dialstr = switch_mprintf("%s", h->originate_string);
</pre></div>
<div class="highlight"><pre>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.
<span style="color: #000080; font-weight: bold">diff --git a/src/mod/applications/mod_callcenter/mod_callcenter.c b/src/mod/applications/mod_callcenter/mod_callcenter.c</span>
<span style="color: #000080; font-weight: bold">index 61305bb..a06520f 100644</span>
<span style="color: #A00000">--- a/src/mod/applications/mod_callcenter/mod_callcenter.c</span>
<span style="color: #00A000">+++ b/src/mod/applications/mod_callcenter/mod_callcenter.c</span>
<span style="color: #800080; font-weight: bold">@@ -2080,6 +2080,32 @@ void *SWITCH_THREAD_FUNC cc_member_thread_run(switch_thread_t *thread, void *obj</span>
        return NULL;
}
<span style="color: #00A000">+struct moh_dtmf_helper {</span>
<span style="color: #00A000">+ const char *queue_name;</span>
<span style="color: #00A000">+ char dtmf;</span>
<span style="color: #00A000">+};</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+static switch_status_t moh_on_dtmf(switch_core_session_t *session, void *input, switch_input_type_t itype, void *buf, unsigned int buflen) {</span>
<span style="color: #00A000">+        struct moh_dtmf_helper *h = (struct moh_dtmf_helper *) buf;</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+        switch (itype) {</span>
<span style="color: #00A000">+                case SWITCH_INPUT_TYPE_DTMF:</span>
<span style="color: #00A000">+                        {</span>
<span style="color: #00A000">+                                /* Just laywork for people who want to get some DTMF actions */</span>
<span style="color: #00A000">+                                switch_dtmf_t *dtmf = (switch_dtmf_t *) input;</span>
<span style="color: #00A000">+                                if (strchr("#", dtmf->digit)) {</span>
<span style="color: #00A000">+                                        h->dtmf = dtmf->digit;</span>
<span style="color: #00A000">+                                        return SWITCH_STATUS_BREAK;</span>
<span style="color: #00A000">+                                }</span>
<span style="color: #00A000">+                        }</span>
<span style="color: #00A000">+                        break;</span>
<span style="color: #00A000">+                default:</span>
<span style="color: #00A000">+                        break;</span>
<span style="color: #00A000">+        }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+        return SWITCH_STATUS_SUCCESS;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
#define CC_DESC "callcenter"
#define CC_USAGE "queue_name"
<span style="color: #800080; font-weight: bold">@@ -2226,8 +2252,6 @@ SWITCH_STANDARD_APP(callcenter_function)</span>
        switch_thread_create(&thread, thd_attr, cc_member_thread_run, h, h->pool);
        /* Playback MOH */
<span style="color: #A00000">-        /* TODO Add DTMF callback support */</span>
<span style="color: #A00000">-        /* TODO add MOH infitite loop */        </span>
        if (cc_moh_override) {
                cur_moh = switch_core_session_strdup(member_session, cc_moh_override);
        } else {
<span style="color: #800080; font-weight: bold">@@ -2237,6 +2261,12 @@ SWITCH_STANDARD_APP(callcenter_function)</span>
        while (switch_channel_ready(member_channel)) {
                switch_input_args_t args = { 0 };
<span style="color: #00A000">+                struct moh_dtmf_helper ht;</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+                ht.dtmf = '\0';</span>
<span style="color: #00A000">+                args.input_callback = moh_on_dtmf;</span>
<span style="color: #00A000">+                args.buf = (void *) &ht;</span>
<span style="color: #00A000">+                args.buflen = sizeof(h);</span>
                /* 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"))) {
<span style="color: #800080; font-weight: bold">@@ -2260,6 +2290,8 @@ SWITCH_STANDARD_APP(callcenter_function)</span>
                        switch_ivr_collect_digits_callback(session, &args, 0, 0);
                }
<span style="color: #00A000">+                switch_yield(1000);</span>
<span style="color: #00A000">+</span>
        }
        /* Stop Member Thread */
</pre></div>
<div class="highlight"><pre>committer: Moises Silva
comments:
Merge branch 'master' of git.sangoma.com:smg_freeswitch
</pre></div>
<div class="highlight"><pre>committer: Moises Silva
comments:
freetdm: remove deprecated channel variables code
<span style="color: #000080; font-weight: bold">diff --git a/libs/freetdm/mod_freetdm/mod_freetdm.c b/libs/freetdm/mod_freetdm/mod_freetdm.c</span>
<span style="color: #000080; font-weight: bold">index 78874de..b42a13b 100755</span>
<span style="color: #A00000">--- a/libs/freetdm/mod_freetdm/mod_freetdm.c</span>
<span style="color: #00A000">+++ b/libs/freetdm/mod_freetdm/mod_freetdm.c</span>
<span style="color: #800080; font-weight: bold">@@ -1552,6 +1552,8 @@ ftdm_status_t ftdm_channel_from_event(ftdm_sigmsg_t *sigmsg, switch_core_session</span>
        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);
<span style="color: #00A000">+        switch_channel_set_variable_printf(channel, "freetdm_screening_ind", ftdm_screening2str(channel_caller_data->screen));</span>
<span style="color: #00A000">+        switch_channel_set_variable_printf(channel, "freetdm_presentation_ind", ftdm_presentation2str(channel_caller_data->pres));</span>
        
        if (globals.sip_headers) {
                switch_channel_set_variable(channel, "sip_h_X-FreeTDM-SpanName", ftdm_channel_get_span_name(sigmsg->channel));
<span style="color: #800080; font-weight: bold">@@ -1580,21 +1582,13 @@ ftdm_status_t ftdm_channel_from_event(ftdm_sigmsg_t *sigmsg, switch_core_session</span>
        if (channel_caller_data->raw_data_len) {
                switch_channel_set_variable_printf(channel, "freetdm_custom_call_data", "%s", channel_caller_data->raw_data);
        }
<span style="color: #A00000">-        /* Add any channel variable to the dial plan */</span>
<span style="color: #A00000">-        iter = ftdm_channel_get_var_iterator(sigmsg->channel, NULL);</span>
<span style="color: #A00000">-        for (curr = iter ; curr; curr = ftdm_iterator_next(curr)) {</span>
<span style="color: #A00000">-                ftdm_channel_get_current_var(curr, &var_name, &var_value);</span>
<span style="color: #A00000">-                snprintf(name, sizeof(name), FREETDM_VAR_PREFIX "%s", var_name);</span>
<span style="color: #A00000">-                switch_channel_set_variable_printf(channel, name, "%s", var_value);</span>
<span style="color: #A00000">-        }        </span>
<span style="color: #A00000">-        </span>
        /* 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);
<span style="color: #A00000">-                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Call Variable: %s=%s\n", name, var_value);</span>
<span style="color: #00A000">+                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Call Variable: %s = %s\n", name, var_value);</span>
        }
        ftdm_iterator_free(iter);
        
<span style="color: #800080; font-weight: bold">@@ -2149,8 +2143,6 @@ static FIO_SIGNAL_CB_FUNCTION(on_clear_channel_signal)</span>
switch(sigmsg->event_id) {
case FTDM_SIGEVENT_START:
                {
<span style="color: #A00000">-                        ftdm_call_add_var(caller_data, "screening_ind", ftdm_screening2str(caller_data->screen));</span>
<span style="color: #A00000">-                        ftdm_call_add_var(caller_data, "presentation_ind", ftdm_presentation2str(caller_data->pres));</span>
                        return ftdm_channel_from_event(sigmsg, &session);
                }
                break;
<span style="color: #000080; font-weight: bold">diff --git a/libs/freetdm/src/ftdm_io.c b/libs/freetdm/src/ftdm_io.c</span>
<span style="color: #000080; font-weight: bold">index bd4e896..59615b4 100644</span>
<span style="color: #A00000">--- a/libs/freetdm/src/ftdm_io.c</span>
<span style="color: #00A000">+++ b/libs/freetdm/src/ftdm_io.c</span>
<span style="color: #800080; font-weight: bold">@@ -65,7 +65,6 @@ ftdm_time_t time_current_throttle_log = 0;</span>
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);
<span style="color: #A00000">-static ftdm_status_t ftdm_channel_clear_vars(ftdm_channel_t *ftdmchan);</span>
static ftdm_status_t ftdm_channel_done(ftdm_channel_t *ftdmchan);
static int time_is_init = 0;
<span style="color: #800080; font-weight: bold">@@ -2633,7 +2632,6 @@ static ftdm_status_t ftdm_channel_done(ftdm_channel_t *ftdmchan)</span>
        ftdm_buffer_destroy(&ftdmchan->pre_buffer);
        ftdmchan->pre_buffer_size = 0;
        ftdm_mutex_unlock(ftdmchan->pre_buffer_mutex);
<span style="color: #A00000">-        ftdm_channel_clear_vars(ftdmchan);</span>
        if (ftdmchan->hangup_timer) {
                ftdm_sched_cancel_timer(globals.timingsched, ftdmchan->hangup_timer);
        }
<span style="color: #800080; font-weight: bold">@@ -4034,19 +4032,12 @@ done:</span>
FT_DECLARE(void) ftdm_call_clear_data(ftdm_caller_data_t *caller_data)
{
<span style="color: #A00000">-        ftdm_call_clear_vars(caller_data);</span>
<span style="color: #A00000">-        memset(&caller_data->raw_data, 0, sizeof(caller_data->raw_data));</span>
<span style="color: #A00000">-        caller_data->raw_data_len = 0;</span>
<span style="color: #A00000">-        return;</span>
<span style="color: #A00000">-}</span>
<span style="color: #A00000">-</span>
<span style="color: #A00000">-FT_DECLARE(ftdm_status_t) ftdm_call_clear_vars(ftdm_caller_data_t *caller_data)</span>
<span style="color: #A00000">-{</span>
        if (caller_data->variables) {
                hashtable_destroy(caller_data->variables);
        }
        caller_data->variables = NULL;
<span style="color: #A00000">-        return FTDM_SUCCESS;</span>
<span style="color: #00A000">+        memset(&caller_data->raw_data, 0, sizeof(caller_data->raw_data));</span>
<span style="color: #00A000">+        caller_data->raw_data_len = 0;</span>
}
FT_DECLARE(ftdm_status_t) ftdm_call_remove_var(ftdm_caller_data_t *caller_data, const char *var_name)
<span style="color: #800080; font-weight: bold">@@ -4058,7 +4049,6 @@ FT_DECLARE(ftdm_status_t) ftdm_call_remove_var(ftdm_caller_data_t *caller_data,</span>
        return FTDM_SUCCESS;
}
<span style="color: #A00000">-</span>
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;
<span style="color: #800080; font-weight: bold">@@ -4125,72 +4115,6 @@ FT_DECLARE(ftdm_status_t) ftdm_call_get_current_var(ftdm_iterator_t *iter, const</span>
        return FTDM_SUCCESS;
}
<span style="color: #A00000">-</span>
<span style="color: #A00000">-static ftdm_status_t ftdm_channel_clear_vars(ftdm_channel_t *ftdmchan)</span>
<span style="color: #A00000">-{</span>
<span style="color: #A00000">-        ftdm_channel_lock(ftdmchan);</span>
<span style="color: #A00000">-</span>
<span style="color: #A00000">-        if (ftdmchan->variable_hash) {</span>
<span style="color: #A00000">-                hashtable_destroy(ftdmchan->variable_hash);</span>
<span style="color: #A00000">-        }</span>
<span style="color: #A00000">-        ftdmchan->variable_hash = NULL;</span>
<span style="color: #A00000">-</span>
<span style="color: #A00000">-        ftdm_channel_unlock(ftdmchan);</span>
<span style="color: #A00000">-        return FTDM_SUCCESS;</span>
<span style="color: #A00000">-}</span>
<span style="color: #A00000">-</span>
<span style="color: #A00000">-FT_DECLARE(ftdm_status_t) ftdm_channel_add_var(ftdm_channel_t *ftdmchan, const char *var_name, const char *value)</span>
<span style="color: #A00000">-{</span>
<span style="color: #A00000">-        char *t_name = 0, *t_val = 0;</span>
<span style="color: #A00000">-</span>
<span style="color: #A00000">-        ftdm_status_t status = FTDM_FAIL;</span>
<span style="color: #A00000">-</span>
<span style="color: #A00000">-        if (!var_name || !value) {</span>
<span style="color: #A00000">-                return FTDM_FAIL;</span>
<span style="color: #A00000">-        }</span>
<span style="color: #A00000">-</span>
<span style="color: #A00000">-        ftdm_channel_lock(ftdmchan);</span>
<span style="color: #A00000">-</span>
<span style="color: #A00000">-        if (!ftdmchan->variable_hash) {</span>
<span style="color: #A00000">-                /* initialize on first use */</span>
<span style="color: #A00000">-                ftdmchan->variable_hash = create_hashtable(16, ftdm_hash_hashfromstring, ftdm_hash_equalkeys);</span>
<span style="color: #A00000">-                if (!ftdmchan->variable_hash) {</span>
<span style="color: #A00000">-                        goto done;</span>
<span style="color: #A00000">-                }</span>
<span style="color: #A00000">-        }</span>
<span style="color: #A00000">-</span>
<span style="color: #A00000">-        t_name = ftdm_strdup(var_name);</span>
<span style="color: #A00000">-        t_val = ftdm_strdup(value);</span>
<span style="color: #A00000">-</span>
<span style="color: #A00000">-        hashtable_insert(ftdmchan->variable_hash, t_name, t_val, HASHTABLE_FLAG_FREE_KEY | HASHTABLE_FLAG_FREE_VALUE);</span>
<span style="color: #A00000">-</span>
<span style="color: #A00000">-        status = FTDM_SUCCESS;</span>
<span style="color: #A00000">-</span>
<span style="color: #A00000">-done:</span>
<span style="color: #A00000">-        ftdm_channel_unlock(ftdmchan);</span>
<span style="color: #A00000">-</span>
<span style="color: #A00000">-        return status;</span>
<span style="color: #A00000">-}</span>
<span style="color: #A00000">-</span>
<span style="color: #A00000">-</span>
<span style="color: #A00000">-FT_DECLARE(const char *) ftdm_channel_get_var(ftdm_channel_t *ftdmchan, const char *var_name)</span>
<span style="color: #A00000">-{</span>
<span style="color: #A00000">-        const char *var = NULL;</span>
<span style="color: #A00000">-</span>
<span style="color: #A00000">-        ftdm_channel_lock(ftdmchan);</span>
<span style="color: #A00000">-</span>
<span style="color: #A00000">-        if (!ftdmchan->variable_hash || !var_name) {</span>
<span style="color: #A00000">-                goto done;</span>
<span style="color: #A00000">-        }</span>
<span style="color: #A00000">-        </span>
<span style="color: #A00000">-        var = (const char *)hashtable_search(ftdmchan->variable_hash, (void *)var_name);</span>
<span style="color: #A00000">-</span>
<span style="color: #A00000">-done:</span>
<span style="color: #A00000">-        ftdm_channel_unlock(ftdmchan);</span>
<span style="color: #A00000">-</span>
<span style="color: #A00000">-        return var;</span>
<span style="color: #A00000">-}</span>
<span style="color: #A00000">-</span>
static ftdm_iterator_t *get_iterator(ftdm_iterator_type_t type, ftdm_iterator_t *iter)
{
        int allocated = 0;
<span style="color: #800080; font-weight: bold">@@ -4215,25 +4139,6 @@ static ftdm_iterator_t *get_iterator(ftdm_iterator_type_t type, ftdm_iterator_t</span>
        return iter;
}
<span style="color: #A00000">-FT_DECLARE(ftdm_iterator_t *) ftdm_channel_get_var_iterator(const ftdm_channel_t *ftdmchan, ftdm_iterator_t *iter)</span>
<span style="color: #A00000">-{</span>
<span style="color: #A00000">-        ftdm_hash_iterator_t *hashiter = NULL;</span>
<span style="color: #A00000">-        ftdm_channel_lock(ftdmchan);</span>
<span style="color: #A00000">-        hashiter = ftdmchan->variable_hash == NULL ? NULL : hashtable_first(ftdmchan->variable_hash);</span>
<span style="color: #A00000">-        ftdm_channel_unlock(ftdmchan);</span>
<span style="color: #A00000">-</span>
<span style="color: #A00000">-</span>
<span style="color: #A00000">-        if (hashiter == NULL) {</span>
<span style="color: #A00000">-                return NULL;</span>
<span style="color: #A00000">-        }</span>
<span style="color: #A00000">-        </span>
<span style="color: #A00000">-        if (!(iter = get_iterator(FTDM_ITERATOR_VARS, iter))) {</span>
<span style="color: #A00000">-                return NULL;</span>
<span style="color: #A00000">-        }</span>
<span style="color: #A00000">-        iter->pvt.hashiter = hashiter;</span>
<span style="color: #A00000">-        return iter;</span>
<span style="color: #A00000">-}</span>
<span style="color: #A00000">-</span>
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))) {
<span style="color: #800080; font-weight: bold">@@ -4244,24 +4149,6 @@ FT_DECLARE(ftdm_iterator_t *) ftdm_span_get_chan_iterator(const ftdm_span_t *spa</span>
        return iter;
}
<span style="color: #A00000">-FT_DECLARE(ftdm_status_t) ftdm_channel_get_current_var(ftdm_iterator_t *iter, const char **var_name, const char **var_val)</span>
<span style="color: #A00000">-{</span>
<span style="color: #A00000">-        const void *key = NULL;</span>
<span style="color: #A00000">-        void *val = NULL;</span>
<span style="color: #A00000">-</span>
<span style="color: #A00000">-        *var_name = NULL;</span>
<span style="color: #A00000">-        *var_val = NULL;</span>
<span style="color: #A00000">-</span>
<span style="color: #A00000">-        ftdm_assert_return(iter && (iter->type == FTDM_ITERATOR_VARS) && iter->pvt.hashiter, FTDM_FAIL, "Cannot get variable from invalid iterator!\n");</span>
<span style="color: #A00000">-</span>
<span style="color: #A00000">-        hashtable_this(iter->pvt.hashiter, &key, NULL, &val);</span>
<span style="color: #A00000">-</span>
<span style="color: #A00000">-        *var_name = key;</span>
<span style="color: #A00000">-        *var_val = val;</span>
<span style="color: #A00000">-</span>
<span style="color: #A00000">-        return FTDM_SUCCESS;</span>
<span style="color: #A00000">-}</span>
<span style="color: #A00000">-</span>
FT_DECLARE(ftdm_iterator_t *) ftdm_iterator_next(ftdm_iterator_t *iter)
{
        ftdm_assert_return(iter && iter->type, NULL, "Invalid iterator\n");
<span style="color: #000080; font-weight: bold">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</span>
<span style="color: #000080; font-weight: bold">index 06b0b21..918b284 100644</span>
<span style="color: #A00000">--- a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_out.c</span>
<span style="color: #00A000">+++ b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_out.c</span>
<span style="color: #800080; font-weight: bold">@@ -299,7 +299,7 @@ void ft_to_sngss7_iam (ftdm_channel_t * ftdmchan)</span>
                                                        ftdmchan->caller_data.dnis.digits,
                                                        iam.cdPtyNum.natAddrInd.val);
<span style="color: #A00000">-        ftdm_call_clear_vars(&ftdmchan->caller_data);</span>
<span style="color: #00A000">+        ftdm_call_clear_data(&ftdmchan->caller_data);</span>
        SS7_FUNC_TRACE_EXIT (__FUNCTION__);
        return;
}
<span style="color: #800080; font-weight: bold">@@ -379,7 +379,7 @@ void ft_to_sngss7_acm (ftdm_channel_t * ftdmchan)</span>
                                                ADDRCMPLT);
        
        SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx ACM\n", sngss7_info->circuit->cic);
<span style="color: #A00000">-        ftdm_call_clear_vars(&ftdmchan->caller_data);</span>
<span style="color: #00A000">+        ftdm_call_clear_data(&ftdmchan->caller_data);</span>
        SS7_FUNC_TRACE_EXIT (__FUNCTION__);
        return;
}
<span style="color: #800080; font-weight: bold">@@ -403,7 +403,7 @@ void ft_to_sngss7_anm (ftdm_channel_t * ftdmchan)</span>
                                                5);
SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx ANM\n", sngss7_info->circuit->cic);
<span style="color: #A00000">- ftdm_call_clear_vars(&ftdmchan->caller_data);</span>
<span style="color: #00A000">+ ftdm_call_clear_data(&ftdmchan->caller_data);</span>
SS7_FUNC_TRACE_EXIT (__FUNCTION__);
return;
}
<span style="color: #800080; font-weight: bold">@@ -438,7 +438,7 @@ void ft_to_sngss7_rel (ftdm_channel_t * ftdmchan)</span>
        SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx REL cause=%d \n",
                                                        sngss7_info->circuit->cic,
                                                        ftdmchan->caller_data.hangup_cause );
<span style="color: #A00000">-        ftdm_call_clear_vars(&ftdmchan->caller_data);</span>
<span style="color: #00A000">+        ftdm_call_clear_data(&ftdmchan->caller_data);</span>
        SS7_FUNC_TRACE_EXIT (__FUNCTION__);
        return;
}
<span style="color: #800080; font-weight: bold">@@ -461,7 +461,7 @@ void ft_to_sngss7_rlc (ftdm_channel_t * ftdmchan)</span>
                                                &rlc);
        
        SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx RLC\n", sngss7_info->circuit->cic);
<span style="color: #A00000">-        ftdm_call_clear_vars(&ftdmchan->caller_data);</span>
<span style="color: #00A000">+        ftdm_call_clear_data(&ftdmchan->caller_data);</span>
        SS7_FUNC_TRACE_EXIT (__FUNCTION__);
        return;
}
<span style="color: #800080; font-weight: bold">@@ -482,7 +482,7 @@ void ft_to_sngss7_rsc (ftdm_channel_t * ftdmchan)</span>
                                                NULL);
        
        SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx RSC\n", sngss7_info->circuit->cic);
<span style="color: #A00000">-        ftdm_call_clear_vars(&ftdmchan->caller_data);</span>
<span style="color: #00A000">+        ftdm_call_clear_data(&ftdmchan->caller_data);</span>
        SS7_FUNC_TRACE_EXIT (__FUNCTION__);
        return;
}
<span style="color: #800080; font-weight: bold">@@ -503,7 +503,7 @@ void ft_to_sngss7_rsca (ftdm_channel_t * ftdmchan)</span>
                                                NULL);
        
        SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx RSC-RLC\n", sngss7_info->circuit->cic);
<span style="color: #A00000">-        ftdm_call_clear_vars(&ftdmchan->caller_data);</span>
<span style="color: #00A000">+        ftdm_call_clear_data(&ftdmchan->caller_data);</span>
        SS7_FUNC_TRACE_EXIT (__FUNCTION__);
return;
}
<span style="color: #800080; font-weight: bold">@@ -524,7 +524,7 @@ void ft_to_sngss7_blo (ftdm_channel_t * ftdmchan)</span>
                                                NULL);
        
        SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx BLO\n", sngss7_info->circuit->cic);
<span style="color: #A00000">-        ftdm_call_clear_vars(&ftdmchan->caller_data);</span>
<span style="color: #00A000">+        ftdm_call_clear_data(&ftdmchan->caller_data);</span>
        SS7_FUNC_TRACE_EXIT (__FUNCTION__);
        return;
}
<span style="color: #800080; font-weight: bold">@@ -545,7 +545,7 @@ void ft_to_sngss7_bla (ftdm_channel_t * ftdmchan)</span>
                                                NULL);
        
        SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx BLA\n", sngss7_info->circuit->cic);
<span style="color: #A00000">-        ftdm_call_clear_vars(&ftdmchan->caller_data);</span>
<span style="color: #00A000">+        ftdm_call_clear_data(&ftdmchan->caller_data);</span>
        SS7_FUNC_TRACE_EXIT (__FUNCTION__);
        return;
}
<span style="color: #800080; font-weight: bold">@@ -567,7 +567,7 @@ ft_to_sngss7_ubl (ftdm_channel_t * ftdmchan)</span>
                                                NULL);
        
        SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx UBL\n", sngss7_info->circuit->cic);
<span style="color: #A00000">-        ftdm_call_clear_vars(&ftdmchan->caller_data);</span>
<span style="color: #00A000">+        ftdm_call_clear_data(&ftdmchan->caller_data);</span>
        SS7_FUNC_TRACE_EXIT (__FUNCTION__);
        return;
}
<span style="color: #800080; font-weight: bold">@@ -588,7 +588,7 @@ void ft_to_sngss7_uba (ftdm_channel_t * ftdmchan)</span>
                                                NULL);
        
        SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx UBA\n", sngss7_info->circuit->cic);
<span style="color: #A00000">-        ftdm_call_clear_vars(&ftdmchan->caller_data);</span>
<span style="color: #00A000">+        ftdm_call_clear_data(&ftdmchan->caller_data);</span>
        SS7_FUNC_TRACE_EXIT (__FUNCTION__);
        return;
}
<span style="color: #800080; font-weight: bold">@@ -609,7 +609,7 @@ void ft_to_sngss7_lpa (ftdm_channel_t * ftdmchan)</span>
                                                NULL);
        
        SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx LPA\n", sngss7_info->circuit->cic);
<span style="color: #A00000">-        ftdm_call_clear_vars(&ftdmchan->caller_data);</span>
<span style="color: #00A000">+        ftdm_call_clear_data(&ftdmchan->caller_data);</span>
        SS7_FUNC_TRACE_EXIT (__FUNCTION__);
return;
}
<span style="color: #800080; font-weight: bold">@@ -654,7 +654,7 @@ void ft_to_sngss7_gra (ftdm_channel_t * ftdmchan)</span>
                                                        sngss7_info->circuit->cic,
                                                        (sngss7_info->circuit->cic + sngss7_span->rx_grs.range));
        
<span style="color: #A00000">-        ftdm_call_clear_vars(&ftdmchan->caller_data);</span>
<span style="color: #00A000">+        ftdm_call_clear_data(&ftdmchan->caller_data);</span>
        SS7_FUNC_TRACE_EXIT (__FUNCTION__);
        return;
}
<span style="color: #800080; font-weight: bold">@@ -688,7 +688,7 @@ void ft_to_sngss7_grs (ftdm_channel_t * ftdmchan)</span>
                                                        sngss7_info->circuit->cic,
                                                        (sngss7_info->circuit->cic + sngss7_span->tx_grs.range));
<span style="color: #A00000">-        ftdm_call_clear_vars(&ftdmchan->caller_data);</span>
<span style="color: #00A000">+        ftdm_call_clear_data(&ftdmchan->caller_data);</span>
        SS7_FUNC_TRACE_EXIT (__FUNCTION__);
return;
}
<span style="color: #800080; font-weight: bold">@@ -737,7 +737,7 @@ void ft_to_sngss7_cgba(ftdm_channel_t * ftdmchan)</span>
        /* clean out the saved data */
        memset(&sngss7_span->rx_cgb, 0x0, sizeof(sngss7_group_data_t));
<span style="color: #A00000">-        ftdm_call_clear_vars(&ftdmchan->caller_data);</span>
<span style="color: #00A000">+        ftdm_call_clear_data(&ftdmchan->caller_data);</span>
        SS7_FUNC_TRACE_EXIT (__FUNCTION__);
        return;
}
<span style="color: #800080; font-weight: bold">@@ -787,7 +787,7 @@ void ft_to_sngss7_cgua(ftdm_channel_t * ftdmchan)</span>
        /* clean out the saved data */
        memset(&sngss7_span->rx_cgu, 0x0, sizeof(sngss7_group_data_t));
<span style="color: #A00000">-        ftdm_call_clear_vars(&ftdmchan->caller_data);</span>
<span style="color: #00A000">+        ftdm_call_clear_data(&ftdmchan->caller_data);</span>
        SS7_FUNC_TRACE_EXIT (__FUNCTION__);
        return;
}
<span style="color: #800080; font-weight: bold">@@ -838,7 +838,7 @@ void ft_to_sngss7_cgb(ftdm_channel_t * ftdmchan)</span>
        /* clean out the saved data */
        memset(&sngss7_span->tx_cgb, 0x0, sizeof(sngss7_group_data_t));
<span style="color: #A00000">-        ftdm_call_clear_vars(&ftdmchan->caller_data);</span>
<span style="color: #00A000">+        ftdm_call_clear_data(&ftdmchan->caller_data);</span>
        SS7_FUNC_TRACE_EXIT (__FUNCTION__);
        return;
}
<span style="color: #800080; font-weight: bold">@@ -889,7 +889,7 @@ void ft_to_sngss7_cgu(ftdm_channel_t * ftdmchan)</span>
        /* clean out the saved data */
        memset(&sngss7_span->tx_cgu, 0x0, sizeof(sngss7_group_data_t));
<span style="color: #A00000">-        ftdm_call_clear_vars(&ftdmchan->caller_data);</span>
<span style="color: #00A000">+        ftdm_call_clear_data(&ftdmchan->caller_data);</span>
        SS7_FUNC_TRACE_EXIT (__FUNCTION__);
        return;
}
<span style="color: #000080; font-weight: bold">diff --git a/libs/freetdm/src/include/freetdm.h b/libs/freetdm/src/include/freetdm.h</span>
<span style="color: #000080; font-weight: bold">index 588dc31..bb4b08b 100644</span>
<span style="color: #A00000">--- a/libs/freetdm/src/include/freetdm.h</span>
<span style="color: #00A000">+++ b/libs/freetdm/src/include/freetdm.h</span>
<span style="color: #800080; font-weight: bold">@@ -1368,34 +1368,12 @@ FT_DECLARE(ftdm_status_t) ftdm_channel_read(ftdm_channel_t *ftdmchan, void *data</span>
*/
FT_DECLARE(ftdm_status_t) ftdm_channel_write(ftdm_channel_t *ftdmchan, void *data, ftdm_size_t datasize, ftdm_size_t *datalen);
<span style="color: #A00000">-/*! \brief Add a custom variable to the channel</span>
<span style="color: #A00000">- * \note This variables may be used by signaling modules to override signaling parameters</span>
<span style="color: #A00000">- * \todo Document which signaling variables are available</span>
<span style="color: #A00000">- * */</span>
<span style="color: #A00000">-FT_DECLARE(ftdm_status_t) ftdm_channel_add_var(ftdm_channel_t *ftdmchan, const char *var_name, const char *value);</span>
<span style="color: #A00000">-</span>
<span style="color: #A00000">-/*! \brief Get a custom variable from the channel. </span>
<span style="color: #A00000">- * \note The variable pointer returned is only valid while the channel is open and it'll be destroyed when the channel is closed. */</span>
<span style="color: #A00000">-FT_DECLARE(const char *) ftdm_channel_get_var(ftdm_channel_t *ftdmchan, const char *var_name);</span>
<span style="color: #A00000">-</span>
<span style="color: #A00000">-/*! \brief Get an iterator to iterate over the channel variables</span>
<span style="color: #A00000">- * \param ftdmchan The channel structure containing the variables</span>
<span style="color: #A00000">- * \param iter Optional iterator. You can reuse an old iterator (not previously freed) to avoid the extra allocation of a new iterator.</span>
<span style="color: #A00000">- * \note The iterator pointer returned is only valid while the channel is open and it'll be destroyed when the channel is closed. </span>
<span style="color: #A00000">- * This iterator is completely non-thread safe, if you are adding variables or removing variables while iterating </span>
<span style="color: #A00000">- * results are unpredictable</span>
<span style="color: #A00000">- */</span>
<span style="color: #A00000">-FT_DECLARE(ftdm_iterator_t *) ftdm_channel_get_var_iterator(const ftdm_channel_t *ftdmchan, ftdm_iterator_t *iter);</span>
<span style="color: #A00000">-</span>
/*! \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);
<span style="color: #A00000">-/*! \brief Get variable name and value for the current iterator position */</span>
<span style="color: #A00000">-FT_DECLARE(ftdm_status_t) ftdm_channel_get_current_var(ftdm_iterator_t *iter, const char **var_name, const char **var_val);</span>
<span style="color: #A00000">-</span>
/*! \brief Advance iterator */
FT_DECLARE(ftdm_iterator_t *) ftdm_iterator_next(ftdm_iterator_t *iter);
<span style="color: #800080; font-weight: bold">@@ -1426,23 +1404,6 @@ FT_DECLARE(ftdm_iterator_t *) ftdm_call_get_var_iterator(const ftdm_caller_data_</span>
/*! \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);
<span style="color: #A00000">-/*! \brief Clear all variables attached to the call</span>
<span style="color: #A00000">- * \note Variables are cleared at the end of each call back, so it is not necessary for the user to call this function.</span>
<span style="color: #A00000">- * \todo Document which signaling variables are available</span>
<span style="color: #A00000">- * */</span>
<span style="color: #A00000">-FT_DECLARE(ftdm_status_t) ftdm_call_clear_vars(ftdm_caller_data_t *caller_data);</span>
<span style="color: #A00000">-</span>
<span style="color: #A00000">-/*! \brief Remove a variable attached to the call</span>
<span style="color: #A00000">- * \note Removes a variable that was attached to the call.</span>
<span style="color: #A00000">- * \todo Document which call variables are available</span>
<span style="color: #A00000">- * */</span>
<span style="color: #A00000">-FT_DECLARE(ftdm_status_t) ftdm_call_remove_var(ftdm_caller_data_t *caller_data, const char *var_name);</span>
<span style="color: #A00000">-</span>
<span style="color: #A00000">-/*! \brief Clears all the temporary data attached to this call</span>
<span style="color: #A00000">- * \note Clears caller_data->variables and caller_data->raw_data.</span>
<span style="color: #A00000">- * */</span>
<span style="color: #A00000">-FT_DECLARE(void) ftdm_call_clear_data(ftdm_caller_data_t *caller_data);</span>
<span style="color: #A00000">-                </span>
/*! \brief Get the span pointer associated to the channel */
FT_DECLARE(ftdm_span_t *) ftdm_channel_get_span(const ftdm_channel_t *ftdmchan);
<span style="color: #000080; font-weight: bold">diff --git a/libs/freetdm/src/include/private/ftdm_core.h b/libs/freetdm/src/include/private/ftdm_core.h</span>
<span style="color: #000080; font-weight: bold">index ba16c7c..07717a4 100644</span>
<span style="color: #A00000">--- a/libs/freetdm/src/include/private/ftdm_core.h</span>
<span style="color: #00A000">+++ b/libs/freetdm/src/include/private/ftdm_core.h</span>
<span style="color: #800080; font-weight: bold">@@ -451,7 +451,6 @@ struct ftdm_channel {</span>
        struct ftdm_caller_data caller_data;
        struct ftdm_span *span;
        struct ftdm_io_interface *fio;
<span style="color: #A00000">-        ftdm_hash_t *variable_hash;</span>
        unsigned char rx_cas_bits;
        uint32_t pre_buffer_size;
        uint8_t rxgain_table[FTDM_GAINS_TABLE_SIZE];
<span style="color: #800080; font-weight: bold">@@ -629,6 +628,24 @@ FT_DECLARE(void) ftdm_channel_clear_detected_tones(ftdm_channel_t *ftdmchan);</span>
FT_DECLARE(void) ftdm_set_echocancel_call_begin(ftdm_channel_t *chan);
FT_DECLARE(void) ftdm_set_echocancel_call_end(ftdm_channel_t *chan);
<span style="color: #00A000">+/*! \brief Clear all variables attached to the call</span>
<span style="color: #00A000">+ * \note Variables are cleared at the end of each call back, so it is not necessary for the user to call this function.</span>
<span style="color: #00A000">+ * \todo Document which signaling variables are available</span>
<span style="color: #00A000">+ * */</span>
<span style="color: #00A000">+FT_DECLARE(ftdm_status_t) ftdm_call_clear_vars(ftdm_caller_data_t *caller_data);</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+/*! \brief Remove a variable attached to the call</span>
<span style="color: #00A000">+ * \note Removes a variable that was attached to the call.</span>
<span style="color: #00A000">+ * \todo Document which call variables are available</span>
<span style="color: #00A000">+ * */</span>
<span style="color: #00A000">+FT_DECLARE(ftdm_status_t) ftdm_call_remove_var(ftdm_caller_data_t *caller_data, const char *var_name);</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+/*! \brief Clears all the temporary data attached to this call</span>
<span style="color: #00A000">+ * \note Clears caller_data->variables and caller_data->raw_data.</span>
<span style="color: #00A000">+ * */</span>
<span style="color: #00A000">+FT_DECLARE(void) ftdm_call_clear_data(ftdm_caller_data_t *caller_data);</span>
<span style="color: #00A000">+                </span>
<span style="color: #00A000">+</span>
/*!
\brief Assert condition
*/
</pre></div>
<div class="highlight"><pre>committer: Moises Silva
comments:
Merge branch 'netborder' of git.sangoma.com:smg_freeswitch into netborder
</pre></div>
<div class="highlight"><pre>committer: Moises Silva
comments:
Merge branch 'master' into netborder
</pre></div>
<div class="highlight"><pre>committer: Moises Silva
comments:
freetdm: added CLI completion for core commands
<span style="color: #000080; font-weight: bold">diff --git a/libs/freetdm/mod_freetdm/mod_freetdm.c b/libs/freetdm/mod_freetdm/mod_freetdm.c</span>
<span style="color: #000080; font-weight: bold">index c0fdaa6..3cb7dce 100755</span>
<span style="color: #A00000">--- a/libs/freetdm/mod_freetdm/mod_freetdm.c</span>
<span style="color: #00A000">+++ b/libs/freetdm/mod_freetdm/mod_freetdm.c</span>
<span style="color: #800080; font-weight: bold">@@ -4269,7 +4269,9 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_freetdm_load)</span>
        switch_console_set_complete("add ftdm gains");
        switch_console_set_complete("add ftdm dtmf on");
        switch_console_set_complete("add ftdm dtmf off");
<span style="color: #A00000">-</span>
<span style="color: #00A000">+        switch_console_set_complete("add ftdm core state");</span>
<span style="color: #00A000">+        switch_console_set_complete("add ftdm core flag");</span>
<span style="color: #00A000">+        switch_console_set_complete("add ftdm core calls");</span>
        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);
</pre></div>
<div class="highlight"><pre>committer: Moises Silva
comments:
freetdm: ftmod_r2 - Disable MF dump on call accepted core - Do not start DTMF debugging until media is available
<span style="color: #000080; font-weight: bold">diff --git a/libs/freetdm/src/ftdm_io.c b/libs/freetdm/src/ftdm_io.c</span>
<span style="color: #000080; font-weight: bold">index 906fbfe..3ef2278 100644</span>
<span style="color: #A00000">--- a/libs/freetdm/src/ftdm_io.c</span>
<span style="color: #00A000">+++ b/libs/freetdm/src/ftdm_io.c</span>
<span style="color: #800080; font-weight: bold">@@ -5536,10 +5536,6 @@ FT_DECLARE(ftdm_status_t) ftdm_span_send_signal(ftdm_span_t *span, ftdm_sigmsg_t</span>
                        }
                        ftdm_set_flag(sigmsg->channel, FTDM_CHANNEL_CALL_STARTED);
                        ftdm_call_set_call_id(sigmsg->channel, &sigmsg->channel->caller_data);
<span style="color: #A00000">-                        if (sigmsg->channel->dtmfdbg.requested) {</span>
<span style="color: #A00000">-                                ftdm_channel_command(sigmsg->channel, FTDM_COMMAND_ENABLE_DEBUG_DTMF, NULL);</span>
<span style="color: #A00000">-                        }</span>
<span style="color: #A00000">-</span>
                        /* 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?
<span style="color: #000080; font-weight: bold">diff --git a/libs/freetdm/src/ftmod/ftmod_r2/ftmod_r2.c b/libs/freetdm/src/ftmod/ftmod_r2/ftmod_r2.c</span>
<span style="color: #000080; font-weight: bold">index 83705d9..4265c9b 100644</span>
<span style="color: #A00000">--- a/libs/freetdm/src/ftmod/ftmod_r2/ftmod_r2.c</span>
<span style="color: #00A000">+++ b/libs/freetdm/src/ftmod/ftmod_r2/ftmod_r2.c</span>
<span style="color: #800080; font-weight: bold">@@ -676,12 +676,6 @@ static void ftdm_r2_on_call_offered(openr2_chan_t *r2chan, const char *ani, cons</span>
        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");
<span style="color: #A00000">-        /* nothing went wrong during call setup, MF has ended, we can and must disable the MF dump */</span>
<span style="color: #A00000">-        if (r2data->mf_dump_size) {</span>
<span style="color: #A00000">-                ftdm_channel_command(ftdmchan, FTDM_COMMAND_DISABLE_INPUT_DUMP, NULL);</span>
<span style="color: #A00000">-                ftdm_channel_command(ftdmchan, FTDM_COMMAND_DISABLE_OUTPUT_DUMP, NULL);</span>
<span style="color: #A00000">-        }</span>
<span style="color: #A00000">-</span>
        /* 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");
<span style="color: #800080; font-weight: bold">@@ -770,6 +764,12 @@ static void ftdm_r2_on_call_accepted(openr2_chan_t *r2chan, openr2_call_mode_t m</span>
        
        R2CALL(ftdmchan)->accepted = 1;
<span style="color: #00A000">+        /* nothing went wrong during call setup, MF has ended, we can and must disable the MF dump */</span>
<span style="color: #00A000">+        if (r2data->mf_dump_size) {</span>
<span style="color: #00A000">+                ftdm_channel_command(ftdmchan, FTDM_COMMAND_DISABLE_INPUT_DUMP, NULL);</span>
<span style="color: #00A000">+                ftdm_channel_command(ftdmchan, FTDM_COMMAND_DISABLE_OUTPUT_DUMP, NULL);</span>
<span style="color: #00A000">+        }</span>
<span style="color: #00A000">+</span>
        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");
<span style="color: #800080; font-weight: bold">@@ -778,11 +778,6 @@ static void ftdm_r2_on_call_accepted(openr2_chan_t *r2chan, openr2_call_mode_t m</span>
                        return;
                }
        } else {
<span style="color: #A00000">-                /* nothing went wrong during call setup, MF has ended, we can and must disable the MF dump */</span>
<span style="color: #A00000">-                if (r2data->mf_dump_size) {</span>
<span style="color: #A00000">-                        ftdm_channel_command(ftdmchan, FTDM_COMMAND_DISABLE_INPUT_DUMP, NULL);</span>
<span style="color: #A00000">-                        ftdm_channel_command(ftdmchan, FTDM_COMMAND_DISABLE_OUTPUT_DUMP, NULL);</span>
<span style="color: #A00000">-                }</span>
                ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_PROGRESS_MEDIA);
        }
}
<span style="color: #000080; font-weight: bold">diff --git a/libs/freetdm/src/include/private/ftdm_core.h b/libs/freetdm/src/include/private/ftdm_core.h</span>
<span style="color: #000080; font-weight: bold">index ba16c7c..7b26d65 100644</span>
<span style="color: #A00000">--- a/libs/freetdm/src/include/private/ftdm_core.h</span>
<span style="color: #00A000">+++ b/libs/freetdm/src/include/private/ftdm_core.h</span>
<span style="color: #800080; font-weight: bold">@@ -688,6 +688,9 @@ FT_DECLARE(void) ftdm_set_echocancel_call_end(ftdm_channel_t *chan);</span>
                        if (!ftdm_test_flag((fchan), FTDM_CHANNEL_MEDIA)) { \
                                ftdm_set_flag((fchan), FTDM_CHANNEL_MEDIA); \
                                ftdm_set_echocancel_call_begin((fchan)); \
<span style="color: #00A000">+                                if ((fchan)->dtmfdbg.requested) { \</span>
<span style="color: #00A000">+                                        ftdm_channel_command((fchan), FTDM_COMMAND_ENABLE_DEBUG_DTMF, NULL); \</span>
<span style="color: #00A000">+                                } \</span>
                        } \
                } while (0);
</pre></div>
<div class="highlight"><pre>committer: Moises Silva
comments:
freetdm: ftmod_r2 - set MF dump directory default to logdir
<span style="color: #000080; font-weight: bold">diff --git a/libs/freetdm/src/ftmod/ftmod_r2/ftmod_r2.c b/libs/freetdm/src/ftmod/ftmod_r2/ftmod_r2.c</span>
<span style="color: #000080; font-weight: bold">index d86fb43..83705d9 100644</span>
<span style="color: #A00000">--- a/libs/freetdm/src/ftmod/ftmod_r2/ftmod_r2.c</span>
<span style="color: #00A000">+++ b/libs/freetdm/src/ftmod/ftmod_r2/ftmod_r2.c</span>
<span style="color: #800080; font-weight: bold">@@ -725,9 +725,10 @@ static void dump_mf(openr2_chan_t *r2chan)</span>
        if (r2data->mf_dump_size) {
                char *logname = R2CALL(ftdmchan)->logname;
                
<span style="color: #A00000">-                ftdm_log_chan(ftdmchan, FTDM_LOG_ERROR, "Dumping IO output in prefix %s\n", logname);</span>
<span style="color: #A00000">-                snprintf(dfile, sizeof(dfile), logname ? "%s.s%dc%d.input.alaw" : "%s/s%dc%d.input.alaw", </span>
<span style="color: #A00000">-                                logname ? logname : r2data->logdir, ftdmchan->span_id, ftdmchan->chan_id);</span>
<span style="color: #00A000">+                ftdm_log_chan(ftdmchan, FTDM_LOG_ERROR, "Dumping IO output in prefix %s\n", !ftdm_strlen_zero(logname)</span>
<span style="color: #00A000">+                                ? logname : r2data->logdir);</span>
<span style="color: #00A000">+                snprintf(dfile, sizeof(dfile), !ftdm_strlen_zero(logname) ? "%s.s%dc%d.input.alaw" : "%s/s%dc%d.input.alaw", </span>
<span style="color: #00A000">+                                !ftdm_strlen_zero(logname) ? logname : r2data->logdir, ftdmchan->span_id, ftdmchan->chan_id);</span>
                f = fopen(dfile, "wb");
                if (f) {
                        ftdm_log_chan(ftdmchan, FTDM_LOG_ERROR, "Dumping IO input in file %s\n", dfile);
<span style="color: #800080; font-weight: bold">@@ -737,8 +738,8 @@ static void dump_mf(openr2_chan_t *r2chan)</span>
                        ftdm_log_chan(ftdmchan, FTDM_LOG_ERROR, "Could not dump IO input in file %s, error: %s", dfile, strerror(errno));
                }
<span style="color: #A00000">-                snprintf(dfile, sizeof(dfile), logname ? "%s.s%dc%d.output.alaw" : "%s/s%dc%d.output.alaw", </span>
<span style="color: #A00000">-                                logname ? logname : r2data->logdir, ftdmchan->span_id, ftdmchan->chan_id);</span>
<span style="color: #00A000">+                snprintf(dfile, sizeof(dfile), !ftdm_strlen_zero(logname) ? "%s.s%dc%d.output.alaw" : "%s/s%dc%d.output.alaw", </span>
<span style="color: #00A000">+                                !ftdm_strlen_zero(logname) ? logname : r2data->logdir, ftdmchan->span_id, ftdmchan->chan_id);</span>
                f = fopen(dfile, "wb");
                if (f) {
                        ftdm_log_chan(ftdmchan, FTDM_LOG_ERROR, "Dumping IO output in file %s\n", dfile);
</pre></div>
<div class="highlight"><pre>committer: Konrad Hammel
comments:
freetdm: ss7 - update cli usuage print
<span style="color: #000080; font-weight: bold">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</span>
<span style="color: #000080; font-weight: bold">index 0298429..280107a 100644</span>
<span style="color: #A00000">--- a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cli.c</span>
<span style="color: #00A000">+++ b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cli.c</span>
<span style="color: #800080; font-weight: bold">@@ -680,8 +680,8 @@ static ftdm_status_t handle_print_usuage(ftdm_stream_handle_t *stream)</span>
        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");
<span style="color: #A00000">-        stream->write_function(stream, "ftdm ss7 show status link X\n");</span>
<span style="color: #A00000">-        stream->write_function(stream, "ftdm ss7 show status linkset X\n");</span>
<span style="color: #00A000">+        stream->write_function(stream, "ftdm ss7 show status mtp3 X\n");</span>
<span style="color: #00A000">+        stream->write_function(stream, "ftdm ss7 show status mtp2 X\n");</span>
        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");
</pre></div>
<div class="highlight"><pre>committer: Konrad Hammel
comments:
freetdm: ss7: bug fix for ticket 6290, channel status was not showing channel 1
<span style="color: #000080; font-weight: bold">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</span>
<span style="color: #000080; font-weight: bold">index 2f67d3f..166fe5d 100644</span>
<span style="color: #A00000">--- a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_xml.c</span>
<span style="color: #00A000">+++ b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_xml.c</span>
<span style="color: #800080; font-weight: bold">@@ -2833,7 +2833,7 @@ static int ftmod_ss7_fill_in_ccSpan(sng_ccSpan_t *ccSpan)</span>
                }
                /* find a spot for this circuit in the global structure */
<span style="color: #A00000">-                x = (ccSpan->procId * 1000);</span>
<span style="color: #00A000">+                x = (ccSpan->procId * 1000) + 1;</span>
                flag = 0;
                while (flag == 0) {
                /**********************************************************************/
</pre></div>
<div class="highlight"><pre>committer: David Yat Sin
comments:
Merge branch 'master' into netborder
</pre></div>
<div class="highlight"><pre>committer: David Yat Sin
comments:
freetdm: Added sigmsg->call_priv member that contains caller_data.priv originally set by user
<span style="color: #000080; font-weight: bold">diff --git a/libs/freetdm/src/ftdm_io.c b/libs/freetdm/src/ftdm_io.c</span>
<span style="color: #000080; font-weight: bold">index c9000de..906fbfe 100644</span>
<span style="color: #A00000">--- a/libs/freetdm/src/ftdm_io.c</span>
<span style="color: #00A000">+++ b/libs/freetdm/src/ftdm_io.c</span>
<span style="color: #800080; font-weight: bold">@@ -5504,6 +5504,7 @@ FT_DECLARE(ftdm_status_t) ftdm_span_send_signal(ftdm_span_t *span, ftdm_sigmsg_t</span>
                sigmsg->chan_id = sigmsg->channel->chan_id;
                sigmsg->span_id = sigmsg->channel->span_id;
                sigmsg->call_id = sigmsg->channel->caller_data.call_id;
<span style="color: #00A000">+                sigmsg->call_priv = sigmsg->channel->caller_data.priv;</span>
        }
        
        /* some core things to do on special events */
<span style="color: #000080; font-weight: bold">diff --git a/libs/freetdm/src/include/freetdm.h b/libs/freetdm/src/include/freetdm.h</span>
<span style="color: #000080; font-weight: bold">index 588dc31..77abf6a 100644</span>
<span style="color: #A00000">--- a/libs/freetdm/src/include/freetdm.h</span>
<span style="color: #00A000">+++ b/libs/freetdm/src/include/freetdm.h</span>
<span style="color: #800080; font-weight: bold">@@ -554,6 +554,7 @@ struct ftdm_sigmsg {</span>
        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 */
<span style="color: #00A000">+        void *call_priv; /*!< Private data for the FreeTDM user from ftdm_caller_data->priv */</span>
        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 */
</pre></div>
<div class="highlight"><pre>committer: David Yat Sin
comments:
freetdm: ISDN - Removed unnecessay locks since lock is now done by ftdm core
<span style="color: #000080; font-weight: bold">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</span>
<span style="color: #000080; font-weight: bold">index 5702b72..608b0b6 100644</span>
<span style="color: #A00000">--- a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.c</span>
<span style="color: #00A000">+++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.c</span>
<span style="color: #800080; font-weight: bold">@@ -912,9 +912,6 @@ static FIO_CHANNEL_OUTGOING_CALL_FUNCTION(ftdm_sangoma_isdn_outgoing_call)</span>
        sngisdn_chan_data_t *sngisdn_info = ftdmchan->call_data;
        ftdm_status_t status = FTDM_FAIL;        
        
<span style="color: #A00000">-        /* lock the channel while we check whether it is availble */</span>
<span style="color: #A00000">-        ftdm_channel_lock(ftdmchan);</span>
<span style="color: #A00000">-</span>
        switch (ftdmchan->state) {
                case FTDM_CHANNEL_STATE_DOWN:
<span style="color: #800080; font-weight: bold">@@ -939,10 +936,9 @@ static FIO_CHANNEL_OUTGOING_CALL_FUNCTION(ftdm_sangoma_isdn_outgoing_call)</span>
                        ftdm_log_chan_msg(ftdmchan, FTDM_LOG_WARNING, "Outgoing call requested channel in already in use\n");
                        status = FTDM_BREAK;
                }
<span style="color: #A00000">-                break;                 </span>
<span style="color: #00A000">+                break;</span>
        }
<span style="color: #A00000">-        ftdm_channel_unlock(ftdmchan);</span>
        return status;
}
static FIO_CHANNEL_GET_SIG_STATUS_FUNCTION(ftdm_sangoma_isdn_get_chan_sig_status)
</pre></div>
<div class="highlight"><pre>committer: Moises Silva
comments:
no test
<span style="color: #000080; font-weight: bold">diff --git a/libs/freetdm/src/ftdm_io.c b/libs/freetdm/src/ftdm_io.c</span>
<span style="color: #000080; font-weight: bold">index 3ac9f4c..529a30f 100644</span>
<span style="color: #A00000">--- a/libs/freetdm/src/ftdm_io.c</span>
<span style="color: #00A000">+++ b/libs/freetdm/src/ftdm_io.c</span>
<span style="color: #800080; font-weight: bold">@@ -37,10 +37,6 @@</span>
*
*/
<span style="color: #A00000">-#ifdef MOYTEST</span>
<span style="color: #A00000">-crap</span>
<span style="color: #A00000">-#endif</span>
<span style="color: #A00000">-</span>
#define _GNU_SOURCE
#include "private/ftdm_core.h"
#include <stdarg.h>
</pre></div>
<div class="highlight"><pre>committer: Moises Silva
comments:
test
<span style="color: #000080; font-weight: bold">diff --git a/libs/freetdm/src/ftdm_io.c b/libs/freetdm/src/ftdm_io.c</span>
<span style="color: #000080; font-weight: bold">index 529a30f..3ac9f4c 100644</span>
<span style="color: #A00000">--- a/libs/freetdm/src/ftdm_io.c</span>
<span style="color: #00A000">+++ b/libs/freetdm/src/ftdm_io.c</span>
<span style="color: #800080; font-weight: bold">@@ -37,6 +37,10 @@</span>
*
*/
<span style="color: #00A000">+#ifdef MOYTEST</span>
<span style="color: #00A000">+crap</span>
<span style="color: #00A000">+#endif</span>
<span style="color: #00A000">+</span>
#define _GNU_SOURCE
#include "private/ftdm_core.h"
#include <stdarg.h>
</pre></div>
<div class="highlight"><pre>committer: David Yat Sin
comments:
Merge branch 'master' of git://git.freeswitch.org/freeswitch into netborder
</pre></div>
========================================================================<pre>
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(-)
</pre>
<p>this email was generated because of /git/your-repo.git/hooks/post-receive by the file /git-core/contrib/hooks/post-receive-email<br />
For more info, see <a href="http://blog.chomperstomp.com/?p=630">http://blog.chomperstomp.com/?p=630</a>
-- <br />
FreeSWITCH Source</p>