]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
freetdm: Tweaks to SS7 native bridge feature
authorMoises Silva <moy@sangoma.com>
Fri, 27 Jan 2012 04:51:21 +0000 (23:51 -0500)
committerMoises Silva <moy@sangoma.com>
Fri, 27 Jan 2012 04:51:21 +0000 (23:51 -0500)
         - Enable native bridge also when receiving the UUID via SIP header
         - Remove some debug CRIT messages and set a more proper log level

libs/freetdm/mod_freetdm/mod_freetdm.c
libs/freetdm/src/ftdm_io.c
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.c
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_out.c

index a007fef081f10f519a2a778149f1207e0a79c9dd..2bbcdf97e40c0122ddc1a65cfdfdfc3d26a1d690 100755 (executable)
@@ -1260,6 +1260,9 @@ static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *sessi
        const char *var;
        const char *dest_num = NULL, *callerid_num = NULL;
        const char *network_peer_uuid = NULL;
+       char sigbridge_peer[255];
+       switch_channel_t *peer_chan = NULL;
+       switch_channel_t *our_chan = NULL;
        ftdm_hunting_scheme_t hunting;
        ftdm_usrmsg_t usrmsg;
 
@@ -1613,17 +1616,22 @@ static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *sessi
                        goto fail;
                }
 
+               our_chan = switch_core_session_get_channel(*new_session);
+
                if (network_peer_uuid) {
                        switch_core_session_t *network_peer = switch_core_session_locate(network_peer_uuid);
                        if (network_peer) {
-                                       const char *my_uuid = switch_core_session_get_uuid(*new_session);
-                                       private_t *peer_private = switch_core_session_get_private(network_peer);
-                                       switch_set_string(tech_pvt->network_peer_uuid, network_peer_uuid);
-                                       switch_set_string(peer_private->network_peer_uuid, my_uuid);
+                               const char *my_uuid = switch_core_session_get_uuid(*new_session);
+                               private_t *peer_private = switch_core_session_get_private(network_peer);
+                               switch_set_string(tech_pvt->network_peer_uuid, network_peer_uuid);
+                               switch_set_string(peer_private->network_peer_uuid, my_uuid);
 
-                                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Session %s is network-bridged with %s\n", my_uuid, network_peer_uuid);
+                               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Session %s is network-bridged with %s\n", 
+                                               my_uuid, network_peer_uuid);
 
-                                       switch_core_session_rwunlock(network_peer);
+                               snprintf(sigbridge_peer, sizeof(sigbridge_peer), "%u:%u", 
+                               ftdm_channel_get_span_id(peer_private->ftdmchan), ftdm_channel_get_id(peer_private->ftdmchan));
+                               switch_core_session_rwunlock(network_peer);
                        }
                }
 
@@ -1642,15 +1650,13 @@ static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *sessi
                 && (var = channel_get_variable(session, var_event, FREETDM_VAR_PREFIX "native_sigbridge")) 
                 && switch_true(var)
                 && switch_core_session_compare(*new_session, session)) {
-                       char sigbridge_peer[255];
                        private_t *peer_pvt = switch_core_session_get_private(session);
-                       switch_channel_t *peer_chan = switch_core_session_get_channel(session);
-                       switch_channel_t *our_chan = switch_core_session_get_channel(*new_session);
-                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, 
-                                       "Bridging native signaling of channel %s to channel %s\n", 
-                                       switch_channel_get_name(peer_chan), switch_channel_get_name(our_chan));
                        snprintf(sigbridge_peer, sizeof(sigbridge_peer), "%u:%u", 
                                        ftdm_channel_get_span_id(peer_pvt->ftdmchan), ftdm_channel_get_id(peer_pvt->ftdmchan));
+               }
+
+               if (!zstr(sigbridge_peer)) {
+                       peer_chan = switch_core_session_get_channel(session);
                        ftdm_usrmsg_add_var(&usrmsg, "sigbridge_peer", sigbridge_peer);
                }
 
@@ -1669,7 +1675,13 @@ static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *sessi
                        } else {
                                cause = SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER;
                        }
-            goto fail;
+                       goto fail;
+               }
+
+               if (our_chan && peer_chan) {
+                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, 
+                                       "Bridging native signaling of channel %s to channel %s\n", 
+                                       switch_channel_get_name(peer_chan), switch_channel_get_name(our_chan));
                }
 
                return SWITCH_CAUSE_SUCCESS;
index 6ebe5fc1619a33b5321d51a65c65e4478a708715..3b11611d49501e672d466f391b3bf6988603b5d4 100644 (file)
@@ -2520,7 +2520,6 @@ static ftdm_status_t _ftdm_channel_call_place_nl(const char *file, const char *f
        if (var) {
                ftdm_span_t *peer_span = NULL;
                ftdm_channel_t *peer_chan = NULL;
-               ftdm_log_chan_msg(ftdmchan, FTDM_LOG_CRIT, "enabling native signaling bridge!\n");
                ftdm_set_flag(ftdmchan, FTDM_CHANNEL_NATIVE_SIGBRIDGE);
                ftdm_get_channel_from_string(var, &peer_span, &peer_chan);
                if (peer_chan) {
index 968e557acc97cd27ca366a4a8e39366002832646..24f612545fc9a8f1028414a8d2ba2f18c70ab599 100644 (file)
@@ -693,7 +693,7 @@ static void ftdm_sangoma_ss7_process_peer_stack_event (ftdm_channel_t *ftdmchan,
                ftdm_channel_advance_states(ftdmchan);
        }
 
-       SS7_ERROR_CHAN(ftdmchan,"[CIC:%d]Relaying message %s from bridged peer\n", 
+       SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Relaying message %s from bridged peer\n", 
                        sngss7_info->circuit->cic, ftdm_sngss7_event2str(sngss7_event->event_id));
 
        switch (sngss7_event->event_id) {
index 59cb6a4f53120ab4dc12d0e37ad540ff8c3ab097..cc663655934574b808f7dce033957618457a7b06 100644 (file)
@@ -79,7 +79,6 @@ void ft_to_sngss7_iam (ftdm_channel_t * ftdmchan)
                                sngss7_info->peer_data = peer_info;
                                /* flush our own queue */
                                while ((event_clone = ftdm_queue_dequeue(sngss7_info->event_queue))) {
-                                       SS7_WARN("[CIC:%d]Discarding clone event from past call!\n", sngss7_info->circuit->cic);
                                        ftdm_safe_free(event_clone);
                                }
                                /* go up until release comes, note that state processing is done different and much simpler when there is a peer  */