[Freeswitch-svn] [commit] r9947 - freeswitch/trunk/src/mod/endpoints/mod_sofia

Freeswitch SVN mikej at freeswitch.org
Fri Oct 10 18:22:42 EDT 2008


Author: mikej
Date: Fri Oct 10 18:22:41 2008
New Revision: 9947

Modified:
   freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c

Log:
add error handling for when we get response to a invite that we don't have a session for (session timer after session destroyed?)

Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c
==============================================================================
--- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c	(original)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c	Fri Oct 10 18:22:41 2008
@@ -2149,6 +2149,29 @@
 			}
 		}
 	}
+
+	if (!session && (status == 180 || status == 183 || status == 200)) {
+		/* This should never happen.  It means the sip stack thinks there is a call but FreeSWITCH does not */
+		const char *callid = "n/a";
+
+		if (sip && sip->sip_call_id && sip->sip_call_id->i_id) callid = sip->sip_call_id->i_id;
+
+		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "received response to invite with no matching session, destroying callid [%s]!\n", callid);
+
+		if (nh) {
+			if (status == 200) {
+				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Sending BYE to orphan call.\n");
+				nua_bye(nh, TAG_END());
+			} else {
+				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Sending CANCEL to orphan call.\n");
+				nua_cancel(nh, TAG_END());
+			}
+
+			nua_handle_bind(nh, NULL);
+			nua_handle_destroy(nh);
+		}
+
+	}
 }
 
 



More information about the Freeswitch-svn mailing list