static void api_hook(switch_core_session_t *session, const char *hook_var, int use_session) { if (!zstr(hook_var)) { switch_stream_handle_t stream = { 0 }; char *cmd = switch_core_session_strdup(session, hook_var); char *arg = NULL; char *expanded = NULL; if ((arg = strchr(cmd, ':')) && *(arg + 1) == ':') { *arg++ = '\0'; *arg++ = '\0'; } else { if ((arg = strchr(cmd, ' '))) { *arg++ = '\0'; } } SWITCH_STANDARD_STREAM(stream); switch_channel_get_variables(session->channel, &stream.param_event); switch_channel_event_set_data(session->channel, stream.param_event); expanded = switch_channel_expand_variables(session->channel, arg); switch_api_execute(cmd, expanded, use_session ? session : NULL, &stream); switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Hangup Command %s %s(%s):\n%s\n", use_session ? "with Session" : "with no Session", cmd, switch_str_nil(expanded), switch_str_nil((char *) stream.data) ); if (expanded != arg) { switch_safe_free(expanded); } switch_safe_free(stream.data); } }
static switch_status_t run_callback(switch_new_say_callback_t say_cb, char *tosay, switch_say_args_t *say_args, switch_core_session_t *session, char **rstr) { switch_say_file_handle_t *sh; switch_status_t status = SWITCH_STATUS_FALSE; switch_event_t *var_event = NULL; if (session) { switch_channel_t *channel = switch_core_session_get_channel(session); switch_channel_get_variables(channel, &var_event); } switch_say_file_handle_create(&sh, say_args->ext, &var_event); status = say_cb(sh, tosay, say_args); if ((*rstr = switch_say_file_handle_detach_path(sh))) { status = SWITCH_STATUS_SUCCESS; } switch_say_file_handle_destroy(&sh); return status; }
static switch_status_t run_callback(switch_new_say_callback_ru_t say_cb, char *tosay, switch_say_args_t *say_args, switch_core_session_t *session, char **rstr) { switch_say_file_handle_t *sh; switch_status_t status = SWITCH_STATUS_FALSE; switch_event_t *var_event = NULL; const char *cases=NULL; const char *gender=NULL; const char *currency=NULL; say_opt_t say_opt; say_opt.cases=0; say_opt.gender=0; say_opt.currency=0; if (session) { switch_channel_t *channel = switch_core_session_get_channel(session); switch_channel_get_variables(channel, &var_event); // проверяем не заданы ли канальные переменные род, падеж, валюта gender = switch_channel_get_variable(channel, "gender"); cases = switch_channel_get_variable(channel, "cases"); currency = switch_channel_get_variable(channel, "currency"); //switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "ru_say!!! %s %s %s !\n",gender, cases,currency); if (cases) { //switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "ru_say!!! %s!\n", cases); if ((strcmp(cases,"nominativus")==0) || (strcmp(cases,"именительный")==0)) { say_opt.cases=(cases_t)0; } if ((strcmp(cases,"genitivus")==0) || (strcmp(cases,"родительный")==0)) { say_opt.cases=(cases_t)1; } if ((strcmp(cases,"dativus")==0) || (strcmp(cases,"дательный")==0)) { say_opt.cases=(cases_t)2; } if ((strcmp(cases,"accusativus_a")==0) || (strcmp(cases,"винительный_о")==0)) { say_opt.cases=(cases_t)3; } if ((strcmp(cases,"accusativus_i")==0) || (strcmp(cases,"винительный_н")==0)) { say_opt.cases=(cases_t)4; } if ((strcmp(cases,"instrumentalis")==0) || (strcmp(cases,"творительный")==0)) { say_opt.cases=(cases_t)5; } if ((strcmp(cases,"prepositive")==0) || (strcmp(cases,"предложный")==0)) { say_opt.cases=(cases_t)6; } } if (gender) { //switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "ru_say!!! %s!\n", gender); if ((strcmp(gender,"male")==0) || (strcmp(gender,"мужской")==0)) { say_opt.gender=(say_gender_t)0; } if ((strcmp(gender,"it")==0) || (strcmp(gender,"средний")==0)) { say_opt.gender=(say_gender_t)1; } if ((strcmp(gender,"female")==0) || (strcmp(gender,"женский")==0)) { say_opt.gender=(say_gender_t)2; } if ((strcmp(gender,"plural")==0) || (strcmp(gender,"множественное")==0)) { say_opt.gender=(say_gender_t)3; } if ((strcmp(gender,"male_h")==0) || (strcmp(gender,"мужской_порядковый")==0)) { say_opt.gender=(say_gender_t)4; } if ((strcmp(gender,"it_h")==0) || (strcmp(gender,"средний_порядковый")==0)) { say_opt.gender=(say_gender_t)5; } if ((strcmp(gender,"female_h")==0) || (strcmp(gender,"женский_порядковый")==0)) { say_opt.gender=(say_gender_t)6; } if ((strcmp(gender,"plural_h")==0) || (strcmp(gender,"множественное_порядковый")==0)) { say_opt.gender=(say_gender_t)7; } } if (currency) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "ru_say!!! %s!\n", currency); if ((strcmp(currency,"ruble")==0) || (strcmp(currency,"рубль")==0)) { say_opt.currency=(currency_t)0; // switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "rul!!! \n"); } if ((strcmp(currency,"dollar")==0) || (strcmp(currency,"доллар")==0)) { // switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "dollar!!! !\n"); say_opt.currency=(currency_t)1; } } switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "ru_say!!! %s! say_opt.gender=%d say_opt.cases=%d\n", tosay,say_opt.gender,say_opt.cases); } switch_say_file_handle_create(&sh, say_args->ext, &var_event); //запуск ru_ip,ru_say_money ... status = say_cb(sh, tosay, say_args,&say_opt); if ((*rstr = switch_say_file_handle_detach_path(sh))) { status = SWITCH_STATUS_SUCCESS; } switch_say_file_handle_destroy(&sh); return status; }