pass cause from originate

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@2647 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
Anthony Minessale 2006-09-12 01:32:04 +00:00
parent 3cb83d21d8
commit cb2da2328a
6 changed files with 25 additions and 7 deletions

View File

@ -189,6 +189,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_speak_text(switch_core_session_t *ses
\brief Make an outgoing call \brief Make an outgoing call
\param session originating session \param session originating session
\param bleg B leg session \param bleg B leg session
\param cause a pointer to hold call cause
\param bridgeto the desired remote callstring \param bridgeto the desired remote callstring
\param timelimit_sec timeout in seconds for outgoing call \param timelimit_sec timeout in seconds for outgoing call
\param table optional state handler table to install on the channel \param table optional state handler table to install on the channel
@ -199,6 +200,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_speak_text(switch_core_session_t *ses
*/ */
SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *session, SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *session,
switch_core_session_t **bleg, switch_core_session_t **bleg,
switch_call_cause_t *cause,
char *bridgeto, char *bridgeto,
uint32_t timelimit_sec, uint32_t timelimit_sec,
const switch_state_handler_table_t *table, const switch_state_handler_table_t *table,

View File

@ -42,6 +42,7 @@ static void audio_bridge_function(switch_core_session_t *session, char *data)
switch_core_session_t *peer_session; switch_core_session_t *peer_session;
unsigned int timelimit = 60; unsigned int timelimit = 60;
char *var; char *var;
switch_call_cause_t cause = SWITCH_CAUSE_NORMAL_CLEARING;
caller_channel = switch_core_session_get_channel(session); caller_channel = switch_core_session_get_channel(session);
assert(caller_channel != NULL); assert(caller_channel != NULL);
@ -50,7 +51,7 @@ static void audio_bridge_function(switch_core_session_t *session, char *data)
timelimit = atoi(var); timelimit = atoi(var);
} }
if (switch_ivr_originate(session, &peer_session, data, timelimit, NULL, NULL, NULL, NULL) != SWITCH_STATUS_SUCCESS) { if (switch_ivr_originate(session, &peer_session, &cause, data, timelimit, NULL, NULL, NULL, NULL) != SWITCH_STATUS_SUCCESS) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot Create Outgoing Channel!\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot Create Outgoing Channel!\n");
switch_channel_hangup(caller_channel, SWITCH_CAUSE_REQUESTED_CHAN_UNAVAIL); switch_channel_hangup(caller_channel, SWITCH_CAUSE_REQUESTED_CHAN_UNAVAIL);
return; return;

View File

@ -217,7 +217,7 @@ static switch_status_t originate_function(char *cmd, switch_core_session_t *ises
int x, argc = 0; int x, argc = 0;
char *aleg, *exten, *dp, *context, *cid_name, *cid_num; char *aleg, *exten, *dp, *context, *cid_name, *cid_num;
uint32_t timeout = 60; uint32_t timeout = 60;
switch_call_cause_t cause = SWITCH_CAUSE_NORMAL_CLEARING;
if (isession) { if (isession) {
stream->write_function(stream, "Illegal Usage\n"); stream->write_function(stream, "Illegal Usage\n");
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
@ -260,7 +260,7 @@ static switch_status_t originate_function(char *cmd, switch_core_session_t *ises
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }
if (switch_ivr_originate(NULL, &caller_session, aleg, timeout, &noop_state_handler, cid_name, cid_num, NULL) != SWITCH_STATUS_SUCCESS) { if (switch_ivr_originate(NULL, &caller_session, &cause, aleg, timeout, &noop_state_handler, cid_name, cid_num, NULL) != SWITCH_STATUS_SUCCESS) {
stream->write_function(stream, "Cannot Create Outgoing Channel! [%s]\n", aleg); stream->write_function(stream, "Cannot Create Outgoing Channel! [%s]\n", aleg);
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }

View File

@ -2044,13 +2044,21 @@ static switch_status_t conference_outcall(conference_obj_t *conference,
switch_status_t status = SWITCH_STATUS_SUCCESS; switch_status_t status = SWITCH_STATUS_SUCCESS;
switch_channel_t *caller_channel = NULL; switch_channel_t *caller_channel = NULL;
char appdata[512]; char appdata[512];
switch_call_cause_t cause = SWITCH_CAUSE_NORMAL_CLEARING;
if (switch_ivr_originate(session,
if (switch_ivr_originate(session, &peer_session, bridgeto, timeout, &audio_bridge_peer_state_handlers, cid_name, cid_num, NULL) != SWITCH_STATUS_SUCCESS) { &peer_session,
&cause,
bridgeto,
timeout,
&audio_bridge_peer_state_handlers,
cid_name,
cid_num,
NULL) != SWITCH_STATUS_SUCCESS) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot Create Outgoing Channel!\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot Create Outgoing Channel!\n");
if (session) { if (session) {
caller_channel = switch_core_session_get_channel(session); caller_channel = switch_core_session_get_channel(session);
switch_channel_hangup(caller_channel, SWITCH_CAUSE_REQUESTED_CHAN_UNAVAIL); switch_channel_hangup(caller_channel, cause);
} }
goto done; goto done;
} }

View File

@ -1390,6 +1390,7 @@ static JSBool session_construct(JSContext *cx, JSObject *obj, uintN argc, jsval
{ {
switch_memory_pool_t *pool = NULL; switch_memory_pool_t *pool = NULL;
if (argc > 1) { if (argc > 1) {
switch_call_cause_t cause = SWITCH_CAUSE_NORMAL_CLEARING;
struct js_session *jss = NULL; struct js_session *jss = NULL;
JSObject *session_obj; JSObject *session_obj;
switch_core_session_t *session = NULL, *peer_session = NULL; switch_core_session_t *session = NULL, *peer_session = NULL;
@ -1471,7 +1472,7 @@ static JSBool session_construct(JSContext *cx, JSObject *obj, uintN argc, jsval
context, context,
dest); dest);
if (switch_ivr_originate(session, &peer_session, dest, to ? atoi(to) : 60, NULL, NULL, NULL, caller_profile) != SWITCH_STATUS_SUCCESS) { if (switch_ivr_originate(session, &peer_session, &cause, dest, to ? atoi(to) : 60, NULL, NULL, NULL, caller_profile) != SWITCH_STATUS_SUCCESS) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Cannot Create Outgoing Channel! [%s]\n", dest); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Cannot Create Outgoing Channel! [%s]\n", dest);
return JS_TRUE; return JS_TRUE;
} }

View File

@ -1534,6 +1534,7 @@ static uint8_t check_channel_status(switch_channel_t **peer_channels,
#define MAX_PEERS 256 #define MAX_PEERS 256
SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *session, SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *session,
switch_core_session_t **bleg, switch_core_session_t **bleg,
switch_call_cause_t *cause,
char *bridgeto, char *bridgeto,
uint32_t timelimit_sec, uint32_t timelimit_sec,
const switch_state_handler_table_t *table, const switch_state_handler_table_t *table,
@ -1849,6 +1850,11 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess
done: done:
if (caller_channel) {
*cause = switch_channel_get_cause(caller_channel);
} else {
*cause = SWITCH_CAUSE_CHANNEL_UNACCEPTABLE;
}
if (odata) { if (odata) {
free(odata); free(odata);
} }