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(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);
/** @} */
SWITCH_STANDARD_APP(blind_transfer_ack_function)
{
- switch_channel_t *channel = switch_core_session_get_channel(session);
switch_bool_t val = 0;
if (data) {
val = switch_true((char *) val);
}
- 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 = val;
- switch_core_session_receive_message(other_session, &msg);
- switch_core_session_rwunlock(other_session);
- }
- }
+ switch_ivr_blind_transfer_ack(session, val);
}
}
if (!extension) {
- 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);
+
+ 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_channel_hangup(session->channel, SWITCH_CAUSE_NO_ROUTE_DESTINATION);
+ }
}
end:
}
}
+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:
* Local Variables: