Esempio n. 1
0
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);
	}
}
Esempio n. 2
0
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;
}
Esempio n. 3
0
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;
}