diff --git a/src/mod/endpoints/mod_skinny/mod_skinny.c b/src/mod/endpoints/mod_skinny/mod_skinny.c index 9cbdbb4d39..4e493b3a3b 100644 --- a/src/mod/endpoints/mod_skinny/mod_skinny.c +++ b/src/mod/endpoints/mod_skinny/mod_skinny.c @@ -1043,7 +1043,7 @@ switch_call_cause_t channel_outgoing_channel(switch_core_session_t *session, swi switch_safe_free(sql); } - cause = skinny_ring_lines(tech_pvt); + cause = skinny_ring_lines(tech_pvt, session); if(cause != SWITCH_CAUSE_SUCCESS) { goto error; diff --git a/src/mod/endpoints/mod_skinny/skinny_server.c b/src/mod/endpoints/mod_skinny/skinny_server.c index 572c77f579..73a4aab995 100644 --- a/src/mod/endpoints/mod_skinny/skinny_server.c +++ b/src/mod/endpoints/mod_skinny/skinny_server.c @@ -418,6 +418,7 @@ switch_status_t skinny_session_send_call_info_all(switch_core_session_t *session struct skinny_ring_lines_helper { private_t *tech_pvt; + switch_core_session_t *remote_session; uint32_t lines_count; }; @@ -450,21 +451,22 @@ int skinny_ring_lines_callback(void *pArg, int argc, char **argv, char **columnN device_name, device_instance, &listener); if(listener) { switch_channel_t *channel = switch_core_session_get_channel(helper->tech_pvt->session); - const char *remote_uuid; - switch_core_session_t *remote_session; helper->lines_count++; switch_channel_set_variable(channel, "effective_callee_id_number", value); switch_channel_set_variable(channel, "effective_callee_id_name", caller_name); - if ((remote_uuid = switch_channel_get_variable(channel, SWITCH_SIGNAL_BOND_VARIABLE)) && (remote_session = switch_core_session_locate(remote_uuid))) { + if (helper->remote_session) { switch_core_session_message_t *msg; - msg = switch_core_session_alloc(remote_session, sizeof(*msg)); + msg = switch_core_session_alloc(helper->remote_session, sizeof(*msg)); MESSAGE_STAMP_FFL(msg); msg->message_id = SWITCH_MESSAGE_INDICATE_DISPLAY; - msg->string_array_arg[0] = switch_core_session_strdup(remote_session, caller_name); - msg->string_array_arg[1] = switch_core_session_strdup(remote_session, value); + msg->string_array_arg[0] = switch_core_session_strdup(helper->remote_session, caller_name); + msg->string_array_arg[1] = switch_core_session_strdup(helper->remote_session, value); msg->from = __FILE__; - switch_core_session_queue_message(remote_session, msg); - switch_core_session_rwunlock(remote_session); + if (switch_core_session_queue_message(helper->remote_session, msg) != SWITCH_STATUS_SUCCESS) { + switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(helper->tech_pvt->session), SWITCH_LOG_WARNING, + "Unable to send SWITCH_MESSAGE_INDICATE_DISPLAY message to channel %s\n", + switch_core_session_get_uuid(helper->remote_session)); + } } skinny_line_set_state(listener, line_instance, helper->tech_pvt->call_id, SKINNY_RING_IN); @@ -484,7 +486,7 @@ int skinny_ring_lines_callback(void *pArg, int argc, char **argv, char **columnN return 0; } -switch_call_cause_t skinny_ring_lines(private_t *tech_pvt) +switch_call_cause_t skinny_ring_lines(private_t *tech_pvt, switch_core_session_t *remote_session) { switch_status_t status; struct skinny_ring_lines_helper helper = {0}; @@ -494,6 +496,7 @@ switch_call_cause_t skinny_ring_lines(private_t *tech_pvt) switch_assert(tech_pvt->session); helper.tech_pvt = tech_pvt; + helper.remote_session = remote_session; helper.lines_count = 0; status = skinny_session_walk_lines(tech_pvt->profile, diff --git a/src/mod/endpoints/mod_skinny/skinny_server.h b/src/mod/endpoints/mod_skinny/skinny_server.h index f8ddbb4d6b..f0218da5fe 100644 --- a/src/mod/endpoints/mod_skinny/skinny_server.h +++ b/src/mod/endpoints/mod_skinny/skinny_server.h @@ -40,7 +40,7 @@ skinny_action_t skinny_session_dest_match_pattern(switch_core_session_t *session switch_status_t skinny_session_process_dest(switch_core_session_t *session, listener_t *listener, uint32_t line_instance, char *dest, char append_dest, uint32_t backspace); switch_status_t skinny_session_send_call_info(switch_core_session_t *session, listener_t *listener, uint32_t line_instance); switch_status_t skinny_session_send_call_info_all(switch_core_session_t *session); -switch_call_cause_t skinny_ring_lines(private_t *tech_pvt); +switch_call_cause_t skinny_ring_lines(private_t *tech_pvt, switch_core_session_t *remote_session); switch_status_t skinny_session_ring_out(switch_core_session_t *session, listener_t *listener, uint32_t line_instance); switch_status_t skinny_session_answer(switch_core_session_t *session, listener_t *listener, uint32_t line_instance); switch_status_t skinny_session_start_media(switch_core_session_t *session, listener_t *listener, uint32_t line_instance);