better error checking, code review, cleanup.
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@7110 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
parent
d93a42df14
commit
aca07ac3c0
|
@ -44,7 +44,7 @@ SWITCH_STANDARD_APP(detect_speech_function)
|
|||
int argc;
|
||||
char *lbuf = NULL;
|
||||
|
||||
if (data && (lbuf = switch_core_session_strdup(session, data))
|
||||
if (!switch_strlen_zero(data) && (lbuf = switch_core_session_strdup(session, data))
|
||||
&& (argc = switch_separate_string(lbuf, ' ', argv, (sizeof(argv) / sizeof(argv[0]))))) {
|
||||
if (!strcasecmp(argv[0], "grammar") && argc >= 1) {
|
||||
switch_ivr_detect_speech_load_grammar(session, argv[1], argv[2]);
|
||||
|
@ -62,25 +62,18 @@ SWITCH_STANDARD_APP(detect_speech_function)
|
|||
} else {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Usage: %s\n", DETECT_SPEECH_SYNTAX);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#define EXE_SYNTAX "<extension> <dialplan> <context>"
|
||||
SWITCH_STANDARD_APP(exe_function)
|
||||
{
|
||||
char *argv[4];
|
||||
char *argv[4] = { 0 };
|
||||
int argc;
|
||||
char *lbuf = NULL;
|
||||
char *extension;
|
||||
char *context;
|
||||
char *dialplan;
|
||||
|
||||
if (data && (lbuf = switch_core_session_strdup(session, data))
|
||||
if (!switch_strlen_zero(data) && (lbuf = switch_core_session_strdup(session, data))
|
||||
&& (argc = switch_separate_string(lbuf, ' ', argv, (sizeof(argv) / sizeof(argv[0]))))) {
|
||||
extension = argv[0];
|
||||
dialplan = argv[1];
|
||||
context = argv[2];
|
||||
switch_core_session_execute_exten(session, extension, dialplan, context);
|
||||
switch_core_session_execute_exten(session, argv[0], argv[1], argv[2]);
|
||||
} else {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Usage: %s\n", EXE_SYNTAX);
|
||||
}
|
||||
|
@ -92,28 +85,16 @@ SWITCH_STANDARD_APP(intercept_function)
|
|||
switch_ivr_intercept_session(session, data);
|
||||
}
|
||||
|
||||
|
||||
#define eavesdrop_SYNTAX "<uuid>"
|
||||
SWITCH_STANDARD_APP(eavesdrop_function)
|
||||
{
|
||||
char *argv[4];
|
||||
int argc;
|
||||
char *lbuf = NULL;
|
||||
char *uuid;
|
||||
|
||||
if (data && (lbuf = switch_core_session_strdup(session, data))
|
||||
&& (argc = switch_separate_string(lbuf, ' ', argv, (sizeof(argv) / sizeof(argv[0]))))) {
|
||||
uuid = argv[0];
|
||||
|
||||
switch_ivr_eavesdrop_session(session, uuid, ED_DTMF);
|
||||
|
||||
} else {
|
||||
if (switch_strlen_zero(data)) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Usage: %s\n", eavesdrop_SYNTAX);
|
||||
} else {
|
||||
switch_ivr_eavesdrop_session(session, data, ED_DTMF);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#define SET_USER_SYNTAX "<user>@<domain>"
|
||||
SWITCH_STANDARD_APP(set_user_function)
|
||||
{
|
||||
|
@ -122,7 +103,7 @@ SWITCH_STANDARD_APP(set_user_function)
|
|||
switch_channel_t *channel;
|
||||
|
||||
channel = switch_core_session_get_channel(session);
|
||||
assert(channel != NULL);
|
||||
switch_assert(channel != NULL);
|
||||
|
||||
if (switch_strlen_zero(data)) {
|
||||
goto error;
|
||||
|
@ -165,20 +146,16 @@ SWITCH_STANDARD_APP(set_user_function)
|
|||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No user@domain specified.\n");
|
||||
|
||||
done:
|
||||
|
||||
if (xml) {
|
||||
switch_xml_free(xml);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
SWITCH_STANDARD_APP(ring_ready_function)
|
||||
{
|
||||
switch_channel_t *channel;
|
||||
channel = switch_core_session_get_channel(session);
|
||||
assert(channel != NULL);
|
||||
switch_assert(channel != NULL);
|
||||
switch_channel_ring_ready(channel);
|
||||
}
|
||||
|
||||
|
@ -186,7 +163,7 @@ SWITCH_STANDARD_APP(break_function)
|
|||
{
|
||||
switch_channel_t *channel;
|
||||
channel = switch_core_session_get_channel(session);
|
||||
assert(channel != NULL);
|
||||
switch_assert(channel != NULL);
|
||||
switch_channel_set_flag(channel, CF_BREAK);
|
||||
}
|
||||
|
||||
|
@ -198,11 +175,10 @@ SWITCH_STANDARD_APP(queue_dtmf_function)
|
|||
|
||||
if (!switch_strlen_zero(data)) {
|
||||
channel = switch_core_session_get_channel(session);
|
||||
assert(channel != NULL);
|
||||
switch_assert(channel != NULL);
|
||||
for (p = (char *)data; p && *p; p++) {
|
||||
dtmf.digit = *p;
|
||||
switch_channel_queue_dtmf(channel, &dtmf);
|
||||
p++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -213,7 +189,7 @@ SWITCH_STANDARD_APP(transfer_function)
|
|||
char *argv[4] = { 0 };
|
||||
char *mydata;
|
||||
|
||||
if (data && (mydata = switch_core_session_strdup(session, data))) {
|
||||
if (!switch_strlen_zero(data) && (mydata = switch_core_session_strdup(session, data))) {
|
||||
if ((argc = switch_separate_string(mydata, ' ', argv, (sizeof(argv) / sizeof(argv[0])))) >= 1) {
|
||||
switch_ivr_session_transfer(session, argv[0], argv[1], argv[2]);
|
||||
} else {
|
||||
|
@ -228,7 +204,7 @@ SWITCH_STANDARD_APP(sched_transfer_function)
|
|||
char *argv[4] = { 0 };
|
||||
char *mydata;
|
||||
|
||||
if (data && (mydata = switch_core_session_strdup(session, data))) {
|
||||
if (!switch_strlen_zero(data) && (mydata = switch_core_session_strdup(session, data))) {
|
||||
if ((argc = switch_separate_string(mydata, ' ', argv, (sizeof(argv) / sizeof(argv[0])))) >= 2) {
|
||||
time_t when;
|
||||
|
||||
|
@ -251,7 +227,7 @@ SWITCH_STANDARD_APP(sched_hangup_function)
|
|||
char *argv[5] = { 0 };
|
||||
char *mydata;
|
||||
|
||||
if (data && (mydata = switch_core_session_strdup(session, data))) {
|
||||
if (!switch_strlen_zero(data) && (mydata = switch_core_session_strdup(session, data))) {
|
||||
if ((argc = switch_separate_string(mydata, ' ', argv, (sizeof(argv) / sizeof(argv[0])))) >= 1) {
|
||||
time_t when;
|
||||
switch_call_cause_t cause = SWITCH_CAUSE_ALLOTTED_TIMEOUT;
|
||||
|
@ -278,14 +254,13 @@ SWITCH_STANDARD_APP(sched_hangup_function)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
SWITCH_STANDARD_APP(sched_broadcast_function)
|
||||
{
|
||||
int argc;
|
||||
char *argv[6] = { 0 };
|
||||
char *mydata;
|
||||
|
||||
if (data && (mydata = switch_core_session_strdup(session, data))) {
|
||||
if (!switch_strlen_zero(data) && (mydata = switch_core_session_strdup(session, data))) {
|
||||
if ((argc = switch_separate_string(mydata, ' ', argv, (sizeof(argv) / sizeof(argv[0])))) >= 2) {
|
||||
time_t when;
|
||||
switch_media_flag_t flags = SMF_NONE;
|
||||
|
@ -317,7 +292,6 @@ SWITCH_STANDARD_APP(sched_broadcast_function)
|
|||
|
||||
SWITCH_STANDARD_APP(sleep_function)
|
||||
{
|
||||
|
||||
if (switch_strlen_zero(data)) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No timeout specified.\n");
|
||||
} else {
|
||||
|
@ -337,7 +311,6 @@ SWITCH_STANDARD_APP(delay_function)
|
|||
}
|
||||
|
||||
switch_ivr_delay_echo(session, len);
|
||||
|
||||
}
|
||||
|
||||
SWITCH_STANDARD_APP(eval_function)
|
||||
|
@ -351,9 +324,9 @@ SWITCH_STANDARD_APP(phrase_function)
|
|||
char *mydata = NULL;
|
||||
|
||||
channel = switch_core_session_get_channel(session);
|
||||
assert(channel != NULL);
|
||||
switch_assert(channel != NULL);
|
||||
|
||||
if ((mydata = switch_core_session_strdup(session, data))) {
|
||||
if (!switch_strlen_zero(data) && (mydata = switch_core_session_strdup(session, data))) {
|
||||
const char *lang;
|
||||
char *macro = mydata;
|
||||
char *mdata = NULL;
|
||||
|
@ -364,23 +337,21 @@ SWITCH_STANDARD_APP(phrase_function)
|
|||
|
||||
lang = switch_channel_get_variable(channel, "language");
|
||||
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Execute %s(%s) lang %s\n", macro, mdata, lang);
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Execute %s(%s) lang %s\n", macro, switch_str_nil(mdata), switch_str_nil(lang));
|
||||
switch_ivr_phrase_macro(session, macro, mdata, lang, NULL);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
SWITCH_STANDARD_APP(hangup_function)
|
||||
{
|
||||
switch_channel_t *channel;
|
||||
switch_call_cause_t cause = SWITCH_CAUSE_NORMAL_CLEARING;
|
||||
|
||||
channel = switch_core_session_get_channel(session);
|
||||
assert(channel != NULL);
|
||||
switch_assert(channel != NULL);
|
||||
|
||||
if (!switch_strlen_zero((char *) data)) {
|
||||
cause = switch_channel_str2cause((char *) data);
|
||||
if (!switch_strlen_zero(data)) {
|
||||
cause = switch_channel_str2cause(data);
|
||||
}
|
||||
|
||||
switch_channel_hangup(channel, cause);
|
||||
|
@ -389,18 +360,18 @@ SWITCH_STANDARD_APP(hangup_function)
|
|||
SWITCH_STANDARD_APP(answer_function)
|
||||
{
|
||||
switch_channel_t *channel;
|
||||
channel = switch_core_session_get_channel(session);
|
||||
|
||||
assert(channel != NULL);
|
||||
channel = switch_core_session_get_channel(session);
|
||||
switch_assert(channel != NULL);
|
||||
switch_channel_answer(channel);
|
||||
}
|
||||
|
||||
SWITCH_STANDARD_APP(pre_answer_function)
|
||||
{
|
||||
switch_channel_t *channel;
|
||||
channel = switch_core_session_get_channel(session);
|
||||
|
||||
assert(channel != NULL);
|
||||
channel = switch_core_session_get_channel(session);
|
||||
switch_assert(channel != NULL);
|
||||
switch_channel_pre_answer(channel);
|
||||
}
|
||||
|
||||
|
@ -413,7 +384,6 @@ SWITCH_STANDARD_APP(redirect_function)
|
|||
msg.string_arg = data;
|
||||
msg.message_id = SWITCH_MESSAGE_INDICATE_REDIRECT;
|
||||
switch_core_session_receive_message(session, &msg);
|
||||
|
||||
}
|
||||
|
||||
SWITCH_STANDARD_APP(respond_function)
|
||||
|
@ -425,19 +395,17 @@ SWITCH_STANDARD_APP(respond_function)
|
|||
msg.string_arg = data;
|
||||
msg.message_id = SWITCH_MESSAGE_INDICATE_RESPOND;
|
||||
switch_core_session_receive_message(session, &msg);
|
||||
|
||||
}
|
||||
|
||||
SWITCH_STANDARD_APP(deflect_function)
|
||||
{
|
||||
switch_core_session_message_t msg = { 0 };
|
||||
|
||||
/* Tell the channel to respond the call */
|
||||
/* Tell the channel to deflect the call */
|
||||
msg.from = __FILE__;
|
||||
msg.string_arg = data;
|
||||
msg.message_id = SWITCH_MESSAGE_INDICATE_DEFLECT;
|
||||
switch_core_session_receive_message(session, &msg);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -447,7 +415,7 @@ SWITCH_STANDARD_APP(set_function)
|
|||
char *var, *val = NULL;
|
||||
|
||||
channel = switch_core_session_get_channel(session);
|
||||
assert(channel != NULL);
|
||||
switch_assert(channel != NULL);
|
||||
|
||||
if (switch_strlen_zero(data)) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No variable name specified.\n");
|
||||
|
@ -491,7 +459,6 @@ SWITCH_STANDARD_APP(set_global_function)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
SWITCH_STANDARD_APP(set_profile_var_function)
|
||||
{
|
||||
switch_channel_t *channel;
|
||||
|
@ -499,7 +466,7 @@ SWITCH_STANDARD_APP(set_profile_var_function)
|
|||
char *name, *val = NULL;
|
||||
|
||||
channel = switch_core_session_get_channel(session);
|
||||
assert(channel != NULL);
|
||||
switch_assert(channel != NULL);
|
||||
|
||||
caller_profile = switch_channel_get_caller_profile(channel);
|
||||
|
||||
|
@ -572,7 +539,6 @@ SWITCH_STANDARD_APP(set_profile_var_function)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
SWITCH_STANDARD_APP(export_function)
|
||||
{
|
||||
switch_channel_t *channel;
|
||||
|
@ -581,7 +547,7 @@ SWITCH_STANDARD_APP(export_function)
|
|||
int local = 1;
|
||||
|
||||
channel = switch_core_session_get_channel(session);
|
||||
assert(channel != NULL);
|
||||
switch_assert(channel != NULL);
|
||||
|
||||
if (switch_strlen_zero(data)) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No variable name specified.\n");
|
||||
|
@ -627,7 +593,7 @@ SWITCH_STANDARD_APP(unset_function)
|
|||
switch_channel_t *channel;
|
||||
|
||||
channel = switch_core_session_get_channel(session);
|
||||
assert(channel != NULL);
|
||||
switch_assert(channel != NULL);
|
||||
|
||||
if (switch_strlen_zero(data)) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No variable name specified.\n");
|
||||
|
@ -643,7 +609,7 @@ SWITCH_STANDARD_APP(log_function)
|
|||
char *level, *log_str;
|
||||
|
||||
channel = switch_core_session_get_channel(session);
|
||||
assert(channel != NULL);
|
||||
switch_assert(channel != NULL);
|
||||
|
||||
if (data && (level = strdup(data))) {
|
||||
switch_log_level_t ltype = SWITCH_LOG_DEBUG;
|
||||
|
@ -663,7 +629,6 @@ SWITCH_STANDARD_APP(log_function)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
SWITCH_STANDARD_APP(info_function)
|
||||
{
|
||||
switch_channel_t *channel;
|
||||
|
@ -671,7 +636,7 @@ SWITCH_STANDARD_APP(info_function)
|
|||
char *buf;
|
||||
|
||||
channel = switch_core_session_get_channel(session);
|
||||
assert(channel != NULL);
|
||||
switch_assert(channel != NULL);
|
||||
|
||||
if (switch_event_create(&event, SWITCH_EVENT_MESSAGE) == SWITCH_STATUS_SUCCESS) {
|
||||
switch_channel_event_set_data(channel, event);
|
||||
|
@ -681,25 +646,22 @@ SWITCH_STANDARD_APP(info_function)
|
|||
switch_event_destroy(&event);
|
||||
free(buf);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
SWITCH_STANDARD_APP(event_function)
|
||||
{
|
||||
switch_channel_t *channel;
|
||||
switch_event_t *event;
|
||||
char *argv[25];
|
||||
char *argv[25] = { 0 };
|
||||
int argc = 0;
|
||||
char *lbuf;
|
||||
|
||||
channel = switch_core_session_get_channel(session);
|
||||
assert(channel != NULL);
|
||||
switch_assert(channel != NULL);
|
||||
|
||||
if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_APPLICATION) == SWITCH_STATUS_SUCCESS) {
|
||||
switch_channel_event_set_data(channel, event);
|
||||
if (data && (lbuf = switch_core_session_strdup(session, data))
|
||||
if (!switch_strlen_zero(data) && (lbuf = switch_core_session_strdup(session, data))
|
||||
&& (argc = switch_separate_string(lbuf, ',', argv, (sizeof(argv) / sizeof(argv[0]))))) {
|
||||
int x = 0;
|
||||
|
||||
|
@ -721,59 +683,52 @@ SWITCH_STANDARD_APP(event_function)
|
|||
switch_event_add_header(event, SWITCH_STACK_BOTTOM, var, "%s", val);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
switch_event_fire(&event);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
SWITCH_STANDARD_APP(privacy_function)
|
||||
{
|
||||
switch_channel_t *channel;
|
||||
switch_caller_profile_t *caller_profile;
|
||||
char *arg;
|
||||
|
||||
channel = switch_core_session_get_channel(session);
|
||||
assert(channel != NULL);
|
||||
switch_assert(channel != NULL);
|
||||
|
||||
caller_profile = switch_channel_get_caller_profile(channel);
|
||||
|
||||
if (switch_strlen_zero(data)) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No privacy mode specified.\n");
|
||||
} else {
|
||||
arg = switch_core_session_strdup(session, data);
|
||||
|
||||
switch_set_flag(caller_profile, SWITCH_CPF_SCREEN);
|
||||
|
||||
if (!strcasecmp(arg, "no")) {
|
||||
if (!strcasecmp(data, "no")) {
|
||||
switch_clear_flag(caller_profile, SWITCH_CPF_HIDE_NAME);
|
||||
switch_clear_flag(caller_profile, SWITCH_CPF_HIDE_NUMBER);
|
||||
} else if (!strcasecmp(arg, "yes")) {
|
||||
} else if (!strcasecmp(data, "yes")) {
|
||||
switch_set_flag(caller_profile, SWITCH_CPF_HIDE_NAME | SWITCH_CPF_HIDE_NUMBER);
|
||||
} else if (!strcasecmp(arg, "full")) {
|
||||
} else if (!strcasecmp(data, "full")) {
|
||||
switch_set_flag(caller_profile, SWITCH_CPF_HIDE_NAME | SWITCH_CPF_HIDE_NUMBER);
|
||||
} else if (!strcasecmp(arg, "name")) {
|
||||
} else if (!strcasecmp(data, "name")) {
|
||||
switch_set_flag(caller_profile, SWITCH_CPF_HIDE_NAME);
|
||||
} else if (!strcasecmp(arg, "number")) {
|
||||
} else if (!strcasecmp(data, "number")) {
|
||||
switch_set_flag(caller_profile, SWITCH_CPF_HIDE_NUMBER);
|
||||
} else {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "INVALID privacy mode specified. Use a valid mode [no|yes|name|full|number].\n");
|
||||
}
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Set Privacy to %s [%d]\n", arg, caller_profile->flags);
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Set Privacy to %s [%d]\n", data, caller_profile->flags);
|
||||
}
|
||||
}
|
||||
|
||||
SWITCH_STANDARD_APP(strftime_function)
|
||||
{
|
||||
char *argv[2];
|
||||
char *argv[2] = { 0 };
|
||||
int argc;
|
||||
char *lbuf;
|
||||
|
||||
if (data && (lbuf = switch_core_session_strdup(session, data))
|
||||
if (!switch_strlen_zero(data) && (lbuf = switch_core_session_strdup(session, data))
|
||||
&& (argc = switch_separate_string(lbuf, '=', argv, (sizeof(argv) / sizeof(argv[0])))) > 1) {
|
||||
switch_size_t retsize;
|
||||
switch_time_exp_t tm;
|
||||
|
@ -790,7 +745,6 @@ SWITCH_STANDARD_APP(strftime_function)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
SWITCH_STANDARD_API(strepoch_api_function)
|
||||
{
|
||||
switch_time_t out;
|
||||
|
@ -808,7 +762,6 @@ SWITCH_STANDARD_API(strepoch_api_function)
|
|||
|
||||
SWITCH_STANDARD_API(strftime_api_function)
|
||||
{
|
||||
|
||||
switch_size_t retsize;
|
||||
switch_time_exp_t tm;
|
||||
char date[80] = "";
|
||||
|
@ -834,7 +787,7 @@ SWITCH_STANDARD_API(presence_api_function)
|
|||
int argc = 0;
|
||||
switch_event_types_t type = SWITCH_EVENT_PRESENCE_IN;
|
||||
|
||||
if (cmd && (lbuf = strdup(cmd))
|
||||
if (!switch_strlen_zero(cmd) && (lbuf = strdup(cmd))
|
||||
&& (argc = switch_separate_string(lbuf, '|', argv, (sizeof(argv) / sizeof(argv[0])))) > 0) {
|
||||
if (!strcasecmp(argv[0], "out")) {
|
||||
type = SWITCH_EVENT_PRESENCE_OUT;
|
||||
|
@ -859,17 +812,15 @@ SWITCH_STANDARD_API(presence_api_function)
|
|||
} else {
|
||||
stream->write_function(stream, "Invalid");
|
||||
}
|
||||
|
||||
return SWITCH_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
SWITCH_STANDARD_API(chat_api_function)
|
||||
{
|
||||
char *lbuf, *argv[4];
|
||||
int argc = 0;
|
||||
|
||||
if (cmd && (lbuf = strdup(cmd))
|
||||
if (!switch_strlen_zero(cmd) && (lbuf = strdup(cmd))
|
||||
&& (argc = switch_separate_string(lbuf, '|', argv, (sizeof(argv) / sizeof(argv[0])))) == 4) {
|
||||
switch_chat_interface_t *ci;
|
||||
|
||||
|
@ -906,7 +857,7 @@ SWITCH_STANDARD_APP(ivr_application_function)
|
|||
switch_channel_t *channel = switch_core_session_get_channel(session);
|
||||
char *params,*chanvars;
|
||||
|
||||
if (channel && data && (params = switch_core_session_strdup(session, data))) {
|
||||
if (channel && !switch_strlen_zero(data) && (params = switch_core_session_strdup(session, data))) {
|
||||
switch_xml_t cxml = NULL, cfg = NULL, xml_menus = NULL, xml_menu = NULL;
|
||||
|
||||
// Open the config from the xml registry
|
||||
|
@ -946,13 +897,11 @@ SWITCH_STANDARD_APP(ivr_application_function)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
SWITCH_STANDARD_APP(dtmf_session_function)
|
||||
{
|
||||
switch_ivr_inband_dtmf_session(session);
|
||||
}
|
||||
|
||||
|
||||
SWITCH_STANDARD_APP(stop_dtmf_session_function)
|
||||
{
|
||||
switch_ivr_stop_inband_dtmf_session(session);
|
||||
|
@ -966,12 +915,10 @@ SWITCH_STANDARD_APP(dtmf_session_generate_function)
|
|||
if (!strcasecmp(data, "write")) {
|
||||
do_read = SWITCH_FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
switch_ivr_inband_dtmf_generate_session(session, do_read);
|
||||
}
|
||||
|
||||
|
||||
SWITCH_STANDARD_APP(stop_dtmf_session_generate_function)
|
||||
{
|
||||
switch_ivr_stop_inband_dtmf_generate_session(session);
|
||||
|
@ -997,10 +944,16 @@ SWITCH_STANDARD_APP(tone_detect_session_function)
|
|||
char *mydata = NULL;
|
||||
time_t to = 0;
|
||||
|
||||
mydata = switch_core_session_strdup(session, data);
|
||||
if (switch_strlen_zero(data) || !(mydata = switch_core_session_strdup(session, data))) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "INVALID ARGS!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if ((argc = switch_separate_string(mydata, ' ', argv, sizeof(argv) / sizeof(argv[0]))) < 2) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "INVALID ARGS!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (argv[3]) {
|
||||
uint32_t mto;
|
||||
if (*argv[3] == '+') {
|
||||
|
@ -1036,13 +989,11 @@ SWITCH_STANDARD_APP(echo_function)
|
|||
SWITCH_STANDARD_APP(park_function)
|
||||
{
|
||||
switch_ivr_park(session, NULL);
|
||||
|
||||
}
|
||||
|
||||
SWITCH_STANDARD_APP(park_state_function)
|
||||
{
|
||||
switch_ivr_park_session(session);
|
||||
|
||||
}
|
||||
|
||||
/********************************************************************************/
|
||||
|
@ -1055,8 +1006,6 @@ SWITCH_STANDARD_APP(park_state_function)
|
|||
*/
|
||||
static switch_status_t on_dtmf(switch_core_session_t *session, void *input, switch_input_type_t itype, void *buf, unsigned int buflen)
|
||||
{
|
||||
|
||||
|
||||
switch (itype) {
|
||||
case SWITCH_INPUT_TYPE_DTMF:
|
||||
{
|
||||
|
@ -1065,7 +1014,7 @@ static switch_status_t on_dtmf(switch_core_session_t *session, void *input, swit
|
|||
switch_channel_t *channel = switch_core_session_get_channel(session);
|
||||
const char *p;
|
||||
|
||||
assert(channel);
|
||||
switch_assert(channel);
|
||||
|
||||
if (!(terminators = switch_channel_get_variable(channel, SWITCH_PLAYBACK_TERMINATORS_VARIABLE))) {
|
||||
terminators = "*";
|
||||
|
@ -1096,7 +1045,8 @@ SWITCH_STANDARD_APP(clear_speech_cache_function)
|
|||
|
||||
SWITCH_STANDARD_APP(speak_function)
|
||||
{
|
||||
switch_channel_t *channel;
|
||||
switch_channel_t *channel = switch_core_session_get_channel(session);
|
||||
switch_codec_t *codec = switch_core_session_get_read_codec(session);
|
||||
char buf[10];
|
||||
char *argv[4] = { 0 };
|
||||
int argc;
|
||||
|
@ -1104,19 +1054,22 @@ SWITCH_STANDARD_APP(speak_function)
|
|||
const char *voice = NULL;
|
||||
char *text = NULL;
|
||||
char *mydata = NULL;
|
||||
switch_codec_t *codec;
|
||||
switch_input_args_t args = { 0 };
|
||||
|
||||
codec = switch_core_session_get_read_codec(session);
|
||||
assert(codec != NULL);
|
||||
switch_assert(codec != NULL);
|
||||
switch_assert(channel != NULL);
|
||||
|
||||
channel = switch_core_session_get_channel(session);
|
||||
assert(channel != NULL);
|
||||
if (switch_strlen_zero(data) || !(mydata = switch_core_session_strdup(session, data))) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid Params!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
mydata = switch_core_session_strdup(session, data);
|
||||
argc = switch_separate_string(mydata, '|', argv, sizeof(argv) / sizeof(argv[0]));
|
||||
|
||||
if (argc == 1) {
|
||||
if (argc == 0) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid Params!\n");
|
||||
return;
|
||||
} else if (argc == 1) {
|
||||
text = argv[0];
|
||||
} else if (argc == 2) {
|
||||
voice = argv[0];
|
||||
|
@ -1155,25 +1108,19 @@ SWITCH_STANDARD_APP(speak_function)
|
|||
args.buf = buf;
|
||||
args.buflen = sizeof(buf);
|
||||
switch_ivr_speak_text(session, engine, voice, text, &args);
|
||||
|
||||
}
|
||||
|
||||
SWITCH_STANDARD_APP(playback_function)
|
||||
{
|
||||
switch_channel_t *channel;
|
||||
char *file_name = NULL;
|
||||
switch_channel_t *channel = switch_core_session_get_channel(session);
|
||||
switch_input_args_t args = { 0 };
|
||||
|
||||
file_name = switch_core_session_strdup(session, data);
|
||||
|
||||
channel = switch_core_session_get_channel(session);
|
||||
assert(channel != NULL);
|
||||
switch_assert(channel != NULL);
|
||||
|
||||
switch_channel_pre_answer(channel);
|
||||
|
||||
args.input_callback = on_dtmf;
|
||||
switch_ivr_play_file(session, NULL, file_name, &args);
|
||||
|
||||
switch_ivr_play_file(session, NULL, data, &args);
|
||||
}
|
||||
|
||||
SWITCH_STANDARD_APP(gentones_function)
|
||||
|
@ -1184,10 +1131,15 @@ SWITCH_STANDARD_APP(gentones_function)
|
|||
char *l;
|
||||
int32_t loops = 0;
|
||||
|
||||
if (switch_strlen_zero(data) || !(tone_script = switch_core_session_strdup(session, data))) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid Params!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
tone_script = switch_core_session_strdup(session, data);
|
||||
|
||||
channel = switch_core_session_get_channel(session);
|
||||
assert(channel != NULL);
|
||||
switch_assert(channel != NULL);
|
||||
|
||||
switch_channel_pre_answer(channel);
|
||||
|
||||
|
@ -1202,23 +1154,18 @@ SWITCH_STANDARD_APP(gentones_function)
|
|||
|
||||
args.input_callback = on_dtmf;
|
||||
switch_ivr_gentones(session, tone_script, loops, &args);
|
||||
|
||||
}
|
||||
|
||||
SWITCH_STANDARD_APP(displace_session_function)
|
||||
{
|
||||
switch_channel_t *channel;
|
||||
char *path = NULL;
|
||||
uint32_t limit = 0;
|
||||
char *argv[6];
|
||||
char *argv[6] = { 0 };
|
||||
int x, argc;
|
||||
char *lbuf = NULL;
|
||||
char *flags = NULL;
|
||||
|
||||
channel = switch_core_session_get_channel(session);
|
||||
assert(channel != NULL);
|
||||
|
||||
if (data && (lbuf = switch_core_session_strdup(session, data))
|
||||
if (!switch_strlen_zero(data) && (lbuf = switch_core_session_strdup(session, data))
|
||||
&& (argc = switch_separate_string(lbuf, ' ', argv, (sizeof(argv) / sizeof(argv[0]))))) {
|
||||
path = argv[0];
|
||||
for(x = 1; x < argc; x++) {
|
||||
|
@ -1232,20 +1179,14 @@ SWITCH_STANDARD_APP(displace_session_function)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
SWITCH_STANDARD_APP(stop_displace_session_function)
|
||||
{
|
||||
switch_channel_t *channel;
|
||||
channel = switch_core_session_get_channel(session);
|
||||
assert(channel != NULL);
|
||||
|
||||
switch_ivr_stop_displace_session(session, data);
|
||||
}
|
||||
|
||||
|
||||
SWITCH_STANDARD_APP(record_function)
|
||||
{
|
||||
switch_channel_t *channel;
|
||||
switch_channel_t *channel = switch_core_session_get_channel(session);
|
||||
switch_status_t status;
|
||||
uint32_t limit = 0;
|
||||
char *path;
|
||||
|
@ -1257,10 +1198,9 @@ SWITCH_STANDARD_APP(record_function)
|
|||
const char *tmp;
|
||||
int rate;
|
||||
|
||||
channel = switch_core_session_get_channel(session);
|
||||
switch_assert(channel != NULL);
|
||||
|
||||
if (data && (mydata = switch_core_session_strdup(session, data))) {
|
||||
if (!switch_strlen_zero(data) && (mydata = switch_core_session_strdup(session, data))) {
|
||||
argc = switch_separate_string(mydata, ' ', argv, (sizeof(argv) / sizeof(argv[0])));
|
||||
} else {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No file specified.\n");
|
||||
|
@ -1281,7 +1221,6 @@ SWITCH_STANDARD_APP(record_function)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (argv[2]) {
|
||||
fh.thresh = atoi(argv[2]);
|
||||
|
@ -1312,15 +1251,13 @@ SWITCH_STANDARD_APP(record_function)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
SWITCH_STANDARD_APP(record_session_function)
|
||||
{
|
||||
switch_channel_t *channel;
|
||||
switch_channel_t *channel = switch_core_session_get_channel(session);
|
||||
char *p, *path = NULL;
|
||||
uint32_t limit = 0;
|
||||
|
||||
channel = switch_core_session_get_channel(session);
|
||||
assert(channel != NULL);
|
||||
switch_assert(channel != NULL);
|
||||
|
||||
path = switch_core_session_strdup(session, data);
|
||||
if ((p = strchr(path, '+'))) {
|
||||
|
@ -1332,17 +1269,11 @@ SWITCH_STANDARD_APP(record_session_function)
|
|||
*p++ = '\0';
|
||||
limit = atoi(p);
|
||||
}
|
||||
|
||||
switch_ivr_record_session(session, path, limit, NULL);
|
||||
}
|
||||
|
||||
|
||||
SWITCH_STANDARD_APP(stop_record_session_function)
|
||||
{
|
||||
switch_channel_t *channel;
|
||||
channel = switch_core_session_get_channel(session);
|
||||
assert(channel != NULL);
|
||||
|
||||
switch_ivr_stop_record_session(session, data);
|
||||
}
|
||||
|
||||
|
@ -1352,20 +1283,19 @@ SWITCH_STANDARD_APP(stop_record_session_function)
|
|||
|
||||
SWITCH_STANDARD_APP(audio_bridge_function)
|
||||
{
|
||||
switch_channel_t *caller_channel;
|
||||
switch_channel_t *caller_channel = switch_core_session_get_channel(session);
|
||||
switch_core_session_t *peer_session = NULL;
|
||||
unsigned int timelimit = 60;
|
||||
const char *var, *continue_on_fail = NULL;
|
||||
uint8_t no_media_bridge = 0;
|
||||
switch_call_cause_t cause = SWITCH_CAUSE_NORMAL_CLEARING;
|
||||
|
||||
assert(caller_channel != NULL);
|
||||
|
||||
if (switch_strlen_zero(data)) {
|
||||
return;
|
||||
}
|
||||
|
||||
caller_channel = switch_core_session_get_channel(session);
|
||||
assert(caller_channel != NULL);
|
||||
|
||||
if ((var = switch_channel_get_variable(caller_channel, "call_timeout"))) {
|
||||
timelimit = atoi(var);
|
||||
}
|
||||
|
@ -1453,8 +1383,6 @@ SWITCH_STANDARD_APP(audio_bridge_function)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* fake chan_user */
|
||||
switch_endpoint_interface_t *user_endpoint_interface;
|
||||
static switch_call_cause_t user_outgoing_channel(switch_core_session_t *session,
|
||||
|
@ -1479,6 +1407,10 @@ static switch_call_cause_t user_outgoing_channel(switch_core_session_t *session,
|
|||
unsigned int timelimit = 60;
|
||||
switch_channel_t *new_channel = NULL;
|
||||
|
||||
if (switch_strlen_zero(outbound_profile->destination_number)) {
|
||||
goto done;
|
||||
}
|
||||
|
||||
user = switch_core_session_strdup(session, outbound_profile->destination_number);
|
||||
|
||||
if (!(domain = strchr(user, '@'))) {
|
||||
|
@ -1501,7 +1433,6 @@ static switch_call_cause_t user_outgoing_channel(switch_core_session_t *session,
|
|||
dest = val;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1514,7 +1445,6 @@ static switch_call_cause_t user_outgoing_channel(switch_core_session_t *session,
|
|||
dest = val;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1551,7 +1481,6 @@ static switch_call_cause_t user_outgoing_channel(switch_core_session_t *session,
|
|||
cp->context = switch_core_strdup(cp->pool, context);
|
||||
}
|
||||
}
|
||||
|
||||
switch_core_session_rwunlock(*new_session);
|
||||
}
|
||||
|
||||
|
@ -1576,7 +1505,6 @@ static switch_call_cause_t user_outgoing_channel(switch_core_session_t *session,
|
|||
switch_channel_set_variable(new_channel, var, val);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (xml) {
|
||||
|
@ -1585,10 +1513,8 @@ static switch_call_cause_t user_outgoing_channel(switch_core_session_t *session,
|
|||
|
||||
|
||||
return cause;
|
||||
|
||||
}
|
||||
|
||||
|
||||
#define SPEAK_DESC "Speak text to a channel via the tts interface"
|
||||
#define DISPLACE_DESC "Displace audio from a file to the channels input"
|
||||
#define SESS_REC_DESC "Starts a background recording of the entire session"
|
||||
|
@ -1616,8 +1542,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_dptools_load)
|
|||
user_endpoint_interface->interface_name = "USER";
|
||||
user_endpoint_interface->io_routines = &user_io_routines;
|
||||
|
||||
|
||||
SWITCH_ADD_API(api_interface, "strepoch", "Convert a date string into epoch time", strepoch_api_function, "<string>");
|
||||
SWITCH_ADD_API(api_interface, "strepoch", "Convert a date string into epoch time", strepoch_api_function, "<string>");
|
||||
SWITCH_ADD_API(api_interface, "chat", "chat", chat_api_function, "<proto>|<from>|<to>|<message>");
|
||||
SWITCH_ADD_API(api_interface, "strftime", "strftime", strftime_api_function, "<format_string>");
|
||||
SWITCH_ADD_API(api_interface, "presence", "presence", presence_api_function, "<user> <rpid> <message>");
|
||||
|
|
Loading…
Reference in New Issue