switch_caller_profile_t *caller_profile_override;
switch_bool_t check_vars;
switch_memory_pool_t *pool;
+ originate_status_t originate_status[MAX_PEERS];// = { {0} };
} originate_global_t;
}
static int check_per_channel_timeouts(originate_global_t *oglobals,
- originate_status_t *originate_status, int max, time_t start, switch_call_cause_t *force_reason)
+ int max, time_t start, switch_call_cause_t *force_reason)
{
int x = 0, i, delayed_channels = 0, active_channels = 0;
uint32_t early_exit_time = 0, delayed_min = 0;
time_t elapsed = switch_epoch_time_now(NULL) - start;
for (i = 0; i < max; i++) {
- if (originate_status[i].peer_channel && switch_channel_get_state(originate_status[i].peer_channel) != CS_DESTROY &&
- switch_channel_get_state(originate_status[i].peer_channel) != CS_REPORTING) {
- if (originate_status[i].per_channel_delay_start) {
+ if (oglobals->originate_status[i].peer_channel && switch_channel_get_state(oglobals->originate_status[i].peer_channel) != CS_DESTROY &&
+ switch_channel_get_state(oglobals->originate_status[i].peer_channel) != CS_REPORTING) {
+ if (oglobals->originate_status[i].per_channel_delay_start) {
delayed_channels++;
} else {
active_channels++;
if (active_channels == 0 && delayed_channels) {
for (i = 0; i < max; i++) {
- if (originate_status[i].peer_channel && originate_status[i].per_channel_delay_start &&
- (!delayed_min || delayed_min > originate_status[i].per_channel_delay_start)) {
- delayed_min = originate_status[i].per_channel_delay_start;
+ if (oglobals->originate_status[i].peer_channel && oglobals->originate_status[i].per_channel_delay_start &&
+ (!delayed_min || delayed_min > oglobals->originate_status[i].per_channel_delay_start)) {
+ delayed_min = oglobals->originate_status[i].per_channel_delay_start;
}
}
early_exit_time = delayed_min - (uint32_t) elapsed;
}
for (i = 0; i < max; i++) {
- if (originate_status[i].peer_channel && originate_status[i].per_channel_delay_start &&
- (elapsed > originate_status[i].per_channel_delay_start || active_channels == 0)) {
+ if (oglobals->originate_status[i].peer_channel && oglobals->originate_status[i].per_channel_delay_start &&
+ (elapsed > oglobals->originate_status[i].per_channel_delay_start || active_channels == 0)) {
if (active_channels == 0) {
- if (originate_status[i].per_channel_timelimit_sec) {
- if (originate_status[i].per_channel_timelimit_sec > early_exit_time) {
+ if (oglobals->originate_status[i].per_channel_timelimit_sec) {
+ if (oglobals->originate_status[i].per_channel_timelimit_sec > early_exit_time) {
/* IN theory this check is not needed ( should just be if !0 then -= with no else), if its not 0 it should always be greater.... */
- originate_status[i].per_channel_timelimit_sec -= early_exit_time;
+ oglobals->originate_status[i].per_channel_timelimit_sec -= early_exit_time;
} else {
- originate_status[i].per_channel_timelimit_sec = 1;
+ oglobals->originate_status[i].per_channel_timelimit_sec = 1;
}
}
- if (originate_status[i].per_channel_progress_timelimit_sec) {
- if (originate_status[i].per_channel_progress_timelimit_sec > early_exit_time) {
+ if (oglobals->originate_status[i].per_channel_progress_timelimit_sec) {
+ if (oglobals->originate_status[i].per_channel_progress_timelimit_sec > early_exit_time) {
/* IN theory this check is not needed ( should just be if !0 then -= with no else), if its not 0 it should always be greater.... */
- originate_status[i].per_channel_progress_timelimit_sec -= early_exit_time;
+ oglobals->originate_status[i].per_channel_progress_timelimit_sec -= early_exit_time;
} else {
- originate_status[i].per_channel_progress_timelimit_sec = 1;
+ oglobals->originate_status[i].per_channel_progress_timelimit_sec = 1;
}
}
- originate_status[i].per_channel_delay_start -= delayed_min;
+ oglobals->originate_status[i].per_channel_delay_start -= delayed_min;
} else {
- originate_status[i].per_channel_delay_start = 0;
+ oglobals->originate_status[i].per_channel_delay_start = 0;
}
- if (!originate_status[i].per_channel_delay_start) {
- switch_channel_clear_flag(originate_status[i].peer_channel, CF_BLOCK_STATE);
+ if (!oglobals->originate_status[i].per_channel_delay_start) {
+ switch_channel_clear_flag(oglobals->originate_status[i].peer_channel, CF_BLOCK_STATE);
}
}
- if (originate_status[i].peer_channel && switch_channel_up_nosig(originate_status[i].peer_channel)) {
- if (originate_status[i].per_channel_progress_timelimit_sec && elapsed > originate_status[i].per_channel_progress_timelimit_sec &&
- !(switch_channel_test_flag(originate_status[i].peer_channel, CF_RING_READY) ||
- switch_channel_test_flag(originate_status[i].peer_channel, CF_ANSWERED) ||
- (!oglobals->monitor_early_media_ring && switch_channel_test_flag(originate_status[i].peer_channel, CF_EARLY_MEDIA))
+ if (oglobals->originate_status[i].peer_channel && switch_channel_up_nosig(oglobals->originate_status[i].peer_channel)) {
+ if (oglobals->originate_status[i].per_channel_progress_timelimit_sec && elapsed > oglobals->originate_status[i].per_channel_progress_timelimit_sec &&
+ !(switch_channel_test_flag(oglobals->originate_status[i].peer_channel, CF_RING_READY) ||
+ switch_channel_test_flag(oglobals->originate_status[i].peer_channel, CF_ANSWERED) ||
+ (!oglobals->monitor_early_media_ring && switch_channel_test_flag(oglobals->originate_status[i].peer_channel, CF_EARLY_MEDIA))
)
) {
- switch_channel_hangup(originate_status[i].peer_channel, SWITCH_CAUSE_PROGRESS_TIMEOUT);
+ switch_channel_hangup(oglobals->originate_status[i].peer_channel, SWITCH_CAUSE_PROGRESS_TIMEOUT);
*force_reason = SWITCH_CAUSE_PROGRESS_TIMEOUT;
x++;
}
- if (originate_status[i].per_channel_timelimit_sec && elapsed > originate_status[i].per_channel_timelimit_sec) {
- switch_channel_hangup(originate_status[i].peer_channel, SWITCH_CAUSE_ALLOTTED_TIMEOUT);
+ if (oglobals->originate_status[i].per_channel_timelimit_sec && elapsed > oglobals->originate_status[i].per_channel_timelimit_sec) {
+ switch_channel_hangup(oglobals->originate_status[i].peer_channel, SWITCH_CAUSE_ALLOTTED_TIMEOUT);
x++;
}
}
return x;
}
+
static switch_bool_t monitor_callback(switch_core_session_t *session, const char *app, const char *data)
{
if (app) {
}
}
-static uint8_t check_channel_status(originate_global_t *oglobals, originate_status_t *originate_status, uint32_t len, switch_call_cause_t *force_reason)
+static uint8_t check_channel_status(originate_global_t *oglobals, uint32_t len, switch_call_cause_t *force_reason)
{
uint32_t i;
for (i = 0; i < len; i++) {
- if (originate_status[i].peer_channel && switch_channel_test_flag(originate_status[i].peer_channel, CF_CHANNEL_SWAP)) {
- const char *key = switch_channel_get_variable(originate_status[i].peer_channel, "channel_swap_uuid");
+ if (oglobals->originate_status[i].peer_channel && switch_channel_test_flag(oglobals->originate_status[i].peer_channel, CF_CHANNEL_SWAP)) {
+ const char *key = switch_channel_get_variable(oglobals->originate_status[i].peer_channel, "channel_swap_uuid");
switch_core_session_t *swap_session, *old_session;
-
+
if ((swap_session = switch_core_session_locate(key))) {
- switch_channel_clear_flag(originate_status[i].peer_channel, CF_CHANNEL_SWAP);
- switch_channel_hangup(originate_status[i].peer_channel, SWITCH_CAUSE_PICKED_OFF);
+ switch_channel_clear_flag(oglobals->originate_status[i].peer_channel, CF_CHANNEL_SWAP);
+ switch_channel_hangup(oglobals->originate_status[i].peer_channel, SWITCH_CAUSE_PICKED_OFF);
- switch_log_printf(SWITCH_CHANNEL_CHANNEL_LOG(originate_status[i].peer_channel), SWITCH_LOG_DEBUG, "Swapping %s for %s\n",
- switch_core_session_get_name(swap_session), switch_channel_get_name(originate_status[i].peer_channel));
+ switch_log_printf(SWITCH_CHANNEL_CHANNEL_LOG(oglobals->originate_status[i].peer_channel), SWITCH_LOG_DEBUG, "Swapping %s for %s\n",
+ switch_core_session_get_name(swap_session), switch_channel_get_name(oglobals->originate_status[i].peer_channel));
- old_session = originate_status[i].peer_session;
- originate_status[i].peer_session = swap_session;
- originate_status[i].peer_channel = switch_core_session_get_channel(originate_status[i].peer_session);
- originate_status[i].caller_profile = switch_channel_get_caller_profile(originate_status[i].peer_channel);
- switch_channel_set_flag(originate_status[i].peer_channel, CF_ORIGINATING);
+ old_session = oglobals->originate_status[i].peer_session;
+ oglobals->originate_status[i].peer_session = swap_session;
+ oglobals->originate_status[i].peer_channel = switch_core_session_get_channel(oglobals->originate_status[i].peer_session);
+ oglobals->originate_status[i].caller_profile = switch_channel_get_caller_profile(oglobals->originate_status[i].peer_channel);
+ switch_channel_set_flag(oglobals->originate_status[i].peer_channel, CF_ORIGINATING);
- switch_channel_answer(originate_status[i].peer_channel);
+ switch_channel_answer(oglobals->originate_status[i].peer_channel);
- switch_channel_set_variable(originate_status[i].peer_channel, "picked_up_uuid", switch_core_session_get_uuid(old_session));
- switch_channel_execute_on(originate_status[i].peer_channel, "execute_on_pickup");
- switch_channel_api_on(originate_status[i].peer_channel, "api_on_pickup");
+ switch_channel_set_variable(oglobals->originate_status[i].peer_channel, "picked_up_uuid", switch_core_session_get_uuid(old_session));
+ switch_channel_execute_on(oglobals->originate_status[i].peer_channel, "execute_on_pickup");
+ switch_channel_api_on(oglobals->originate_status[i].peer_channel, "api_on_pickup");
switch_core_session_rwunlock(old_session);
break;
for (i = 0; i < len; i++) {
switch_channel_state_t state;
- if (originate_status[i].tagged && originate_status[i].peer_session) {
- switch_channel_t *channel = switch_core_session_get_channel(originate_status[i].peer_session);
+ if (oglobals->originate_status[i].tagged && oglobals->originate_status[i].peer_session) {
+ switch_channel_t *channel = switch_core_session_get_channel(oglobals->originate_status[i].peer_session);
uint32_t j;
if (switch_channel_down_nosig(channel)) {
switch_call_cause_t cause = switch_channel_get_cause(channel);
for (j = 0; j < len; j++) {
- channel = switch_core_session_get_channel(originate_status[j].peer_session);
+ channel = switch_core_session_get_channel(oglobals->originate_status[j].peer_session);
switch_channel_hangup(channel, cause);
}
oglobals->hups = len;
}
- if (originate_status[i].peer_channel && switch_channel_test_flag(originate_status[i].peer_channel, CF_PICKUP)) {
- if (originate_status[i].per_channel_timelimit_sec == 0) {
+ if (oglobals->originate_status[i].peer_channel && switch_channel_test_flag(oglobals->originate_status[i].peer_channel, CF_PICKUP)) {
+ if (oglobals->originate_status[i].per_channel_timelimit_sec == 0) {
pickups_without_timelimit++;
}
}
- if (!(originate_status[i].peer_channel && originate_status[i].peer_session)) {
+ if (!(oglobals->originate_status[i].peer_channel && oglobals->originate_status[i].peer_session)) {
oglobals->hups++;
continue;
}
- if ((ring_ready_val = (uint8_t)switch_channel_test_flag(originate_status[i].peer_channel, CF_RING_READY))) {
- if (!originate_status[i].ring_ready) {
- originate_status[i].ring_ready = ring_ready_val;
+ if ((ring_ready_val = (uint8_t)switch_channel_test_flag(oglobals->originate_status[i].peer_channel, CF_RING_READY))) {
+ if (!oglobals->originate_status[i].ring_ready) {
+ oglobals->originate_status[i].ring_ready = ring_ready_val;
}
if (oglobals->sending_ringback == 1) {
oglobals->ring_ready = ring_ready_val;
if (caller_channel && !oglobals->ignore_ring_ready) {
if (len == 1) {
- switch_channel_pass_callee_id(originate_status[0].peer_channel, caller_channel);
+ switch_channel_pass_callee_id(oglobals->originate_status[0].peer_channel, caller_channel);
}
switch_channel_ring_ready_value(caller_channel, ring_ready_val);
oglobals->sent_ring = ring_ready_val;
}
}
- if (switch_channel_test_flag(originate_status[i].peer_channel, CF_EARLY_MEDIA)) {
+ if (switch_channel_test_flag(oglobals->originate_status[i].peer_channel, CF_EARLY_MEDIA)) {
if (oglobals->ignore_early_media == 3 && oglobals->bridge_early_media == -1) {
oglobals->bridge_early_media = i;
send_ringback++;
pindex = (uint32_t) i;
} else if (!oglobals->sent_ring && oglobals->ignore_early_media == 2 && len == 1 && caller_channel && !oglobals->ignore_ring_ready) {
- switch_channel_pass_callee_id(originate_status[0].peer_channel, caller_channel);
+ switch_channel_pass_callee_id(oglobals->originate_status[0].peer_channel, caller_channel);
switch_channel_ring_ready(caller_channel);
oglobals->sent_ring = 1;
}
- if (!originate_status[i].early_media) {
- originate_status[i].early_media = 1;
+ if (!oglobals->originate_status[i].early_media) {
+ oglobals->originate_status[i].early_media = 1;
if (oglobals->early_ok) {
pindex = i;
}
if (oglobals->monitor_early_media_fail) {
- const char *var = switch_channel_get_variable(originate_status[i].peer_channel, "monitor_early_media_fail");
+ const char *var = switch_channel_get_variable(oglobals->originate_status[i].peer_channel, "monitor_early_media_fail");
if (!zstr(var)) {
char *fail_array[128] = { 0 };
int fail_count = 0;
char *p, *q;
if (!(p = strchr(cause, ':'))) {
- switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(originate_status[i].peer_session), SWITCH_LOG_ERROR, "Parse Error\n");
+ switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(oglobals->originate_status[i].peer_session), SWITCH_LOG_ERROR, "Parse Error\n");
continue;
}
*p++ = '\0';
if (!p) {
- switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(originate_status[i].peer_session), SWITCH_LOG_ERROR, "Parse Error\n");
+ switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(oglobals->originate_status[i].peer_session), SWITCH_LOG_ERROR, "Parse Error\n");
continue;
}
if (!(p = strchr(p, ':'))) {
- switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(originate_status[i].peer_session), SWITCH_LOG_ERROR, "Parse Error\n");
+ switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(oglobals->originate_status[i].peer_session), SWITCH_LOG_ERROR, "Parse Error\n");
continue;
}
*p++ = '\0';
if (!p) {
- switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(originate_status[i].peer_session), SWITCH_LOG_ERROR, "Parse Error\n");
+ switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(oglobals->originate_status[i].peer_session), SWITCH_LOG_ERROR, "Parse Error\n");
continue;
}
}
}
switch_snprintf(bug_key, sizeof(bug_key), "monitor_early_media_fail_%d", ++y);
- switch_ivr_tone_detect_session(originate_status[i].peer_session, bug_key, p, "r", 0, hits, "fail", cause, monitor_callback);
+ switch_ivr_tone_detect_session(oglobals->originate_status[i].peer_session, bug_key, p, "r", 0, hits, "fail", cause, monitor_callback);
}
}
if (oglobals->monitor_early_media_ring) {
- const char *var = switch_channel_get_variable(originate_status[i].peer_channel, "monitor_early_media_ring");
- const char *var_total = switch_channel_get_variable(originate_status[i].peer_channel, "monitor_early_media_ring_total");
+ const char *var = switch_channel_get_variable(oglobals->originate_status[i].peer_channel, "monitor_early_media_ring");
+ const char *var_total = switch_channel_get_variable(oglobals->originate_status[i].peer_channel, "monitor_early_media_ring_total");
if (!zstr(var)) {
char *ring_array[128] = { 0 };
int ring_count = 0;
char *p = ring_array[fx], *q;
if (!p) {
- switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(originate_status[i].peer_session), SWITCH_LOG_ERROR, "Parse Error\n");
+ switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(oglobals->originate_status[i].peer_session), SWITCH_LOG_ERROR, "Parse Error\n");
continue;
}
}
if (!(p = strchr(p, ':'))) {
- switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(originate_status[i].peer_session), SWITCH_LOG_ERROR, "Parse Error\n");
+ switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(oglobals->originate_status[i].peer_session), SWITCH_LOG_ERROR, "Parse Error\n");
continue;
}
*p++ = '\0';
if (!p) {
- switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(originate_status[i].peer_session), SWITCH_LOG_ERROR, "Parse Error\n");
+ switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(oglobals->originate_status[i].peer_session), SWITCH_LOG_ERROR, "Parse Error\n");
continue;
}
}
}
- switch_channel_set_private(originate_status[i].peer_channel, "_oglobals_", oglobals);
+ switch_channel_set_private(oglobals->originate_status[i].peer_channel, "_oglobals_", oglobals);
switch_snprintf(bug_key, sizeof(bug_key), "monitor_early_media_ring_%d", ++y);
- switch_ivr_tone_detect_session(originate_status[i].peer_session, bug_key, p, "r", 0, hits, "ring", NULL, monitor_callback);
+ switch_ivr_tone_detect_session(oglobals->originate_status[i].peer_session, bug_key, p, "r", 0, hits, "ring", NULL, monitor_callback);
}
if (var_total) {
int tmp = atoi(var_total);
if (tmp > 0 && tmp < 100) {
- switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(originate_status[i].peer_session), SWITCH_LOG_DEBUG,
- "%s setting ring total to %d\n", switch_channel_get_name(originate_status[i].peer_channel), tmp);
+ switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(oglobals->originate_status[i].peer_session), SWITCH_LOG_DEBUG,
+ "%s setting ring total to %d\n", switch_channel_get_name(oglobals->originate_status[i].peer_channel), tmp);
oglobals->monitor_early_media_ring_total = tmp;
}
}
}
}
- if (!switch_channel_test_flag(originate_status[i].peer_channel, CF_PARK) &&
- !switch_channel_test_flag(originate_status[i].peer_channel, CF_CONSUME_ON_ORIGINATE)) {
- if (switch_core_session_messages_waiting(originate_status[i].peer_session)) {
- if (switch_channel_test_flag(originate_status[i].peer_channel, CF_THREAD_SLEEPING)) {
- switch_core_session_wake_session_thread(originate_status[i].peer_session);
+ if (!switch_channel_test_flag(oglobals->originate_status[i].peer_channel, CF_PARK) &&
+ !switch_channel_test_flag(oglobals->originate_status[i].peer_channel, CF_CONSUME_ON_ORIGINATE)) {
+ if (switch_core_session_messages_waiting(oglobals->originate_status[i].peer_session)) {
+ if (switch_channel_test_flag(oglobals->originate_status[i].peer_channel, CF_THREAD_SLEEPING)) {
+ switch_core_session_wake_session_thread(oglobals->originate_status[i].peer_session);
} else {
- switch_ivr_parse_all_events(originate_status[i].peer_session);
+ switch_ivr_parse_all_events(oglobals->originate_status[i].peer_session);
}
}
}
- if (switch_channel_test_flag(originate_status[i].peer_channel, CF_EARLY_OK)) {
+ if (switch_channel_test_flag(oglobals->originate_status[i].peer_channel, CF_EARLY_OK)) {
if (!oglobals->early_ok) {
oglobals->early_ok = 1;
}
- switch_channel_clear_flag(originate_status[i].peer_channel, CF_EARLY_OK);
+ switch_channel_clear_flag(oglobals->originate_status[i].peer_channel, CF_EARLY_OK);
}
if (caller_channel && switch_channel_test_flag(caller_channel, CF_EARLY_OK)) {
switch_channel_clear_flag(caller_channel, CF_EARLY_OK);
}
- state = switch_channel_get_state(originate_status[i].peer_channel);
- if (state >= CS_HANGUP || state == CS_RESET || switch_channel_test_flag(originate_status[i].peer_channel, CF_TRANSFER) ||
- switch_channel_test_flag(originate_status[i].peer_channel, CF_REDIRECT) ||
- switch_channel_test_flag(originate_status[i].peer_channel, CF_BRIDGED) ||
- !switch_channel_test_flag(originate_status[i].peer_channel, CF_ORIGINATING)
+ state = switch_channel_get_state(oglobals->originate_status[i].peer_channel);
+ if (state >= CS_HANGUP || state == CS_RESET || switch_channel_test_flag(oglobals->originate_status[i].peer_channel, CF_TRANSFER) ||
+ switch_channel_test_flag(oglobals->originate_status[i].peer_channel, CF_REDIRECT) ||
+ switch_channel_test_flag(oglobals->originate_status[i].peer_channel, CF_BRIDGED) ||
+ !switch_channel_test_flag(oglobals->originate_status[i].peer_channel, CF_ORIGINATING)
) {
(oglobals->hups)++;
- if (switch_channel_test_flag(originate_status[i].peer_channel, CF_PICKUP)) {
- if (originate_status[i].per_channel_timelimit_sec == 0) {
+ if (switch_channel_test_flag(oglobals->originate_status[i].peer_channel, CF_PICKUP)) {
+ if (oglobals->originate_status[i].per_channel_timelimit_sec == 0) {
pickups_without_timelimit--;
}
}
- } else if ((switch_channel_test_flag(originate_status[i].peer_channel, CF_ANSWERED) ||
- (oglobals->early_ok && switch_channel_test_flag(originate_status[i].peer_channel, CF_EARLY_MEDIA)) ||
+ } else if ((switch_channel_test_flag(oglobals->originate_status[i].peer_channel, CF_ANSWERED) ||
+ (oglobals->early_ok && switch_channel_test_flag(oglobals->originate_status[i].peer_channel, CF_EARLY_MEDIA)) ||
(oglobals->ring_ready && oglobals->return_ring_ready && len == 1 &&
- switch_channel_test_flag(originate_status[i].peer_channel, CF_RING_READY))
+ switch_channel_test_flag(oglobals->originate_status[i].peer_channel, CF_RING_READY))
)
- && !switch_channel_test_flag(originate_status[i].peer_channel, CF_TAGGED)
+ && !switch_channel_test_flag(oglobals->originate_status[i].peer_channel, CF_TAGGED)
) {
if (!zstr(oglobals->key)) {
if (oglobals->cancel_timeout == SWITCH_TRUE) {
/* cancel timeout for this leg only */
- originate_status[i].per_channel_progress_timelimit_sec = 0;
- originate_status[i].per_channel_timelimit_sec = 0;
+ oglobals->originate_status[i].per_channel_progress_timelimit_sec = 0;
+ oglobals->originate_status[i].per_channel_timelimit_sec = 0;
}
- if ((collect = switch_core_session_alloc(originate_status[i].peer_session, sizeof(*collect)))) {
- switch_channel_set_flag(originate_status[i].peer_channel, CF_TAGGED);
+ if ((collect = switch_core_session_alloc(oglobals->originate_status[i].peer_session, sizeof(*collect)))) {
+ switch_channel_set_flag(oglobals->originate_status[i].peer_channel, CF_TAGGED);
if (!zstr(oglobals->key)) {
- collect->key = switch_core_session_strdup(originate_status[i].peer_session, oglobals->key);
+ collect->key = switch_core_session_strdup(oglobals->originate_status[i].peer_session, oglobals->key);
}
if (!zstr(oglobals->file)) {
- collect->file = switch_core_session_strdup(originate_status[i].peer_session, oglobals->file);
+ collect->file = switch_core_session_strdup(oglobals->originate_status[i].peer_session, oglobals->file);
}
if (!zstr(oglobals->error_file)) {
- collect->error_file = switch_core_session_strdup(originate_status[i].peer_session, oglobals->error_file);
+ collect->error_file = switch_core_session_strdup(oglobals->originate_status[i].peer_session, oglobals->error_file);
}
if (oglobals->confirm_timeout) {
collect->confirm_timeout = 5000;
}
- switch_channel_audio_sync(originate_status[i].peer_channel);
- collect->session = originate_status[i].peer_session;
+ switch_channel_audio_sync(oglobals->originate_status[i].peer_channel);
+ collect->session = oglobals->originate_status[i].peer_session;
launch_collect_thread(collect);
}
} else {
goto end;
}
- } else if (switch_channel_test_flag(originate_status[i].peer_channel, CF_WINNER)) {
+ } else if (switch_channel_test_flag(oglobals->originate_status[i].peer_channel, CF_WINNER)) {
oglobals->idx = i;
rval = 0;
pindex = (uint32_t) i;
if (rval == 0 && pickups_without_timelimit) {
for (i = 0; i < len; i++) {
- if (originate_status[i].peer_channel && switch_channel_test_flag(originate_status[i].peer_channel, CF_PICKUP) &&
- switch_channel_up(originate_status[i].peer_channel)) {
- switch_channel_hangup(originate_status[i].peer_channel, SWITCH_CAUSE_NO_PICKUP);
+ if (oglobals->originate_status[i].peer_channel && switch_channel_test_flag(oglobals->originate_status[i].peer_channel, CF_PICKUP) &&
+ switch_channel_up(oglobals->originate_status[i].peer_channel)) {
+ switch_channel_hangup(oglobals->originate_status[i].peer_channel, SWITCH_CAUSE_NO_PICKUP);
}
}
}
if (pindex > -1 && caller_channel && switch_channel_ready(caller_channel) && !switch_channel_media_ready(caller_channel) &&
- switch_channel_media_ready(originate_status[pindex].peer_channel)) {
- inherit_codec(caller_channel, originate_status[pindex].peer_session);
+ switch_channel_media_ready(oglobals->originate_status[pindex].peer_channel)) {
+ inherit_codec(caller_channel, oglobals->originate_status[pindex].peer_session);
}
if (send_ringback) {
struct early_state {
originate_global_t *oglobals;
- originate_status_t *originate_status;
switch_mutex_t *mutex;
switch_buffer_t *buffer;
int ready;
static void *SWITCH_THREAD_FUNC early_thread_run(switch_thread_t *thread, void *obj)
{
early_state_t *state = (early_state_t *) obj;
- originate_status_t originate_status[MAX_PEERS] = { {0} };
+ //originate_status_t originate_status[MAX_PEERS] = { {0} };
int16_t mux_data[SWITCH_RECOMMENDED_BUFFER_SIZE / 2] = { 0 };
int32_t sample;
switch_codec_t read_codecs[MAX_PEERS] = { {0} };
switch_frame_t *read_frame = NULL;
switch_codec_implementation_t read_impl = { 0 };
+#if 0
for (i = 0; i < MAX_PEERS && i < state->ttl; i++) {
switch_core_session_t *session = state->originate_status[i].peer_session;
switch_channel_t *channel = NULL;
originate_status[i].peer_channel = channel;
}
}
-
+#endif
+
if (state->oglobals->session) {
switch_core_session_get_read_impl(state->oglobals->session, &read_impl);
}
answered = 0;
for (i = 0; i < MAX_PEERS && i < state->ttl; i++) {
- switch_core_session_t *session = originate_status[i].peer_session;
- switch_channel_t *channel = originate_status[i].peer_channel;
+ switch_core_session_t *session = state->oglobals->originate_status[i].peer_session;
+ switch_channel_t *channel = state->oglobals->originate_status[i].peer_channel;
if (!session || !channel || !switch_channel_up(channel)) {
continue;
for (i = 0; i < MAX_PEERS && i < state->ttl; i++) {
- switch_core_session_t *session = originate_status[i].peer_session;
- switch_channel_t *channel = originate_status[i].peer_channel;
+ switch_core_session_t *session = state->oglobals->originate_status[i].peer_session;
+ switch_channel_t *channel = state->oglobals->originate_status[i].peer_channel;
if (!session) continue;
switch_call_cause_t *cancel_cause,
switch_dial_handle_t *dh)
{
- originate_status_t originate_status[MAX_PEERS] = { {0} };
+ //originate_status_t originate_status[MAX_PEERS] = { {0} };
switch_originate_flag_t dftflags = SOF_NONE, myflags;
char *pipe_names[MAX_PEERS] = { 0 };
char *data = NULL;
reason = SWITCH_CAUSE_NONE;
memset(peer_names, 0, sizeof(peer_names));
peer_session = NULL;
- memset(originate_status, 0, sizeof(originate_status));
+ memset(oglobals.originate_status, 0, sizeof(oglobals.originate_status));
new_profile = NULL;
new_session = NULL;
chan_type = NULL;
new_profile->callee_id_name = switch_core_strdup(new_profile->pool, "Outbound Call");
new_profile->callee_id_number = switch_sanitize_number(switch_core_strdup(new_profile->pool, new_profile->destination_number));
- originate_status[i].caller_profile = NULL;
- originate_status[i].peer_channel = NULL;
- originate_status[i].peer_session = NULL;
+ oglobals.originate_status[i].caller_profile = NULL;
+ oglobals.originate_status[i].peer_channel = NULL;
+ oglobals.originate_status[i].peer_session = NULL;
new_session = NULL;
goto done;
}
- originate_status[i].peer_channel = switch_core_session_get_channel(new_session);
- originate_status[i].caller_profile = switch_channel_get_caller_profile(originate_status[i].peer_channel);
- originate_status[i].peer_session = new_session;
+ oglobals.originate_status[i].peer_channel = switch_core_session_get_channel(new_session);
+ oglobals.originate_status[i].caller_profile = switch_channel_get_caller_profile(oglobals.originate_status[i].peer_channel);
+ oglobals.originate_status[i].peer_session = new_session;
- switch_channel_set_flag(originate_status[i].peer_channel, CF_ORIGINATING);
+ switch_channel_set_flag(oglobals.originate_status[i].peer_channel, CF_ORIGINATING);
if (caller_channel) {
- switch_channel_set_variable(originate_status[i].peer_channel, "call_uuid", switch_channel_get_variable(caller_channel, "call_uuid"));
+ switch_channel_set_variable(oglobals.originate_status[i].peer_channel, "call_uuid", switch_channel_get_variable(caller_channel, "call_uuid"));
}
if (local_var_event) {
const char *device_id = switch_event_get_header(local_var_event, "device_id");
- switch_channel_set_profile_var(originate_status[i].peer_channel, "device_id", device_id);
+ switch_channel_set_profile_var(oglobals.originate_status[i].peer_channel, "device_id", device_id);
}
if ((lc = switch_event_get_header(var_event, "local_var_clobber"))) {
local_clobber = switch_true(lc);
}
- if (switch_channel_test_flag(originate_status[i].peer_channel, CF_NO_PRESENCE)) {
+ if (switch_channel_test_flag(oglobals.originate_status[i].peer_channel, CF_NO_PRESENCE)) {
if (var_event) {
switch_event_del_header(var_event, "presence_id");
}
switch_event_header_t *header;
/* install the vars from the {} params */
for (header = var_event->headers; header; header = header->next) {
- switch_channel_set_variable_var_check(originate_status[i].peer_channel, header->name, header->value, oglobals.check_vars);
+ switch_channel_set_variable_var_check(oglobals.originate_status[i].peer_channel, header->name, header->value, oglobals.check_vars);
}
}
}
if (local_var_event) {
switch_event_header_t *header;
for (header = local_var_event->headers; header; header = header->next) {
- switch_channel_set_variable_var_check(originate_status[i].peer_channel, header->name, header->value, oglobals.check_vars);
+ switch_channel_set_variable_var_check(oglobals.originate_status[i].peer_channel, header->name, header->value, oglobals.check_vars);
}
switch_event_destroy(&local_var_event);
}
switch_event_header_t *header;
/* install the vars from the {} params */
for (header = var_event->headers; header; header = header->next) {
- switch_channel_set_variable_var_check(originate_status[i].peer_channel, header->name, header->value, oglobals.check_vars);
+ switch_channel_set_variable_var_check(oglobals.originate_status[i].peer_channel, header->name, header->value, oglobals.check_vars);
}
}
}
- if (originate_status[i].peer_channel) {
+ if (oglobals.originate_status[i].peer_channel) {
const char *vvar;
- if (switch_true(switch_channel_get_variable(originate_status[i].peer_channel, "leg_required"))) {
- originate_status[i].tagged = 1;
+ if (switch_true(switch_channel_get_variable(oglobals.originate_status[i].peer_channel, "leg_required"))) {
+ oglobals.originate_status[i].tagged = 1;
}
- if ((vvar = switch_channel_get_variable(originate_status[i].peer_channel, "origination_channel_name"))) {
- switch_channel_set_name(originate_status[i].peer_channel, vvar);
+ if ((vvar = switch_channel_get_variable(oglobals.originate_status[i].peer_channel, "origination_channel_name"))) {
+ switch_channel_set_name(oglobals.originate_status[i].peer_channel, vvar);
}
- if ((vvar = switch_channel_get_variable(originate_status[i].peer_channel, "origination_callee_id_name"))) {
- switch_channel_set_profile_var(originate_status[i].peer_channel, "callee_id_name", vvar);
+ if ((vvar = switch_channel_get_variable(oglobals.originate_status[i].peer_channel, "origination_callee_id_name"))) {
+ switch_channel_set_profile_var(oglobals.originate_status[i].peer_channel, "callee_id_name", vvar);
}
- if ((vvar = switch_channel_get_variable(originate_status[i].peer_channel, "origination_callee_id_number"))) {
- switch_channel_set_profile_var(originate_status[i].peer_channel, "callee_id_number", vvar);
+ if ((vvar = switch_channel_get_variable(oglobals.originate_status[i].peer_channel, "origination_callee_id_number"))) {
+ switch_channel_set_profile_var(oglobals.originate_status[i].peer_channel, "callee_id_number", vvar);
}
- if ((vvar = switch_channel_get_variable(originate_status[i].peer_channel, "leg_timeout"))) {
+ if ((vvar = switch_channel_get_variable(oglobals.originate_status[i].peer_channel, "leg_timeout"))) {
int val = atoi(vvar);
if (val > 0) {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "%s Setting leg timeout to %d\n",
- switch_channel_get_name(originate_status[i].peer_channel), val);
- originate_status[i].per_channel_timelimit_sec = (uint32_t) val;
+ switch_channel_get_name(oglobals.originate_status[i].peer_channel), val);
+ oglobals.originate_status[i].per_channel_timelimit_sec = (uint32_t) val;
}
}
- if ((vvar = switch_channel_get_variable(originate_status[i].peer_channel, "leg_progress_timeout"))) {
+ if ((vvar = switch_channel_get_variable(oglobals.originate_status[i].peer_channel, "leg_progress_timeout"))) {
int val = atoi(vvar);
if (val > 0) {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "%s Setting leg progress timeout to %d\n",
- switch_channel_get_name(originate_status[i].peer_channel), val);
- originate_status[i].per_channel_progress_timelimit_sec = (uint32_t) val;
+ switch_channel_get_name(oglobals.originate_status[i].peer_channel), val);
+ oglobals.originate_status[i].per_channel_progress_timelimit_sec = (uint32_t) val;
}
}
- if ((vvar = switch_channel_get_variable(originate_status[i].peer_channel, "leg_delay_start"))) {
+ if ((vvar = switch_channel_get_variable(oglobals.originate_status[i].peer_channel, "leg_delay_start"))) {
int val = atoi(vvar);
if (val > 0) {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "%s Setting leg delay start to %d\n",
- switch_channel_get_name(originate_status[i].peer_channel), val);
- originate_status[i].per_channel_delay_start = (uint32_t) val;
+ switch_channel_get_name(oglobals.originate_status[i].peer_channel), val);
+ oglobals.originate_status[i].per_channel_delay_start = (uint32_t) val;
- if (originate_status[i].per_channel_progress_timelimit_sec != 0) {
- originate_status[i].per_channel_progress_timelimit_sec += originate_status[i].per_channel_delay_start;
+ if (oglobals.originate_status[i].per_channel_progress_timelimit_sec != 0) {
+ oglobals.originate_status[i].per_channel_progress_timelimit_sec += oglobals.originate_status[i].per_channel_delay_start;
}
- if (originate_status[i].per_channel_timelimit_sec != 0) {
- originate_status[i].per_channel_timelimit_sec += originate_status[i].per_channel_delay_start;
+ if (oglobals.originate_status[i].per_channel_timelimit_sec != 0) {
+ oglobals.originate_status[i].per_channel_timelimit_sec += oglobals.originate_status[i].per_channel_delay_start;
}
}
}
switch_channel_t *channel = switch_core_session_get_channel(a_session);
char *val =
switch_core_session_sprintf(a_session, "%s;%s;%s",
- switch_core_session_get_uuid(originate_status[i].peer_session),
- switch_str_nil(switch_channel_get_variable(originate_status[i].peer_channel, "callee_id_name")),
- switch_str_nil(switch_channel_get_variable(originate_status[i].peer_channel, "callee_id_number")));
+ switch_core_session_get_uuid(oglobals.originate_status[i].peer_session),
+ switch_str_nil(switch_channel_get_variable(oglobals.originate_status[i].peer_channel, "callee_id_name")),
+ switch_str_nil(switch_channel_get_variable(oglobals.originate_status[i].peer_channel, "callee_id_number")));
- switch_channel_set_variable(originate_status[i].peer_channel, "originating_leg_uuid", switch_core_session_get_uuid(a_session));
+ switch_channel_set_variable(oglobals.originate_status[i].peer_channel, "originating_leg_uuid", switch_core_session_get_uuid(a_session));
switch_channel_add_variable_var_check(channel, "originated_legs", val, SWITCH_FALSE, SWITCH_STACK_PUSH);
l_session = NULL;
}
- switch_channel_execute_on(originate_status[i].peer_channel, SWITCH_CHANNEL_EXECUTE_ON_ORIGINATE_VARIABLE);
- switch_channel_api_on(originate_status[i].peer_channel, SWITCH_CHANNEL_API_ON_ORIGINATE_VARIABLE);
+ switch_channel_execute_on(oglobals.originate_status[i].peer_channel, SWITCH_CHANNEL_EXECUTE_ON_ORIGINATE_VARIABLE);
+ switch_channel_api_on(oglobals.originate_status[i].peer_channel, SWITCH_CHANNEL_API_ON_ORIGINATE_VARIABLE);
}
if (table) {
- switch_channel_add_state_handler(originate_status[i].peer_channel, table);
+ switch_channel_add_state_handler(oglobals.originate_status[i].peer_channel, table);
}
if (oglobals.monitor_early_media_ring || oglobals.monitor_early_media_fail || oglobals.ignore_early_media == 4) {
- switch_channel_set_flag(originate_status[i].peer_channel, CF_CONSUME_ON_ORIGINATE);
+ switch_channel_set_flag(oglobals.originate_status[i].peer_channel, CF_CONSUME_ON_ORIGINATE);
}
- switch_channel_add_state_handler(originate_status[i].peer_channel, &originate_state_handlers);
+ switch_channel_add_state_handler(oglobals.originate_status[i].peer_channel, &originate_state_handlers);
- if ((flags & SOF_NOBLOCK) && originate_status[i].peer_session) {
+ if ((flags & SOF_NOBLOCK) && oglobals.originate_status[i].peer_session) {
status = SWITCH_STATUS_SUCCESS;
- *bleg = originate_status[i].peer_session;
+ *bleg = oglobals.originate_status[i].peer_session;
*cause = SWITCH_CAUSE_SUCCESS;
goto outer_for;
}
- if (!switch_core_session_running(originate_status[i].peer_session)) {
- if (originate_status[i].per_channel_delay_start) {
- switch_channel_set_flag(originate_status[i].peer_channel, CF_BLOCK_STATE);
+ if (!switch_core_session_running(oglobals.originate_status[i].peer_session)) {
+ if (oglobals.originate_status[i].per_channel_delay_start) {
+ switch_channel_set_flag(oglobals.originate_status[i].peer_channel, CF_BLOCK_STATE);
}
- switch_core_session_thread_launch(originate_status[i].peer_session);
+ switch_core_session_thread_launch(oglobals.originate_status[i].peer_session);
}
}
int state;
time_t elapsed;
- if (!originate_status[i].peer_channel) {
+ if (!oglobals.originate_status[i].peer_channel) {
continue;
}
- state = switch_channel_get_state(originate_status[i].peer_channel);
+ state = switch_channel_get_state(oglobals.originate_status[i].peer_channel);
if (state < CS_HANGUP) {
valid_channels++;
switch_cond_next();
}
- check_per_channel_timeouts(&oglobals, originate_status, and_argc, start, &force_reason);
+ check_per_channel_timeouts(&oglobals, and_argc, start, &force_reason);
if (valid_channels == 0) {
}
while ((!caller_channel || switch_channel_ready(caller_channel) || switch_channel_test_flag(caller_channel, CF_XFER_ZOMBIE)) &&
- check_channel_status(&oglobals, originate_status, and_argc, &force_reason)) {
+ check_channel_status(&oglobals, and_argc, &force_reason)) {
time_t elapsed = switch_epoch_time_now(NULL) - start;
read_packet = 0;
goto notready;
}
- check_per_channel_timeouts(&oglobals, originate_status, and_argc, start, &force_reason);
+ check_per_channel_timeouts(&oglobals, and_argc, start, &force_reason);
if (oglobals.session) {
switch_ivr_parse_all_events(oglobals.session);
switch_channel_t *pchannel;
const char *cause_str;
- if (!originate_status[i].peer_session) {
+ if (!oglobals.originate_status[i].peer_session) {
continue;
}
- pchannel = switch_core_session_get_channel(originate_status[i].peer_session);
+ pchannel = switch_core_session_get_channel(oglobals.originate_status[i].peer_session);
if (switch_channel_down_nosig(pchannel)) {
int neg, pos;
if (oglobals.ringback_ok == 1) {
switch_status_t rst;
- rst = setup_ringback(&oglobals, originate_status, and_argc, ringback_data, &ringback, &write_frame, &write_codec);
+ rst = setup_ringback(&oglobals, oglobals.originate_status, and_argc, ringback_data, &ringback, &write_frame, &write_codec);
if (oglobals.bridge_early_media > -1) {
switch_threadattr_t *thd_attr = NULL;
switch_threadattr_create(&thd_attr, switch_core_session_get_pool(session));
switch_threadattr_stacksize_set(thd_attr, SWITCH_THREAD_STACKSIZE);
early_state.oglobals = &oglobals;
- early_state.originate_status = originate_status;
+ //early_state.originate_status = oglobals.originate_status;
early_state.ready = 1;
early_state.ringback = &ringback;
early_state.ttl = and_argc;
if (holding) {
if (oglobals.idx > IDX_NADA) {
- peer_session = originate_status[oglobals.idx].peer_session;
- peer_channel = originate_status[oglobals.idx].peer_channel;
- originate_status[oglobals.idx].peer_channel = NULL;
+ peer_session = oglobals.originate_status[oglobals.idx].peer_session;
+ peer_channel = oglobals.originate_status[oglobals.idx].peer_channel;
+ oglobals.originate_status[oglobals.idx].peer_channel = NULL;
} else if (and_argc == 1) {
- peer_session = originate_status[0].peer_session;
- peer_channel = originate_status[0].peer_channel;
- originate_status[0].peer_channel = NULL;
+ peer_session = oglobals.originate_status[0].peer_session;
+ peer_channel = oglobals.originate_status[0].peer_channel;
+ oglobals.originate_status[0].peer_channel = NULL;
} else {
for (i = 0; i < and_argc; i++) {
- if (!peer_eligible(originate_status[i].peer_channel)) {
+ if (!peer_eligible(oglobals.originate_status[i].peer_channel)) {
continue;
}
- if (switch_channel_media_ready(originate_status[i].peer_channel)) {
- peer_session = originate_status[i].peer_session;
- peer_channel = originate_status[i].peer_channel;
- originate_status[i].peer_channel = NULL;
+ if (switch_channel_media_ready(oglobals.originate_status[i].peer_channel)) {
+ peer_session = oglobals.originate_status[i].peer_session;
+ peer_channel = oglobals.originate_status[i].peer_channel;
+ oglobals.originate_status[i].peer_channel = NULL;
goto end_search;
}
}
for (i = 0; i < and_argc; i++) {
- if (!peer_eligible(originate_status[i].peer_channel)) {
+ if (!peer_eligible(oglobals.originate_status[i].peer_channel)) {
continue;
}
- if (switch_channel_up_nosig(originate_status[i].peer_channel)) {
- peer_session = originate_status[i].peer_session;
- peer_channel = originate_status[i].peer_channel;
- originate_status[i].peer_channel = NULL;
+ if (switch_channel_up_nosig(oglobals.originate_status[i].peer_channel)) {
+ peer_session = oglobals.originate_status[i].peer_session;
+ peer_channel = oglobals.originate_status[i].peer_channel;
+ oglobals.originate_status[i].peer_channel = NULL;
break;
}
}
}
for (i = 0; i < and_argc; i++) {
- if (!peer_eligible(originate_status[i].peer_channel)) {
+ if (!peer_eligible(oglobals.originate_status[i].peer_channel)) {
continue;
}
} else {
if (and_argc > 1) {
reason = SWITCH_CAUSE_LOSE_RACE;
- } else if (!switch_channel_ready(originate_status[i].peer_channel)) {
- wait_for_cause(originate_status[i].peer_channel);
- if (switch_channel_down_nosig(originate_status[i].peer_channel)) {
- reason = switch_channel_get_cause(originate_status[i].peer_channel);
+ } else if (!switch_channel_ready(oglobals.originate_status[i].peer_channel)) {
+ wait_for_cause(oglobals.originate_status[i].peer_channel);
+ if (switch_channel_down_nosig(oglobals.originate_status[i].peer_channel)) {
+ reason = switch_channel_get_cause(oglobals.originate_status[i].peer_channel);
}
} else {
reason = SWITCH_CAUSE_NO_ANSWER;
}
}
}
- if (switch_channel_up_nosig(originate_status[i].peer_channel)) {
+ if (switch_channel_up_nosig(oglobals.originate_status[i].peer_channel)) {
if (caller_channel && i == 0) {
holding = switch_channel_get_variable(caller_channel, SWITCH_SOFT_HOLDING_UUID_VARIABLE);
switch_channel_set_variable(caller_channel, SWITCH_SOFT_HOLDING_UUID_VARIABLE, NULL);
switch_channel_set_variable(holding_channel, SWITCH_HANGUP_AFTER_BRIDGE_VARIABLE, "true");
if (caller_channel && switch_true(switch_channel_get_variable(caller_channel, "recording_follow_transfer"))) {
- switch_ivr_transfer_recordings(session, originate_status[i].peer_session);
+ switch_ivr_transfer_recordings(session, oglobals.originate_status[i].peer_session);
}
if (switch_true(switch_channel_get_variable(holding_channel, "recording_follow_transfer"))) {
- switch_ivr_transfer_recordings(holding_session, originate_status[i].peer_session);
+ switch_ivr_transfer_recordings(holding_session, oglobals.originate_status[i].peer_session);
}
switch_core_session_rwunlock(holding_session);
}
- switch_channel_set_flag(originate_status[i].peer_channel, CF_LAZY_ATTENDED_TRANSFER);
- switch_ivr_uuid_bridge(holding, switch_core_session_get_uuid(originate_status[i].peer_session));
+ switch_channel_set_flag(oglobals.originate_status[i].peer_channel, CF_LAZY_ATTENDED_TRANSFER);
+ switch_ivr_uuid_bridge(holding, switch_core_session_get_uuid(oglobals.originate_status[i].peer_session));
holding = NULL;
} else {
if (force_reason == SWITCH_CAUSE_LOSE_RACE || reason == SWITCH_CAUSE_LOSE_RACE) {
- switch_channel_set_variable(originate_status[i].peer_channel, "group_dial_status", "loser");
+ switch_channel_set_variable(oglobals.originate_status[i].peer_channel, "group_dial_status", "loser");
}
- switch_channel_hangup(originate_status[i].peer_channel, force_reason ? force_reason : reason);
+ switch_channel_hangup(oglobals.originate_status[i].peer_channel, force_reason ? force_reason : reason);
}
}
}
if (oglobals.idx > IDX_NADA) {
- if ((peer_session = originate_status[oglobals.idx].peer_session)) {
- peer_channel = switch_core_session_get_channel(originate_status[oglobals.idx].peer_session);
+ if ((peer_session = oglobals.originate_status[oglobals.idx].peer_session)) {
+ peer_channel = switch_core_session_get_channel(oglobals.originate_status[oglobals.idx].peer_session);
}
} else {
status = SWITCH_STATUS_FALSE;
*cause = switch_channel_get_cause(peer_channel);
} else {
for (i = 0; i < and_argc; i++) {
- if (!originate_status[i].peer_channel) {
+ if (!oglobals.originate_status[i].peer_channel) {
continue;
}
- *cause = switch_channel_get_cause(originate_status[i].peer_channel);
+ *cause = switch_channel_get_cause(oglobals.originate_status[i].peer_channel);
break;
}
}
for (i = 0; i < and_argc; i++) {
switch_channel_t *channel;
- if (!originate_status[i].peer_session) {
+ if (!oglobals.originate_status[i].peer_session) {
continue;
}
- channel = switch_core_session_get_channel(originate_status[i].peer_session);
+ channel = switch_core_session_get_channel(oglobals.originate_status[i].peer_session);
switch_channel_wait_for_state_timeout(channel, CS_REPORTING, 5000);
switch_channel_set_timestamps(channel);
}
- if (switch_ivr_generate_xml_cdr(originate_status[i].peer_session, &cdr) == SWITCH_STATUS_SUCCESS) {
+ if (switch_ivr_generate_xml_cdr(oglobals.originate_status[i].peer_session, &cdr) == SWITCH_STATUS_SUCCESS) {
if ((xml_text = switch_xml_toxml(cdr, SWITCH_FALSE))) {
switch_snprintf(buf, sizeof(buf), "%s_%d", cdr_var, ++cdr_total);
switch_channel_set_variable(caller_channel, buf, xml_text);
for (i = 0; i < and_argc; i++) {
switch_channel_t *channel;
- if (!originate_status[i].peer_session) {
+ if (!oglobals.originate_status[i].peer_session) {
continue;
}
- channel = switch_core_session_get_channel(originate_status[i].peer_session);
+ channel = switch_core_session_get_channel(oglobals.originate_status[i].peer_session);
switch_channel_wait_for_state_timeout(channel, CS_REPORTING, 5000);
switch_channel_set_timestamps(channel);
}
- if (switch_ivr_generate_json_cdr(originate_status[i].peer_session, &json_cdr, SWITCH_TRUE) == SWITCH_STATUS_SUCCESS) {
+ if (switch_ivr_generate_json_cdr(oglobals.originate_status[i].peer_session, &json_cdr, SWITCH_TRUE) == SWITCH_STATUS_SUCCESS) {
json_text = cJSON_PrintUnformatted(json_cdr);
switch_snprintf(buf, sizeof(buf), "%s_%d", json_cdr_var, ++cdr_total);
switch_channel_set_variable(caller_channel, buf, json_text);
} else {
*cause = SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER;
for (i = 0; i < and_argc; i++) {
- if (!peer_eligible(originate_status[i].peer_channel)) {
+ if (!peer_eligible(oglobals.originate_status[i].peer_channel)) {
continue;
}
- wait_for_cause(originate_status[i].peer_channel);
+ wait_for_cause(oglobals.originate_status[i].peer_channel);
- if (switch_channel_down_nosig(originate_status[i].peer_channel)) {
- *cause = switch_channel_get_cause(originate_status[i].peer_channel);
+ if (switch_channel_down_nosig(oglobals.originate_status[i].peer_channel)) {
+ *cause = switch_channel_get_cause(oglobals.originate_status[i].peer_channel);
break;
}
switch_core_session_t *peer_session;
char *val;
- if (!originate_status[i].peer_channel) {
+ if (!oglobals.originate_status[i].peer_channel) {
continue;
}
if (session) {
- val = switch_core_session_sprintf(originate_status[i].peer_session, "%s;%s",
- switch_core_session_get_uuid(originate_status[i].peer_session),
- switch_channel_cause2str(switch_channel_get_cause(originate_status[i].peer_channel)));
+ val = switch_core_session_sprintf(oglobals.originate_status[i].peer_session, "%s;%s",
+ switch_core_session_get_uuid(oglobals.originate_status[i].peer_session),
+ switch_channel_cause2str(switch_channel_get_cause(oglobals.originate_status[i].peer_channel)));
switch_channel_add_variable_var_check(switch_core_session_get_channel(session), "originate_causes", val, SWITCH_FALSE, SWITCH_STACK_PUSH);
}
if (status == SWITCH_STATUS_SUCCESS) {
- switch_channel_clear_flag(originate_status[i].peer_channel, CF_ORIGINATING);
- if (bleg && *bleg && *bleg == originate_status[i].peer_session) {
+ switch_channel_clear_flag(oglobals.originate_status[i].peer_channel, CF_ORIGINATING);
+ if (bleg && *bleg && *bleg == oglobals.originate_status[i].peer_session) {
continue;
}
- } else if ((state = switch_channel_get_state(originate_status[i].peer_channel)) < CS_HANGUP &&
- switch_channel_test_flag(originate_status[i].peer_channel, CF_ORIGINATING)) {
- if (!(state == CS_RESET || switch_channel_test_flag(originate_status[i].peer_channel, CF_TRANSFER) ||
- switch_channel_test_flag(originate_status[i].peer_channel, CF_REDIRECT) ||
- switch_channel_test_flag(originate_status[i].peer_channel, CF_BRIDGED))) {
+ } else if ((state = switch_channel_get_state(oglobals.originate_status[i].peer_channel)) < CS_HANGUP &&
+ switch_channel_test_flag(oglobals.originate_status[i].peer_channel, CF_ORIGINATING)) {
+ if (!(state == CS_RESET || switch_channel_test_flag(oglobals.originate_status[i].peer_channel, CF_TRANSFER) ||
+ switch_channel_test_flag(oglobals.originate_status[i].peer_channel, CF_REDIRECT) ||
+ switch_channel_test_flag(oglobals.originate_status[i].peer_channel, CF_BRIDGED))) {
if (caller_channel && switch_channel_test_flag(caller_channel, CF_INTERCEPTED)) {
- switch_channel_set_flag(originate_status[i].peer_channel, CF_INTERCEPT);
+ switch_channel_set_flag(oglobals.originate_status[i].peer_channel, CF_INTERCEPT);
}
- switch_channel_hangup(originate_status[i].peer_channel, *cause);
+ switch_channel_hangup(oglobals.originate_status[i].peer_channel, *cause);
}
}
- switch_channel_clear_flag(originate_status[i].peer_channel, CF_ORIGINATING);
+ switch_channel_clear_flag(oglobals.originate_status[i].peer_channel, CF_ORIGINATING);
- peer_session = originate_status[i].peer_session;
- originate_status[i].down_session = originate_status[i].peer_session;
- originate_status[i].peer_session = NULL;
- originate_status[i].peer_channel = NULL;
+ peer_session = oglobals.originate_status[i].peer_session;
+ oglobals.originate_status[i].down_session = oglobals.originate_status[i].peer_session;
+ oglobals.originate_status[i].peer_session = NULL;
+ oglobals.originate_status[i].peer_channel = NULL;
switch_core_session_rwunlock(peer_session);
}
switch_channel_t *pchannel;
const char *cause_str;
- if (!originate_status[i].down_session) {
+ if (!oglobals.originate_status[i].down_session) {
continue;
}
- pchannel = switch_core_session_get_channel(originate_status[i].down_session);
+ pchannel = switch_core_session_get_channel(oglobals.originate_status[i].down_session);
wait_for_cause(pchannel);
if (switch_channel_down_nosig(pchannel)) {