Revision
16430
Author
anthm
Date
2010-01-20 20:51:04 -0600 (Wed, 20 Jan 2010)

Log Message

cleanup

Modified Paths

Diff

Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c (16429 => 16430)


--- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c	2010-01-21 02:48:53 UTC (rev 16429)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c	2010-01-21 02:51:04 UTC (rev 16430)
@@ -4964,10 +4964,11 @@
 
 								nua_notify(tech_pvt->nh, NUTAG_NEWSUB(1), SIPTAG_CONTENT_TYPE_STR("message/sipfrag"),
 										   NUTAG_SUBSTATE(nua_substate_terminated), SIPTAG_PAYLOAD_STR("SIP/2.0 200 OK"), SIPTAG_EVENT_STR(etmp), TAG_END());
-
-								if (b_tech_pvt) {
+								
+								if (b_tech_pvt && !sofia_test_flag(b_tech_pvt, TFLAG_BYE)) {
 									char* q850 = NULL;
 									const char* val = NULL;
+
 									sofia_set_flag_locked(b_tech_pvt, TFLAG_BYE);
 									val = switch_channel_get_variable(tech_pvt->channel, "disable_q850_reason");
 									if (!val || switch_true(val)) {
@@ -4977,6 +4978,7 @@
 											TAG_IF(!zstr(q850), SIPTAG_REASON_STR(q850)),
 											TAG_IF(!zstr(tech_pvt->user_via), SIPTAG_VIA_STR(tech_pvt->user_via)),
 											TAG_END());
+								
 								}
 							} else {
 								nua_notify(tech_pvt->nh, NUTAG_NEWSUB(1), SIPTAG_CONTENT_TYPE_STR("message/sipfrag"),
@@ -5721,6 +5723,7 @@
 		from_user = sip->sip_from->a_url->url_user;
 		from_host = sip->sip_from->a_url->url_host;
 		channel_name = url_set_chanvars(session, sip->sip_from->a_url, sip_from);
+
 		if (sip->sip_from->a_url->url_params && (tmp = sofia_glue_find_parameter(sip->sip_from->a_url->url_params, "isup-oli="))) {
 			aniii = switch_core_session_strdup(session, tmp + 9);
 			if ((tmp = strchr(aniii, ';'))) {

Modified: freeswitch/trunk/src/switch_ivr.c (16429 => 16430)


--- freeswitch/trunk/src/switch_ivr.c	2010-01-21 02:48:53 UTC (rev 16429)
+++ freeswitch/trunk/src/switch_ivr.c	2010-01-21 02:51:04 UTC (rev 16430)
@@ -736,7 +736,7 @@
 			break;
 		} else {
 			if (expires && switch_epoch_time_now(NULL) >= expires) {
-				switch_channel_hangup(channel, SWITCH_CAUSE_RECOVERY_ON_TIMER_EXPIRE);
+				switch_channel_hangup(channel, SWITCH_CAUSE_NORMAL_CLEARING);
 				break;
 			}
 

Modified: freeswitch/trunk/src/switch_ivr_bridge.c (16429 => 16430)


--- freeswitch/trunk/src/switch_ivr_bridge.c	2010-01-21 02:48:53 UTC (rev 16429)
+++ freeswitch/trunk/src/switch_ivr_bridge.c	2010-01-21 02:51:04 UTC (rev 16430)
@@ -625,7 +625,7 @@
 	} else {
 		if (!switch_channel_test_flag(channel, CF_TRANSFER) && !switch_channel_test_flag(channel, CF_REDIRECT) && 
 			!switch_channel_test_flag(channel, CF_XFER_ZOMBIE) && bd && !bd->clean_exit 
-			&& state != CS_PARK && state != CS_ROUTING && !switch_channel_test_flag(channel, CF_INNER_BRIDGE)) {
+			&& state != CS_PARK && state != CS_ROUTING && state != CS_EXCHANGE_MEDIA && !switch_channel_test_flag(channel, CF_INNER_BRIDGE)) {
 			switch_channel_hangup(channel, SWITCH_CAUSE_NORMAL_CLEARING);
 		}
 	}
@@ -1165,37 +1165,26 @@
 	}
 
 	state = switch_channel_get_state(caller_channel);
-	
-	if (!switch_channel_test_flag(caller_channel, CF_TRANSFER) && !switch_channel_test_flag(caller_channel, CF_REDIRECT) &&
-        !switch_channel_test_flag(caller_channel, CF_XFER_ZOMBIE) && !a_leg->clean_exit && !inner_bridge) {
-        int hup_ok = 0;
-        int x_ok = 0;
 
-        if ((state != CS_EXECUTE && state != CS_SOFT_EXECUTE && state != CS_PARK && state != CS_ROUTING)) {
-            hup_ok = 1;
-        }
 
-        if (switch_channel_test_flag(peer_channel, CF_ANSWERED) && state < CS_HANGUP) {
-            x_ok = 1;
-        }
-
-        if (x_ok) {
+    if (!switch_channel_test_flag(caller_channel, CF_TRANSFER) && !switch_channel_test_flag(caller_channel, CF_REDIRECT) &&
+        !switch_channel_test_flag(caller_channel, CF_XFER_ZOMBIE) && !a_leg->clean_exit && !inner_bridge) {
+        if ((state != CS_EXECUTE && state != CS_SOFT_EXECUTE && state != CS_PARK && state != CS_ROUTING) ||
+            (switch_channel_test_flag(peer_channel, CF_ANSWERED) && state < CS_HANGUP)) {
+			
             if (switch_true(switch_channel_get_variable(caller_channel, SWITCH_PARK_AFTER_BRIDGE_VARIABLE))) {
                 switch_ivr_park_session(session);
-                hup_ok = 0;
             } else if ((var = switch_channel_get_variable(caller_channel, SWITCH_TRANSFER_AFTER_BRIDGE_VARIABLE))) {
                 transfer_after_bridge(session, var);
-                hup_ok = 0;
+            } else if (switch_channel_test_flag(peer_channel, CF_ANSWERED) &&
+                       switch_true(switch_channel_get_variable(caller_channel, SWITCH_HANGUP_AFTER_BRIDGE_VARIABLE))) {
+				switch_call_cause_t cause = switch_channel_get_cause(peer_channel);
+				if (cause == SWITCH_CAUSE_NONE) {
+					cause = SWITCH_CAUSE_NORMAL_CLEARING;
+				}
+                switch_channel_hangup(caller_channel, cause);
             }
         }
-
-        if (hup_ok) {
-            if (switch_channel_test_flag(peer_channel, CF_ANSWERED) &&
-                switch_true(switch_channel_get_variable(caller_channel, SWITCH_HANGUP_AFTER_BRIDGE_VARIABLE))) {
-                switch_channel_hangup(caller_channel, switch_channel_get_cause(peer_channel));
-            }
-        }
-		
     }
 
 	if (switch_channel_test_flag(caller_channel, CF_REDIRECT)) {