提交 3eba7e36 authored 作者: Andrew Thompson's avatar Andrew Thompson

Send a "call_hangup" to outbound/handlecall sessions when the relevant channel is hungup


git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@12635 d0543943-73ff-0310-b7d9-9358b9ac24b2
上级 89287272
...@@ -524,6 +524,7 @@ static switch_status_t check_attached_sessions(listener_t *listener) ...@@ -524,6 +524,7 @@ static switch_status_t check_attached_sessions(listener_t *listener)
switch_mutex_lock(listener->sock_mutex); switch_mutex_lock(listener->sock_mutex);
ei_sendto(listener->ec, listener->sockfd, &sp->process, &ebuf); ei_sendto(listener->ec, listener->sockfd, &sp->process, &ebuf);
switch_mutex_unlock(listener->sock_mutex); switch_mutex_unlock(listener->sock_mutex);
ei_x_free(&ebuf);
/* event is a hangup, so this session can be removed */ /* event is a hangup, so this session can be removed */
if (pevent->event_id == SWITCH_EVENT_CHANNEL_HANGUP) { if (pevent->event_id == SWITCH_EVENT_CHANNEL_HANGUP) {
...@@ -535,20 +536,24 @@ static switch_status_t check_attached_sessions(listener_t *listener) ...@@ -535,20 +536,24 @@ static switch_status_t check_attached_sessions(listener_t *listener)
else else
listener->session_list = sp->next; listener->session_list = sp->next;
switch_channel_clear_flag(switch_core_session_get_channel(sp->session), CF_CONTROLLED); switch_channel_clear_flag(switch_core_session_get_channel(sp->session), CF_CONTROLLED);
/* this allows the application threads to exit */ /* this allows the application threads to exit */
switch_clear_flag_locked(sp, LFLAG_SESSION_ALIVE); switch_clear_flag_locked(sp, LFLAG_SESSION_ALIVE);
switch_core_session_rwunlock(sp->session); switch_core_session_rwunlock(sp->session);
removed = 1; removed = 1;
ei_x_new_with_version(&ebuf);
ei_x_encode_atom(&ebuf, "call_hangup");
switch_mutex_lock(listener->sock_mutex);
ei_sendto(listener->ec, listener->sockfd, &sp->process, &ebuf);
switch_mutex_unlock(listener->sock_mutex);
ei_x_free(&ebuf);
/* TODO /* TODO
if this listener was created outbound, and the last session has been detached if this listener was created outbound, and the last session has been detached
should the listener also exit? Does it matter? should the listener also exit? Does it matter?
*/ */
} }
ei_x_free(&ebuf);
switch_event_destroy(&pevent); switch_event_destroy(&pevent);
} }
if (!removed) if (!removed)
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论