[asterisk-commits] file: trunk r107157 - /trunk/channels/chan_sip.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Mon Mar 10 15:00:23 CDT 2008


Author: file
Date: Mon Mar 10 15:00:21 2008
New Revision: 107157

URL: http://svn.digium.com/view/asterisk?view=rev&rev=107157
Log:
If we receive a 488 on a T38 request reinvite back to audio. As well reinvite across a bridge back to audio if one side doesn't negotiate to T38.
(closes issue #8677)
Reported by: alex-911

Modified:
    trunk/channels/chan_sip.c

Modified: trunk/channels/chan_sip.c
URL: http://svn.digium.com/view/asterisk/trunk/channels/chan_sip.c?view=diff&rev=107157&r1=107156&r2=107157
==============================================================================
--- trunk/channels/chan_sip.c (original)
+++ trunk/channels/chan_sip.c Mon Mar 10 15:00:21 2008
@@ -5133,6 +5133,8 @@
 					transmit_reinvite_with_sdp(p, TRUE, FALSE);
 				}
 				break;
+			case AST_T38_TERMINATED:
+			case AST_T38_REFUSED:
 			case AST_T38_REQUEST_TERMINATE:		/* Shutdown T38 */
 				if (p->t38.state == T38_ENABLED)
 					transmit_reinvite_with_sdp(p, FALSE, FALSE);
@@ -14692,24 +14694,13 @@
 		break;
 	case 488: /* Not acceptable here */
 		xmitres = transmit_request(p, SIP_ACK, seqno, XMIT_UNRELIABLE, FALSE);
-		if (reinvite && p->udptl) {
-			/* If this is a T.38 call, we should go back to 
-			   audio. If this is an audio call - something went
-			   terribly wrong since we don't renegotiate codecs,
-			   only IP/port .
-			*/
+		if (p->udptl && p->t38.state == T38_LOCAL_REINVITE) {
 			change_t38_state(p, T38_DISABLED);
 			/* Try to reset RTP timers */
 			ast_rtp_set_rtptimers_onhold(p->rtp);
-			ast_log(LOG_ERROR, "Got error on T.38 re-invite. Bad configuration. Peer needs to have T.38 disabled.\n");
-
-			/*! \bug Is there any way we can go back to the audio call on both
-			   sides here? 
-			*/
-			/* While figuring that out, hangup the call */
-			if (p->owner && !req->ignore)
-				ast_queue_control(p->owner, AST_CONTROL_CONGESTION);
-			p->needdestroy = 1;
+
+			/* Trigger a reinvite back to audio */
+			transmit_reinvite_with_sdp(p, FALSE, FALSE);
 		} else if (p->udptl && p->t38.state == T38_LOCAL_DIRECT) {
 			/* We tried to send T.38 out in an initial INVITE and the remote side rejected it,
 			   right now we can't fall back to audio so totally abort.




More information about the asterisk-commits mailing list