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); + } + + } }