mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-02-09 09:17:34 +00:00
tweak to confirm blind transfer patch
This commit is contained in:
parent
d82a38dfd6
commit
f106c18f51
@ -970,6 +970,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_insert_file(switch_core_session_t *se
|
|||||||
SWITCH_DECLARE(switch_status_t) switch_ivr_create_message_reply(switch_event_t **reply, switch_event_t *message, const char *new_proto);
|
SWITCH_DECLARE(switch_status_t) switch_ivr_create_message_reply(switch_event_t **reply, switch_event_t *message, const char *new_proto);
|
||||||
SWITCH_DECLARE(char *) switch_ivr_check_presence_mapping(const char *exten_name, const char *domain_name);
|
SWITCH_DECLARE(char *) switch_ivr_check_presence_mapping(const char *exten_name, const char *domain_name);
|
||||||
SWITCH_DECLARE(switch_status_t) switch_ivr_kill_uuid(const char *uuid, switch_call_cause_t cause);
|
SWITCH_DECLARE(switch_status_t) switch_ivr_kill_uuid(const char *uuid, switch_call_cause_t cause);
|
||||||
|
SWITCH_DECLARE(switch_status_t) switch_ivr_blind_transfer_ack(switch_core_session_t *session, switch_bool_t success);
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
|
@ -4464,28 +4464,13 @@ static char *file_string_supported_formats[SWITCH_MAX_CODECS] = { 0 };
|
|||||||
|
|
||||||
SWITCH_STANDARD_APP(blind_transfer_ack_function)
|
SWITCH_STANDARD_APP(blind_transfer_ack_function)
|
||||||
{
|
{
|
||||||
switch_channel_t *channel = switch_core_session_get_channel(session);
|
|
||||||
switch_bool_t val = 0;
|
switch_bool_t val = 0;
|
||||||
|
|
||||||
if (data) {
|
if (data) {
|
||||||
val = switch_true((char *) val);
|
val = switch_true((char *) val);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (switch_channel_test_flag(channel, CF_CONFIRM_BLIND_TRANSFER)) {
|
switch_ivr_blind_transfer_ack(session, val);
|
||||||
switch_core_session_t *other_session;
|
|
||||||
const char *uuid = switch_channel_get_variable(channel, "blind_transfer_uuid");
|
|
||||||
|
|
||||||
switch_channel_clear_flag(channel, CF_CONFIRM_BLIND_TRANSFER);
|
|
||||||
|
|
||||||
if (!zstr(uuid) && (other_session = switch_core_session_locate(uuid))) {
|
|
||||||
switch_core_session_message_t msg = { 0 };
|
|
||||||
msg.message_id = SWITCH_MESSAGE_INDICATE_BLIND_TRANSFER_RESPONSE;
|
|
||||||
msg.from = __FILE__;
|
|
||||||
msg.numeric_arg = val;
|
|
||||||
switch_core_session_receive_message(other_session, &msg);
|
|
||||||
switch_core_session_rwunlock(other_session);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -174,9 +174,12 @@ static void switch_core_standard_on_routing(switch_core_session_t *session)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!extension) {
|
if (!extension) {
|
||||||
|
|
||||||
|
if (switch_ivr_blind_transfer_ack(session, SWITCH_FALSE) != SWITCH_STATUS_SUCCESS) {
|
||||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_INFO, "No Route, Aborting\n");
|
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_INFO, "No Route, Aborting\n");
|
||||||
switch_channel_hangup(session->channel, SWITCH_CAUSE_NO_ROUTE_DESTINATION);
|
switch_channel_hangup(session->channel, SWITCH_CAUSE_NO_ROUTE_DESTINATION);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
end:
|
end:
|
||||||
|
|
||||||
|
@ -3501,6 +3501,31 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_kill_uuid(const char *uuid, switch_ca
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SWITCH_DECLARE(switch_status_t) switch_ivr_blind_transfer_ack(switch_core_session_t *session, switch_bool_t success)
|
||||||
|
{
|
||||||
|
switch_channel_t *channel = switch_core_session_get_channel(session);
|
||||||
|
switch_status_t status = SWITCH_STATUS_FALSE;
|
||||||
|
|
||||||
|
if (switch_channel_test_flag(channel, CF_CONFIRM_BLIND_TRANSFER)) {
|
||||||
|
switch_core_session_t *other_session;
|
||||||
|
const char *uuid = switch_channel_get_variable(channel, "blind_transfer_uuid");
|
||||||
|
|
||||||
|
switch_channel_clear_flag(channel, CF_CONFIRM_BLIND_TRANSFER);
|
||||||
|
|
||||||
|
if (!zstr(uuid) && (other_session = switch_core_session_locate(uuid))) {
|
||||||
|
switch_core_session_message_t msg = { 0 };
|
||||||
|
msg.message_id = SWITCH_MESSAGE_INDICATE_BLIND_TRANSFER_RESPONSE;
|
||||||
|
msg.from = __FILE__;
|
||||||
|
msg.numeric_arg = success;
|
||||||
|
switch_core_session_receive_message(other_session, &msg);
|
||||||
|
switch_core_session_rwunlock(other_session);
|
||||||
|
status = SWITCH_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/* For Emacs:
|
/* For Emacs:
|
||||||
* Local Variables:
|
* Local Variables:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user