提交 50178693 authored 作者: Mathieu Parent's avatar Mathieu Parent

Skinny: handle early media

See MODSKINNY-8 (switch_core_io.c:121
SKINNY/internal/SEP002699438FB6:0/1 has no read codec when using early
media)
上级 df92a3ca
......@@ -972,9 +972,12 @@ switch_status_t channel_answer_channel(switch_core_session_t *session)
switch_status_t channel_receive_message(switch_core_session_t *session, switch_core_session_message_t *msg)
{
private_t *tech_pvt = switch_core_session_get_private(session);
switch (msg->message_id) {
case SWITCH_MESSAGE_INDICATE_ANSWER:
{
switch_clear_flag_locked(tech_pvt, TFLAG_EARLY_MEDIA);
channel_answer_channel(session);
}
break;
......@@ -982,6 +985,14 @@ switch_status_t channel_receive_message(switch_core_session_t *session, switch_c
{
skinny_session_send_call_info_all(session);
}
case SWITCH_MESSAGE_INDICATE_PROGRESS:
{
if (!switch_test_flag(tech_pvt, TFLAG_EARLY_MEDIA)) {
/* early media */
switch_set_flag_locked(tech_pvt, TFLAG_EARLY_MEDIA);
channel_answer_channel(session);
}
}
default:
break;
}
......
......@@ -146,10 +146,11 @@ typedef switch_status_t (*skinny_listener_callback_func_t) (listener_t *listener
/* CHANNEL TYPES */
/*****************************************************************************/
typedef enum {
TFLAG_IO = (1 << 0),
TFLAG_READING = (1 << 9),
TFLAG_WRITING = (1 << 10),
TFLAG_FORCE_ROUTE = (1 << 11)
TFLAG_FORCE_ROUTE = (1 << 0),
TFLAG_EARLY_MEDIA = (1 << 1),
TFLAG_IO = (1 << 2),
TFLAG_READING = (1 << 3),
TFLAG_WRITING = (1 << 4)
} TFLAGS;
typedef enum {
......
......@@ -698,6 +698,7 @@ switch_status_t skinny_session_start_media(switch_core_session_t *session, liste
channel = switch_core_session_get_channel(session);
tech_pvt = switch_core_session_get_private(session);
if (!switch_channel_test_flag(channel, CF_EARLY_MEDIA)) {
send_stop_tone(listener, line_instance, tech_pvt->call_id);
send_open_receive_channel(listener,
tech_pvt->call_id, /* uint32_t conference_id, */
......@@ -709,6 +710,8 @@ switch_status_t skinny_session_start_media(switch_core_session_t *session, liste
0, /* uint32_t conference_id2, */
0 /* uint32_t reserved[10] */
);
}
if (!switch_test_flag(tech_pvt, TFLAG_EARLY_MEDIA)) {
skinny_line_set_state(listener, line_instance, tech_pvt->call_id, SKINNY_CONNECTED);
send_select_soft_keys(listener, line_instance, tech_pvt->call_id,
SKINNY_KEY_SET_CONNECTED, 0xffff);
......@@ -717,6 +720,7 @@ switch_status_t skinny_session_start_media(switch_core_session_t *session, liste
SKINNY_DISP_CONNECTED,
line_instance,
tech_pvt->call_id);
}
skinny_session_send_call_info(session, listener, line_instance);
return SWITCH_STATUS_SUCCESS;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论