mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-06-05 12:41:38 +00:00
...
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@4945 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
parent
f40f87ebca
commit
bf7144b2a2
@ -1016,7 +1016,15 @@ static switch_call_cause_t wanpipe_outgoing_channel(switch_core_session_t *sessi
|
||||
char *protocol = NULL;
|
||||
char *dest;
|
||||
int ready = 0, is_pri = 0, is_boost = 0, is_raw = 0;
|
||||
switch_call_cause_t cause = SWITCH_CAUSE_SUCCESS;
|
||||
switch_call_cause_t cause = SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER;
|
||||
private_object_t *tech_pvt;
|
||||
switch_channel_t *channel;
|
||||
switch_caller_profile_t *caller_profile = NULL;
|
||||
int callno = 0;
|
||||
struct sangoma_pri *spri;
|
||||
int span = 0, autospan = 0, autochan = 0;
|
||||
char *num, *p;
|
||||
struct channel_map *chanmap = NULL;
|
||||
|
||||
if (!outbound_profile) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Doh! no caller profile\n");
|
||||
@ -1025,6 +1033,7 @@ static switch_call_cause_t wanpipe_outgoing_channel(switch_core_session_t *sessi
|
||||
}
|
||||
|
||||
protocol = strdup(outbound_profile->destination_number);
|
||||
assert(protocol != NULL);
|
||||
|
||||
if (!(dest = strchr(protocol, '/'))) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error No protocol specified!\n");
|
||||
@ -1059,16 +1068,10 @@ static switch_call_cause_t wanpipe_outgoing_channel(switch_core_session_t *sessi
|
||||
|
||||
outbound_profile->destination_number = dest;
|
||||
|
||||
if ((*new_session = switch_core_session_request(&wanpipe_endpoint_interface, pool))) {
|
||||
private_object_t *tech_pvt;
|
||||
switch_channel_t *channel;
|
||||
switch_caller_profile_t *caller_profile = NULL;
|
||||
int callno = 0;
|
||||
struct sangoma_pri *spri;
|
||||
int span = 0, autospan = 0, autochan = 0;
|
||||
char *num, *p;
|
||||
struct channel_map *chanmap = NULL;
|
||||
|
||||
if (!(*new_session = switch_core_session_request(&wanpipe_endpoint_interface, pool))) {
|
||||
cause = SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER;
|
||||
goto error;
|
||||
}
|
||||
|
||||
switch_core_session_add_stream(*new_session, NULL);
|
||||
if ((tech_pvt = (private_object_t *) switch_core_session_alloc(*new_session, sizeof(private_object_t)))) {
|
||||
@ -1276,7 +1279,7 @@ static switch_call_cause_t wanpipe_outgoing_channel(switch_core_session_t *sessi
|
||||
switch_set_flag_locked(tech_pvt, TFLAG_OUTBOUND);
|
||||
switch_channel_set_state(channel, CS_INIT);
|
||||
cause = SWITCH_CAUSE_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
error:
|
||||
switch_safe_free(protocol);
|
||||
|
@ -87,12 +87,7 @@ static void *audio_bridge_thread(switch_thread_t * thread, void *obj)
|
||||
break;
|
||||
}
|
||||
|
||||
b_state = switch_channel_get_state(chan_b);
|
||||
|
||||
switch (b_state) {
|
||||
case CS_HANGUP:
|
||||
case CS_DONE:
|
||||
default:
|
||||
if ((b_state = switch_channel_get_state(chan_b)) >= CS_HANGUP) {
|
||||
break;
|
||||
}
|
||||
|
||||
@ -181,11 +176,11 @@ static void *audio_bridge_thread(switch_thread_t * thread, void *obj)
|
||||
}
|
||||
}
|
||||
|
||||
switch_core_session_kill_channel(session_b, SWITCH_SIG_BREAK);
|
||||
msg.string_arg = data->b_uuid;
|
||||
msg.message_id = SWITCH_MESSAGE_INDICATE_UNBRIDGE;
|
||||
msg.from = __FILE__;
|
||||
switch_core_session_receive_message(session_a, &msg);
|
||||
switch_core_session_kill_channel(session_b, SWITCH_SIG_BREAK);
|
||||
|
||||
switch_channel_set_variable(chan_a, SWITCH_BRIDGE_VARIABLE, NULL);
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "BRIDGE THREAD DONE [%s]\n", switch_channel_get_name(chan_a));
|
||||
|
@ -246,8 +246,8 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess
|
||||
switch_status_t status = SWITCH_STATUS_SUCCESS;
|
||||
switch_channel_t *caller_channel = NULL;
|
||||
char *peer_names[MAX_PEERS] = { 0 };
|
||||
switch_core_session_t *peer_session, *peer_sessions[MAX_PEERS] = { 0 };
|
||||
switch_caller_profile_t *caller_profiles[MAX_PEERS] = { 0 }, *caller_caller_profile;
|
||||
switch_core_session_t *new_session = NULL, *peer_session, *peer_sessions[MAX_PEERS] = { 0 };
|
||||
switch_caller_profile_t *new_profile = NULL, *caller_profiles[MAX_PEERS] = { 0 }, *caller_caller_profile;
|
||||
char *chan_type = NULL, *chan_data;
|
||||
switch_channel_t *peer_channel = NULL, *peer_channels[MAX_PEERS] = { 0 };
|
||||
ringback_t ringback = { 0 };
|
||||
@ -427,6 +427,8 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess
|
||||
memset(peer_sessions, 0, sizeof(peer_sessions));
|
||||
memset(peer_channels, 0, sizeof(peer_channels));
|
||||
memset(caller_profiles, 0, sizeof(caller_profiles));
|
||||
new_profile = NULL;
|
||||
new_session = NULL;
|
||||
chan_type = NULL;
|
||||
chan_data = NULL;
|
||||
peer_channel = NULL;
|
||||
@ -474,7 +476,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess
|
||||
cid_num_override = caller_caller_profile->caller_id_number;
|
||||
}
|
||||
|
||||
caller_profiles[i] = switch_caller_profile_new(switch_core_session_get_pool(session),
|
||||
new_profile = switch_caller_profile_new(switch_core_session_get_pool(session),
|
||||
caller_caller_profile->username,
|
||||
caller_caller_profile->dialplan,
|
||||
cid_name_override,
|
||||
@ -501,7 +503,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess
|
||||
}
|
||||
|
||||
if (caller_profile_override) {
|
||||
caller_profiles[i] = switch_caller_profile_new(pool,
|
||||
new_profile = switch_caller_profile_new(pool,
|
||||
caller_profile_override->username,
|
||||
caller_profile_override->dialplan,
|
||||
caller_profile_override->caller_id_name,
|
||||
@ -512,7 +514,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess
|
||||
caller_profile_override->rdnis,
|
||||
caller_profile_override->source, caller_profile_override->context, chan_data);
|
||||
} else {
|
||||
caller_profiles[i] = switch_caller_profile_new(pool,
|
||||
new_profile = switch_caller_profile_new(pool,
|
||||
NULL,
|
||||
NULL,
|
||||
cid_name_override, cid_num_override, NULL, NULL, NULL, NULL, __FILE__, NULL,
|
||||
@ -520,23 +522,25 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess
|
||||
}
|
||||
}
|
||||
|
||||
if ((reason =
|
||||
switch_core_session_outgoing_channel(session, chan_type, caller_profiles[i], &peer_sessions[i], &pool)) != SWITCH_CAUSE_SUCCESS) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot Create Outgoing Channel! cause: %s\n",
|
||||
switch_channel_cause2str(reason));
|
||||
if (pool) {
|
||||
switch_core_destroy_memory_pool(&pool);
|
||||
}
|
||||
caller_profiles[i] = NULL;
|
||||
peer_channels[i] = NULL;
|
||||
peer_sessions[i] = NULL;
|
||||
new_session = NULL;
|
||||
|
||||
if ((reason = switch_core_session_outgoing_channel(session, chan_type, new_profile, &new_session, &pool)) != SWITCH_CAUSE_SUCCESS) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot Create Outgoing Channel! cause: %s\n", switch_channel_cause2str(reason));
|
||||
if (pool) {
|
||||
switch_core_destroy_memory_pool(&pool);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
switch_core_session_read_lock(peer_sessions[i]);
|
||||
pool = NULL;
|
||||
|
||||
peer_channels[i] = switch_core_session_get_channel(peer_sessions[i]);
|
||||
caller_profiles[i] = new_profile;
|
||||
peer_sessions[i] = new_session;
|
||||
peer_channels[i] = switch_core_session_get_channel(new_session);
|
||||
assert(peer_channels[i] != NULL);
|
||||
|
||||
if (!table) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user