提交 360ed43a authored 作者: Stefan Knoblich's avatar Stefan Knoblich

ftmod_libpri: ignore missing call_data in on_hangup() and use the call handle…

ftmod_libpri: ignore missing call_data in on_hangup() and use the call handle passed in the pevent structure (still needs more love...)
Signed-off-by: 's avatarStefan Knoblich <s.knoblich@axsentis.de>
上级 e56cbeef
......@@ -854,7 +854,7 @@ static int on_hangup(lpwrap_pri_t *spri, lpwrap_pri_event_t event_type, pri_even
{
ftdm_span_t *span = spri->span;
ftdm_channel_t *chan = ftdm_span_get_channel(span, pevent->hangup.channel);
q931_call *call = NULL;
/* q931_call *call = NULL; */
if (!chan) {
ftdm_log(FTDM_LOG_CRIT, "-- Hangup on channel %d:%d %s but it's not in use?\n", ftdm_span_get_id(spri->span), pevent->hangup.channel);
......@@ -868,22 +868,25 @@ static int on_hangup(lpwrap_pri_t *spri, lpwrap_pri_event_t event_type, pri_even
goto done;
}
/*
* Make sure we can really tear-down a call, simply ignore the missing call_data and
* use the call handle from the event
*
if (!chan->call_data) {
ftdm_log_chan(chan, FTDM_LOG_DEBUG, "Ignoring remote hangup in state %s with no call data\n", ftdm_channel_get_state_str(chan));
goto done;
}
call = (q931_call *)chan->call_data;
*/
ftdm_log(FTDM_LOG_DEBUG, "-- Hangup on channel %d:%d\n", ftdm_span_get_id(spri->span), pevent->hangup.channel);
pri_release(spri->pri, call, 0);
pri_destroycall(spri->pri, call);
pri_release(spri->pri, pevent->hangup.call, 0);
pri_destroycall(spri->pri, pevent->hangup.call);
chan->caller_data.hangup_cause = pevent->hangup.cause;
chan->call_data = NULL;
ftdm_set_state_locked(chan, FTDM_CHANNEL_STATE_TERMINATING);
done:
ftdm_channel_unlock(chan);
return 0;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论