提交 9d300078 authored 作者: Nathan Neulinger's avatar Nathan Neulinger

FS-6231 add support for sending call waiting tone when a simultaneous call is received --resolve

上级 f2067001
...@@ -500,6 +500,38 @@ uint32_t skinny_line_get_state(listener_t *listener, uint32_t line_instance, uin ...@@ -500,6 +500,38 @@ uint32_t skinny_line_get_state(listener_t *listener, uint32_t line_instance, uin
return helper.call_state; return helper.call_state;
} }
struct skinny_line_count_active_helper {
uint32_t count;
};
int skinny_line_count_active_callback(void *pArg, int argc, char **argv, char **columnNames)
{
struct skinny_line_count_active_helper *helper = pArg;
helper->count++;
return 0;
}
uint32_t skinny_line_count_active(listener_t *listener)
{
char *sql;
struct skinny_line_count_active_helper helper = {0};
switch_assert(listener);
helper.count = 0;
if ((sql = switch_mprintf(
"SELECT call_state FROM skinny_active_lines "
"WHERE device_name='%s' AND device_instance=%d "
"AND call_state != 2",
listener->device_name, listener->device_instance
))) {
skinny_execute_sql_callback(listener->profile, listener->profile->sql_mutex, sql, skinny_line_count_active_callback, &helper);
switch_safe_free(sql);
}
return helper.count;
}
switch_status_t skinny_tech_set_codec(private_t *tech_pvt, int force) switch_status_t skinny_tech_set_codec(private_t *tech_pvt, int force)
{ {
......
...@@ -304,6 +304,7 @@ void skinny_line_perform_set_state(const char *file, const char *func, int line, ...@@ -304,6 +304,7 @@ void skinny_line_perform_set_state(const char *file, const char *func, int line,
#define skinny_line_set_state(listener, line_instance, call_id, call_state) skinny_line_perform_set_state(__FILE__, __SWITCH_FUNC__, __LINE__, listener, line_instance, call_id, call_state) #define skinny_line_set_state(listener, line_instance, call_id, call_state) skinny_line_perform_set_state(__FILE__, __SWITCH_FUNC__, __LINE__, listener, line_instance, call_id, call_state)
uint32_t skinny_line_get_state(listener_t *listener, uint32_t line_instance, uint32_t call_id); uint32_t skinny_line_get_state(listener_t *listener, uint32_t line_instance, uint32_t call_id);
uint32_t skinny_line_count_active(listener_t *listener);
switch_status_t skinny_tech_set_codec(private_t *tech_pvt, int force); switch_status_t skinny_tech_set_codec(private_t *tech_pvt, int force);
void tech_init(private_t *tech_pvt, skinny_profile_t *profile, switch_core_session_t *session); void tech_init(private_t *tech_pvt, skinny_profile_t *profile, switch_core_session_t *session);
......
...@@ -587,6 +587,7 @@ int skinny_ring_lines_callback(void *pArg, int argc, char **argv, char **columnN ...@@ -587,6 +587,7 @@ int skinny_ring_lines_callback(void *pArg, int argc, char **argv, char **columnN
/* uint32_t call_state = atoi(argv[16]); */ /* uint32_t call_state = atoi(argv[16]); */
listener_t *listener = NULL; listener_t *listener = NULL;
uint32_t active_calls = 0;
skinny_profile_find_listener_by_device_name_and_instance(helper->tech_pvt->profile, skinny_profile_find_listener_by_device_name_and_instance(helper->tech_pvt->profile,
device_name, device_instance, &listener); device_name, device_instance, &listener);
...@@ -596,9 +597,12 @@ int skinny_ring_lines_callback(void *pArg, int argc, char **argv, char **columnN ...@@ -596,9 +597,12 @@ int skinny_ring_lines_callback(void *pArg, int argc, char **argv, char **columnN
helper->lines_count++; helper->lines_count++;
switch_channel_set_variable(channel, "effective_callee_id_number", value); switch_channel_set_variable(channel, "effective_callee_id_number", value);
switch_channel_set_variable(channel, "effective_callee_id_name", caller_name); switch_channel_set_variable(channel, "effective_callee_id_name", caller_name);
active_calls = skinny_line_count_active(listener);
skinny_log_l(listener, SWITCH_LOG_DEBUG, "Ring Lines Callback with Callee Number (%s), Caller Name (%s), Dest Number (%s)\n", skinny_log_l(listener, SWITCH_LOG_DEBUG,
value, caller_name, helper->tech_pvt->caller_profile->destination_number); "Ring Lines Callback with Callee Number (%s), Caller Name (%s), Dest Number (%s), Active Calls (%d)\n",
value, caller_name, helper->tech_pvt->caller_profile->destination_number, active_calls);
if (helper->remote_session) { if (helper->remote_session) {
switch_core_session_message_t msg = { 0 }; switch_core_session_message_t msg = { 0 };
...@@ -630,7 +634,13 @@ int skinny_ring_lines_callback(void *pArg, int argc, char **argv, char **columnN ...@@ -630,7 +634,13 @@ int skinny_ring_lines_callback(void *pArg, int argc, char **argv, char **columnN
} }
skinny_session_send_call_info(helper->tech_pvt->session, listener, line_instance); skinny_session_send_call_info(helper->tech_pvt->session, listener, line_instance);
send_set_lamp(listener, SKINNY_BUTTON_LINE, line_instance, SKINNY_LAMP_BLINK); send_set_lamp(listener, SKINNY_BUTTON_LINE, line_instance, SKINNY_LAMP_BLINK);
send_set_ringer(listener, SKINNY_RING_INSIDE, SKINNY_RING_FOREVER, 0, helper->tech_pvt->call_id);
if ( active_calls < 1 ) {
send_set_ringer(listener, SKINNY_RING_INSIDE, SKINNY_RING_FOREVER, 0, helper->tech_pvt->call_id);
} else {
send_start_tone(listener, SKINNY_TONE_CALLWAITTONE, 0, line_instance, helper->tech_pvt->call_id);
send_stop_tone(listener, line_instance, helper->tech_pvt->call_id);
}
switch_channel_ring_ready(channel); switch_channel_ring_ready(channel);
} }
return 0; return 0;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论