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

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Tue Mar 13 03:14:13 MST 2007


Author: oej
Date: Tue Mar 13 05:14:13 2007
New Revision: 58846

URL: http://svn.digium.com/view/asterisk?view=rev&rev=58846
Log:
Merged revisions 58845 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r58845 | oej | 2007-03-13 11:03:03 +0100 (Tue, 13 Mar 2007) | 3 lines

Don't hangup the call on OK or errors on MESSAGE and INFO 
inside of a dialog (like video update requests).

........

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

Propchange: trunk/
------------------------------------------------------------------------------
Binary property 'branch-1.4-merged' - no diff available.

Modified: trunk/channels/chan_sip.c
URL: http://svn.digium.com/view/asterisk/trunk/channels/chan_sip.c?view=diff&rev=58846&r1=58845&r2=58846
==============================================================================
--- trunk/channels/chan_sip.c (original)
+++ trunk/channels/chan_sip.c Tue Mar 13 05:14:13 2007
@@ -12891,9 +12891,10 @@
 			break;
 		case 200:	/* 200 OK */
 			p->authtries = 0;	/* Reset authentication counter */
-			if (sipmethod == SIP_MESSAGE) {
-				/* We successfully transmitted a message */
-				ast_set_flag(&p->flags[0], SIP_NEEDDESTROY);	
+			if (sipmethod == SIP_MESSAGE || sipmethod == SIP_INFO) {
+				/* We successfully transmitted a message 
+					or a video update request in INFO */
+				/* Nothing happens here - the message is inside a dialog */
 			} else if (sipmethod == SIP_INVITE) {
 				handle_response_invite(p, resp, rest, req, seqno);
 			} else if (sipmethod == SIP_NOTIFY) {
@@ -13026,7 +13027,8 @@
 				if ((option_verbose > 2) && (resp != 487))
 					ast_verbose(VERBOSE_PREFIX_3 "Got SIP response %d \"%s\" back from %s\n", resp, rest, ast_inet_ntoa(p->sa.sin_addr));
 	
-				stop_media_flows(p); /* Immediately stop RTP, VRTP and UDPTL as applicable */
+				if (sipmethod == SIP_INVITE)
+					stop_media_flows(p); /* Immediately stop RTP, VRTP and UDPTL as applicable */
 
 				/* XXX Locking issues?? XXX */
 				switch(resp) {
@@ -13070,14 +13072,15 @@
 					break;
 				default:
 					/* Send hangup */	
-					if (owner)
+					if (owner && sipmethod != SIP_MESSAGE && sipmethod != SIP_INFO)
 						ast_queue_hangup(p->owner);
 					break;
 				}
 				/* ACK on invite */
 				if (sipmethod == SIP_INVITE) 
 					transmit_request(p, SIP_ACK, seqno, XMIT_UNRELIABLE, FALSE);
-				sip_alreadygone(p);
+				if (sipmethod != SIP_MESSAGE && sipmethod != SIP_INFO) 
+					sip_alreadygone(p);
 				if (!p->owner)
 					ast_set_flag(&p->flags[0], SIP_NEEDDESTROY);	
 			} else if ((resp >= 100) && (resp < 200)) {
@@ -13133,10 +13136,10 @@
 				}
 			} else if (sipmethod == SIP_BYE)
 				ast_set_flag(&p->flags[0], SIP_NEEDDESTROY);	
-			else if (sipmethod == SIP_MESSAGE)
-				/* We successfully transmitted a message */
-				/* XXX Why destroy this pvt after message transfer? Bad */
-				ast_set_flag(&p->flags[0], SIP_NEEDDESTROY);	
+			else if (sipmethod == SIP_MESSAGE || sipmethod == SIP_INFO)
+				/* We successfully transmitted a message or
+					a video update request in INFO */
+				;
 			else if (sipmethod == SIP_BYE) 
 				/* Ok, we're ready to go */
 				ast_set_flag(&p->flags[0], SIP_NEEDDESTROY);	



More information about the asterisk-commits mailing list