[Freeswitch-svn] [commit] r4945 - in freeswitch/trunk/src: . mod/endpoints/mod_wanpipe
Freeswitch SVN
anthm at freeswitch.org
Mon Apr 16 15:32:08 EDT 2007
Author: anthm
Date: Mon Apr 16 15:32:08 2007
New Revision: 4945
Modified:
freeswitch/trunk/src/mod/endpoints/mod_wanpipe/mod_wanpipe.c
freeswitch/trunk/src/switch_ivr_bridge.c
freeswitch/trunk/src/switch_ivr_originate.c
Log:
...
Modified: freeswitch/trunk/src/mod/endpoints/mod_wanpipe/mod_wanpipe.c
==============================================================================
--- freeswitch/trunk/src/mod/endpoints/mod_wanpipe/mod_wanpipe.c (original)
+++ freeswitch/trunk/src/mod/endpoints/mod_wanpipe/mod_wanpipe.c Mon Apr 16 15:32:08 2007
@@ -1016,7 +1016,15 @@
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 @@
}
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,225 +1068,219 @@
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)))) {
- memset(tech_pvt, 0, sizeof(*tech_pvt));
- switch_mutex_init(&tech_pvt->flag_mutex, SWITCH_MUTEX_NESTED, switch_core_session_get_pool(*new_session));
- channel = switch_core_session_get_channel(*new_session);
- switch_core_session_set_private(*new_session, tech_pvt);
- tech_pvt->session = *new_session;
- } else {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Memory Error!\n");
- switch_core_session_destroy(new_session);
- 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)))) {
+ memset(tech_pvt, 0, sizeof(*tech_pvt));
+ switch_mutex_init(&tech_pvt->flag_mutex, SWITCH_MUTEX_NESTED, switch_core_session_get_pool(*new_session));
+ channel = switch_core_session_get_channel(*new_session);
+ switch_core_session_set_private(*new_session, tech_pvt);
+ tech_pvt->session = *new_session;
+ } else {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Memory Error!\n");
+ switch_core_session_destroy(new_session);
+ cause = SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER;
+ goto error;
+ }
- caller_profile = switch_caller_profile_clone(*new_session, outbound_profile);
+ caller_profile = switch_caller_profile_clone(*new_session, outbound_profile);
- if (is_pri) {
- num = caller_profile->destination_number;
+ if (is_pri) {
+ num = caller_profile->destination_number;
+ if ((p = strchr(num, '/'))) {
+ *p++ = '\0';
+
+ if (*num == 'a') {
+ span = 1;
+ autospan = 1;
+ } else if (*num == 'A') {
+ span = MAX_SPANS - 1;
+ autospan = -1;
+ } else {
+ if (num && *num > 47 && *num < 58) {
+ span = atoi(num);
+ } else {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invlid Syntax\n");
+ switch_core_session_destroy(new_session);
+ cause = SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER;
+ goto error;
+ }
+ }
+ num = p;
if ((p = strchr(num, '/'))) {
*p++ = '\0';
-
if (*num == 'a') {
- span = 1;
- autospan = 1;
+ autochan = 1;
} else if (*num == 'A') {
- span = MAX_SPANS - 1;
- autospan = -1;
- } else {
- if (num && *num > 47 && *num < 58) {
- span = atoi(num);
- } else {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invlid Syntax\n");
- switch_core_session_destroy(new_session);
- cause = SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER;
- goto error;
- }
- }
- num = p;
- if ((p = strchr(num, '/'))) {
- *p++ = '\0';
- if (*num == 'a') {
- autochan = 1;
- } else if (*num == 'A') {
- autochan = -1;
- } else if (num && *num > 47 && *num < 58) {
- callno = atoi(num);
- } else {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invlid Syntax\n");
- switch_core_session_destroy(new_session);
- cause = SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER;
- goto error;
- }
- caller_profile->destination_number = p;
+ autochan = -1;
+ } else if (num && *num > 47 && *num < 58) {
+ callno = atoi(num);
} else {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invlid Syntax\n");
switch_core_session_destroy(new_session);
cause = SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER;
goto error;
}
+ caller_profile->destination_number = p;
+ } else {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invlid Syntax\n");
+ switch_core_session_destroy(new_session);
+ cause = SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER;
+ goto error;
}
}
+ }
- tech_pvt->caller_profile = caller_profile;
+ tech_pvt->caller_profile = caller_profile;
- if (is_raw) {
- int chan, span;
+ if (is_raw) {
+ int chan, span;
- if (sangoma_span_chan_fromif(bchan, &span, &chan)) {
- if (!wp_open(tech_pvt, span, chan)) {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Can't open fd for s%dc%d! [%s]\n", span, chan, strerror(errno));
- switch_core_session_destroy(new_session);
- cause = SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER;
- goto error;
- }
- switch_set_flag_locked(tech_pvt, TFLAG_NOSIG);
- snprintf(name, sizeof(name), "wanpipe/%s/nosig", bchan);
- switch_channel_set_name(channel, name);
- switch_channel_set_caller_profile(channel, caller_profile);
- } else {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid address\n");
+ if (sangoma_span_chan_fromif(bchan, &span, &chan)) {
+ if (!wp_open(tech_pvt, span, chan)) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Can't open fd for s%dc%d! [%s]\n", span, chan, strerror(errno));
switch_core_session_destroy(new_session);
- cause = SWITCH_CAUSE_REQUESTED_CHAN_UNAVAIL;
+ cause = SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER;
goto error;
}
- } else if (is_pri) {
- switch_mutex_lock(globals.channel_mutex);
- callno = 0;
- while (!callno) {
- if (autospan > 0 && span == MAX_SPANS - 1) {
- break;
- }
+ switch_set_flag_locked(tech_pvt, TFLAG_NOSIG);
+ snprintf(name, sizeof(name), "wanpipe/%s/nosig", bchan);
+ switch_channel_set_name(channel, name);
+ switch_channel_set_caller_profile(channel, caller_profile);
+ } else {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid address\n");
+ switch_core_session_destroy(new_session);
+ cause = SWITCH_CAUSE_REQUESTED_CHAN_UNAVAIL;
+ goto error;
+ }
+ } else if (is_pri) {
+ switch_mutex_lock(globals.channel_mutex);
+ callno = 0;
+ while (!callno) {
+ if (autospan > 0 && span == MAX_SPANS - 1) {
+ break;
+ }
- if (autospan < 0 && span == 0) {
- break;
- }
+ if (autospan < 0 && span == 0) {
+ break;
+ }
- if (SPANS[span] && (spri = &SPANS[span]->spri) && switch_test_flag(spri, SANGOMA_PRI_READY)) {
- chanmap = spri->private_info;
+ if (SPANS[span] && (spri = &SPANS[span]->spri) && switch_test_flag(spri, SANGOMA_PRI_READY)) {
+ chanmap = spri->private_info;
- if (autochan > 0) {
- for(callno = 1; callno < SANGOMA_MAX_CHAN_PER_SPAN; callno++) {
- if ((SPANS[span]->bchans & (1 << callno)) && ! *chanmap->map[callno]) {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Choosing channel s%dc%d\n", span, callno);
- goto done;
- }
+ if (autochan > 0) {
+ for(callno = 1; callno < SANGOMA_MAX_CHAN_PER_SPAN; callno++) {
+ if ((SPANS[span]->bchans & (1 << callno)) && ! *chanmap->map[callno]) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Choosing channel s%dc%d\n", span, callno);
+ goto done;
}
- callno = 0;
- } else if (autochan < 0) {
- for(callno = SANGOMA_MAX_CHAN_PER_SPAN; callno > 0; callno--) {
- if ((SPANS[span]->bchans & (1 << callno)) && ! *chanmap->map[callno]) {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Choosing channel s%dc%d\n", span, callno);
- goto done;
- }
+ }
+ callno = 0;
+ } else if (autochan < 0) {
+ for(callno = SANGOMA_MAX_CHAN_PER_SPAN; callno > 0; callno--) {
+ if ((SPANS[span]->bchans & (1 << callno)) && ! *chanmap->map[callno]) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Choosing channel s%dc%d\n", span, callno);
+ goto done;
}
- callno = 0;
}
- }
-
- if (autospan > 0) {
- span++;
- } else if (autospan < 0) {
- span--;
+ callno = 0;
}
}
- done:
- switch_mutex_unlock(globals.channel_mutex);
- if (!spri || callno == 0 || callno == (SANGOMA_MAX_CHAN_PER_SPAN)) {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "No Free Channels!\n");
- switch_core_session_destroy(new_session);
- cause = SWITCH_CAUSE_SWITCH_CONGESTION;
- goto error;
+ if (autospan > 0) {
+ span++;
+ } else if (autospan < 0) {
+ span--;
}
+ }
+ done:
+ switch_mutex_unlock(globals.channel_mutex);
+
+ if (!spri || callno == 0 || callno == (SANGOMA_MAX_CHAN_PER_SPAN)) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "No Free Channels!\n");
+ switch_core_session_destroy(new_session);
+ cause = SWITCH_CAUSE_SWITCH_CONGESTION;
+ goto error;
+ }
- tech_pvt->callno = callno;
+ tech_pvt->callno = callno;
- if (spri && (tech_pvt->call = pri_new_call(spri->pri))) {
- struct pri_sr *sr;
+ if (spri && (tech_pvt->call = pri_new_call(spri->pri))) {
+ struct pri_sr *sr;
- snprintf(name, sizeof(name), "wanpipe/pri/s%dc%d/%s", spri->span, callno, caller_profile->destination_number);
- switch_channel_set_name(channel, name);
- switch_channel_set_caller_profile(channel, caller_profile);
- sr = pri_sr_new();
- pri_sr_set_channel(sr, callno, 0, 0);
- pri_sr_set_bearer(sr, 0, SPANS[span]->l1);
- pri_sr_set_called(sr, caller_profile->destination_number, SPANS[span]->dp, 1);
- pri_sr_set_caller(sr,
- caller_profile->caller_id_number,
- caller_profile->caller_id_name,
- SPANS[span]->dp,
- PRES_ALLOWED_USER_NUMBER_PASSED_SCREEN);
- pri_sr_set_redirecting(sr,
- caller_profile->caller_id_number,
- SPANS[span]->dp,
- PRES_ALLOWED_USER_NUMBER_PASSED_SCREEN,
- PRI_REDIR_UNCONDITIONAL);
+ snprintf(name, sizeof(name), "wanpipe/pri/s%dc%d/%s", spri->span, callno, caller_profile->destination_number);
+ switch_channel_set_name(channel, name);
+ switch_channel_set_caller_profile(channel, caller_profile);
+ sr = pri_sr_new();
+ pri_sr_set_channel(sr, callno, 0, 0);
+ pri_sr_set_bearer(sr, 0, SPANS[span]->l1);
+ pri_sr_set_called(sr, caller_profile->destination_number, SPANS[span]->dp, 1);
+ pri_sr_set_caller(sr,
+ caller_profile->caller_id_number,
+ caller_profile->caller_id_name,
+ SPANS[span]->dp,
+ PRES_ALLOWED_USER_NUMBER_PASSED_SCREEN);
+ pri_sr_set_redirecting(sr,
+ caller_profile->caller_id_number,
+ SPANS[span]->dp,
+ PRES_ALLOWED_USER_NUMBER_PASSED_SCREEN,
+ PRI_REDIR_UNCONDITIONAL);
- if (pri_setup(spri->pri, tech_pvt->call , sr)) {
- switch_core_session_destroy(new_session);
- pri_sr_free(sr);
- cause = SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER;
- goto error;
- }
-
- if (!wp_open(tech_pvt, spri->span, callno)) {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Can't open fd!\n");
- switch_core_session_destroy(new_session);
- pri_sr_free(sr);
- cause = SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER;
- goto error;
- }
+ if (pri_setup(spri->pri, tech_pvt->call , sr)) {
+ switch_core_session_destroy(new_session);
pri_sr_free(sr);
- switch_copy_string(chanmap->map[callno],
- switch_core_session_get_uuid(*new_session),
- sizeof(chanmap->map[callno]));
- tech_pvt->spri = spri;
+ cause = SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER;
+ goto error;
}
- } else if (is_boost) {
- char *p;
- if ((p = strchr(caller_profile->destination_number, '/'))) {
- char *grp = caller_profile->destination_number;
- *p = '\0';
- caller_profile->destination_number = p+1;
- tech_pvt->boost_trunk_group = atoi(grp+1) - 1;
- if (tech_pvt->boost_trunk_group < 0) {
- tech_pvt->boost_trunk_group = 0;
- }
+ if (!wp_open(tech_pvt, spri->span, callno)) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Can't open fd!\n");
+ switch_core_session_destroy(new_session);
+ pri_sr_free(sr);
+ cause = SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER;
+ goto error;
}
- sprintf(name, "wanpipe/ss7boost/%s", caller_profile->destination_number);
- switch_channel_set_name(channel, name);
- tech_pvt->ss7boost_handle = globals.ss7boost_handle;
+ pri_sr_free(sr);
+ switch_copy_string(chanmap->map[callno],
+ switch_core_session_get_uuid(*new_session),
+ sizeof(chanmap->map[callno]));
+ tech_pvt->spri = spri;
+ }
+ } else if (is_boost) {
+ char *p;
- if (session && switch_core_session_compare(session, *new_session)) {
- private_object_t *otech_pvt = switch_core_session_get_private(session);
- tech_pvt->boost_pres = otech_pvt->boost_pres;
+ if ((p = strchr(caller_profile->destination_number, '/'))) {
+ char *grp = caller_profile->destination_number;
+ *p = '\0';
+ caller_profile->destination_number = p+1;
+ tech_pvt->boost_trunk_group = atoi(grp+1) - 1;
+ if (tech_pvt->boost_trunk_group < 0) {
+ tech_pvt->boost_trunk_group = 0;
}
+ }
+ sprintf(name, "wanpipe/ss7boost/%s", caller_profile->destination_number);
+ switch_channel_set_name(channel, name);
+ tech_pvt->ss7boost_handle = globals.ss7boost_handle;
+ if (session && switch_core_session_compare(session, *new_session)) {
+ private_object_t *otech_pvt = switch_core_session_get_private(session);
+ tech_pvt->boost_pres = otech_pvt->boost_pres;
}
- tech_pvt->caller_profile = caller_profile;
- switch_channel_set_flag(channel, CF_OUTBOUND);
- switch_set_flag_locked(tech_pvt, TFLAG_OUTBOUND);
- switch_channel_set_state(channel, CS_INIT);
- cause = SWITCH_CAUSE_SUCCESS;
}
+ tech_pvt->caller_profile = caller_profile;
+ switch_channel_set_flag(channel, CF_OUTBOUND);
+ switch_set_flag_locked(tech_pvt, TFLAG_OUTBOUND);
+ switch_channel_set_state(channel, CS_INIT);
+ cause = SWITCH_CAUSE_SUCCESS;
+
+
error:
switch_safe_free(protocol);
return cause;
Modified: freeswitch/trunk/src/switch_ivr_bridge.c
==============================================================================
--- freeswitch/trunk/src/switch_ivr_bridge.c (original)
+++ freeswitch/trunk/src/switch_ivr_bridge.c Mon Apr 16 15:32:08 2007
@@ -81,18 +81,13 @@
switch_channel_state_t b_state;
switch_status_t status;
switch_event_t *event;
-
+
/* if you really want to make sure it's not ready, test it twice because it might be just a break */
if (!switch_channel_ready(chan_a) && !switch_channel_ready(chan_a)) {
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 @@
}
}
- 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));
Modified: freeswitch/trunk/src/switch_ivr_originate.c
==============================================================================
--- freeswitch/trunk/src/switch_ivr_originate.c (original)
+++ freeswitch/trunk/src/switch_ivr_originate.c Mon Apr 16 15:32:08 2007
@@ -246,8 +246,8 @@
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 @@
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,16 +476,16 @@
cid_num_override = caller_caller_profile->caller_id_number;
}
- caller_profiles[i] = switch_caller_profile_new(switch_core_session_get_pool(session),
- caller_caller_profile->username,
- caller_caller_profile->dialplan,
- cid_name_override,
- cid_num_override,
- caller_caller_profile->network_addr,
- NULL,
- NULL,
- caller_caller_profile->rdnis,
- caller_caller_profile->source, caller_caller_profile->context, chan_data);
+ new_profile = switch_caller_profile_new(switch_core_session_get_pool(session),
+ caller_caller_profile->username,
+ caller_caller_profile->dialplan,
+ cid_name_override,
+ cid_num_override,
+ caller_caller_profile->network_addr,
+ NULL,
+ NULL,
+ caller_caller_profile->rdnis,
+ caller_caller_profile->source, caller_caller_profile->context, chan_data);
caller_profiles[i]->flags = caller_caller_profile->flags;
pool = NULL;
} else {
@@ -501,42 +503,44 @@
}
if (caller_profile_override) {
- caller_profiles[i] = switch_caller_profile_new(pool,
- caller_profile_override->username,
- caller_profile_override->dialplan,
- caller_profile_override->caller_id_name,
- caller_profile_override->caller_id_number,
- caller_profile_override->network_addr,
- caller_profile_override->ani,
- caller_profile_override->aniii,
- caller_profile_override->rdnis,
- caller_profile_override->source, caller_profile_override->context, chan_data);
+ new_profile = switch_caller_profile_new(pool,
+ caller_profile_override->username,
+ caller_profile_override->dialplan,
+ caller_profile_override->caller_id_name,
+ caller_profile_override->caller_id_number,
+ caller_profile_override->network_addr,
+ caller_profile_override->ani,
+ caller_profile_override->aniii,
+ caller_profile_override->rdnis,
+ caller_profile_override->source, caller_profile_override->context, chan_data);
} else {
- caller_profiles[i] = switch_caller_profile_new(pool,
- NULL,
- NULL,
- cid_name_override, cid_num_override, NULL, NULL, NULL, NULL, __FILE__, NULL,
- chan_data);
+ new_profile = switch_caller_profile_new(pool,
+ NULL,
+ NULL,
+ cid_name_override, cid_num_override, NULL, NULL, NULL, NULL, __FILE__, NULL,
+ chan_data);
}
}
-
- 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));
+
+ 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);
}
- caller_profiles[i] = NULL;
- peer_channels[i] = NULL;
- peer_sessions[i] = NULL;
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) {
More information about the Freeswitch-svn
mailing list