[asterisk-commits] trunk r35059 - in /trunk: ./ channels/chan_sip.c

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Tue Jun 20 03:34:53 MST 2006


Author: oej
Date: Tue Jun 20 05:34:53 2006
New Revision: 35059

URL: http://svn.digium.com/view/asterisk?rev=35059&view=rev
Log:
Issue #6820 - SIP channels hang in semi active state
- Block fix from 1.2
- Implement part of that fix that was not already implemented, but in a different way

basically, don't cancel destruction when we receive re-transmits.


Modified:
    trunk/   (props changed)
    trunk/channels/chan_sip.c

Propchange: trunk/
------------------------------------------------------------------------------
Binary property 'branch-1.2-blocked' - no diff available.

Modified: trunk/channels/chan_sip.c
URL: http://svn.digium.com/view/asterisk/trunk/channels/chan_sip.c?rev=35059&r1=35058&r2=35059&view=diff
==============================================================================
--- trunk/channels/chan_sip.c (original)
+++ trunk/channels/chan_sip.c Tue Jun 20 05:34:53 2006
@@ -4915,16 +4915,16 @@
 	/* Manager Hold and Unhold events must be generated, if necessary */
 	/* XXX Support for sendonly/recvonly needs to be fixed !!! */
 	if (sin.sin_addr.s_addr && !sendonly) {
-		append_history(p, "Unhold", "%s", req->data);
-
-		if (global_callevents && ast_test_flag(&p->flags[0], SIP_CALL_ONHOLD)) {
-			manager_event(EVENT_FLAG_CALL, "Unhold",
-				"Channel: %s\r\n"
-				"Uniqueid: %s\r\n",
-				p->owner->name, 
-				p->owner->uniqueid);
-
-		}
+		if (ast_test_flag(&p->flags[0], SIP_CALL_ONHOLD)) {
+			append_history(p, "Unhold", "%s", req->data);
+			if (global_callevents)
+				manager_event(EVENT_FLAG_CALL, "Unhold",
+					"Channel: %s\r\n"
+					"Uniqueid: %s\r\n",
+					p->owner->name, 
+					p->owner->uniqueid);
+
+		} 
 		ast_clear_flag(&p->flags[0], SIP_CALL_ONHOLD);
 	} else {
 		/* No address for RTP, we're on hold */
@@ -11820,7 +11820,8 @@
 					ast_set_flag(&p->flags[0], SIP_NEEDDESTROY);	
 			} else if ((resp >= 100) && (resp < 200)) {
 				if (sipmethod == SIP_INVITE) {
-					sip_cancel_destroy(p);
+					if (!ast_test_flag(req, SIP_PKT_IGNORE))
+						sip_cancel_destroy(p);
 					if (find_sdp(req))
 						process_sdp(p, req);
 					if (p->owner) {
@@ -11857,7 +11858,7 @@
 				/* They got the notify, this is the end */
 				if (p->owner) {
 					ast_log(LOG_WARNING, "Notify answer on an owned channel?\n");
-					//ast_queue_hangup(p->owner);
+					/* ast_queue_hangup(p->owner); Disabled */
 				} else {
 					if (!p->subscribed && !p->refer)
 						ast_set_flag(&p->flags[0], SIP_NEEDDESTROY);	
@@ -11915,7 +11916,7 @@
 		default:	/* Errors without handlers */
 			if ((resp >= 100) && (resp < 200)) {
 				if (sipmethod == SIP_INVITE) { 	/* re-invite */
-					if (!ignore)
+					if (!ast_test_flag(req, SIP_PKT_IGNORE))
 						sip_cancel_destroy(p);
 				}
 			}



More information about the asterisk-commits mailing list