add an event to phrases to be used as possible variables in parsing
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@16885 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
parent
d2c6900240
commit
19e7c013d8
|
@ -790,8 +790,9 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_menu_stack_xml_add_custom(switch_ivr_
|
||||||
*/
|
*/
|
||||||
SWITCH_DECLARE(switch_status_t) switch_ivr_menu_stack_xml_init(switch_ivr_menu_xml_ctx_t ** xml_menu_ctx, switch_memory_pool_t *pool);
|
SWITCH_DECLARE(switch_status_t) switch_ivr_menu_stack_xml_init(switch_ivr_menu_xml_ctx_t ** xml_menu_ctx, switch_memory_pool_t *pool);
|
||||||
|
|
||||||
SWITCH_DECLARE(switch_status_t) switch_ivr_phrase_macro(switch_core_session_t *session, const char *macro_name, const char *data, const char *lang,
|
SWITCH_DECLARE(switch_status_t) switch_ivr_phrase_macro_event(switch_core_session_t *session, const char *macro_name, const char *data, switch_event_t *event, const char *lang,
|
||||||
switch_input_args_t *args);
|
switch_input_args_t *args);
|
||||||
|
#define switch_ivr_phrase_macro(session, macro_name, data, lang, args) switch_ivr_phrase_macro_event(session, macro_name, data, NULL, lang, args)
|
||||||
SWITCH_DECLARE(void) switch_ivr_delay_echo(switch_core_session_t *session, uint32_t delay_ms);
|
SWITCH_DECLARE(void) switch_ivr_delay_echo(switch_core_session_t *session, uint32_t delay_ms);
|
||||||
SWITCH_DECLARE(switch_status_t) switch_ivr_find_bridged_uuid(const char *uuid, char *b_uuid, switch_size_t blen);
|
SWITCH_DECLARE(switch_status_t) switch_ivr_find_bridged_uuid(const char *uuid, char *b_uuid, switch_size_t blen);
|
||||||
SWITCH_DECLARE(void) switch_ivr_intercept_session(switch_core_session_t *session, const char *uuid, switch_bool_t bleg);
|
SWITCH_DECLARE(void) switch_ivr_intercept_session(switch_core_session_t *session, const char *uuid, switch_bool_t bleg);
|
||||||
|
|
|
@ -90,7 +90,7 @@ SWITCH_DECLARE(switch_say_type_t) switch_ivr_get_say_type_by_name(const char *na
|
||||||
return (switch_say_type_t) x;
|
return (switch_say_type_t) x;
|
||||||
}
|
}
|
||||||
|
|
||||||
SWITCH_DECLARE(switch_status_t) switch_ivr_phrase_macro(switch_core_session_t *session, const char *macro_name, const char *data, const char *lang,
|
SWITCH_DECLARE(switch_status_t) switch_ivr_phrase_macro_event(switch_core_session_t *session, const char *macro_name, const char *data, switch_event_t *event, const char *lang,
|
||||||
switch_input_args_t *args)
|
switch_input_args_t *args)
|
||||||
{
|
{
|
||||||
switch_event_t *hint_data;
|
switch_event_t *hint_data;
|
||||||
|
@ -129,6 +129,9 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_phrase_macro(switch_core_session_t *s
|
||||||
switch_event_add_header_string(hint_data, SWITCH_STACK_BOTTOM, "lang", chan_lang);
|
switch_event_add_header_string(hint_data, SWITCH_STACK_BOTTOM, "lang", chan_lang);
|
||||||
if (data) {
|
if (data) {
|
||||||
switch_event_add_header_string(hint_data, SWITCH_STACK_BOTTOM, "data", data);
|
switch_event_add_header_string(hint_data, SWITCH_STACK_BOTTOM, "data", data);
|
||||||
|
if (event) {
|
||||||
|
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "data", data);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
data = "";
|
data = "";
|
||||||
}
|
}
|
||||||
|
@ -221,8 +224,27 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_phrase_macro(switch_core_session_t *s
|
||||||
}
|
}
|
||||||
|
|
||||||
while (input && !done) {
|
while (input && !done) {
|
||||||
|
char *field = (char *) switch_xml_attr(input, "field");
|
||||||
char *pattern = (char *) switch_xml_attr(input, "pattern");
|
char *pattern = (char *) switch_xml_attr(input, "pattern");
|
||||||
const char *do_break = switch_xml_attr_soft(input, "break_on_match");
|
const char *do_break = switch_xml_attr_soft(input, "break_on_match");
|
||||||
|
char *field_expanded = NULL;
|
||||||
|
char *field_expanded_alloc = NULL;
|
||||||
|
|
||||||
|
if (!field) {
|
||||||
|
field = (char *) data;
|
||||||
|
}
|
||||||
|
if (event) {
|
||||||
|
field_expanded_alloc = switch_event_expand_headers(event, field);
|
||||||
|
} else {
|
||||||
|
field_expanded_alloc = switch_channel_expand_variables(channel, field);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (field_expanded_alloc == field) {
|
||||||
|
field_expanded_alloc = NULL;
|
||||||
|
field_expanded = field;
|
||||||
|
} else {
|
||||||
|
field_expanded = field_expanded_alloc;
|
||||||
|
}
|
||||||
|
|
||||||
if (pattern) {
|
if (pattern) {
|
||||||
switch_regex_t *re = NULL;
|
switch_regex_t *re = NULL;
|
||||||
|
@ -235,7 +257,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_phrase_macro(switch_core_session_t *s
|
||||||
|
|
||||||
status = SWITCH_STATUS_SUCCESS;
|
status = SWITCH_STATUS_SUCCESS;
|
||||||
|
|
||||||
if ((proceed = switch_regex_perform(data, pattern, &re, ovector, sizeof(ovector) / sizeof(ovector[0])))) {
|
if ((proceed = switch_regex_perform(field_expanded, pattern, &re, ovector, sizeof(ovector) / sizeof(ovector[0])))) {
|
||||||
match = switch_xml_child(input, "match");
|
match = switch_xml_child(input, "match");
|
||||||
} else {
|
} else {
|
||||||
match = switch_xml_child(input, "nomatch");
|
match = switch_xml_child(input, "nomatch");
|
||||||
|
@ -256,13 +278,17 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_phrase_macro(switch_core_session_t *s
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
memset(substituted, 0, len);
|
memset(substituted, 0, len);
|
||||||
switch_perform_substitution(re, proceed, adata, data, substituted, len, ovector);
|
switch_perform_substitution(re, proceed, adata, field_expanded, substituted, len, ovector);
|
||||||
odata = substituted;
|
odata = substituted;
|
||||||
} else {
|
} else {
|
||||||
odata = adata;
|
odata = adata;
|
||||||
}
|
}
|
||||||
|
|
||||||
expanded = switch_channel_expand_variables(channel, odata);
|
if (event) {
|
||||||
|
expanded = switch_event_expand_headers(event, odata);
|
||||||
|
} else {
|
||||||
|
expanded = switch_channel_expand_variables(channel, odata);
|
||||||
|
}
|
||||||
|
|
||||||
if (expanded == odata) {
|
if (expanded == odata) {
|
||||||
expanded = NULL;
|
expanded = NULL;
|
||||||
|
@ -344,6 +370,8 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_phrase_macro(switch_core_session_t *s
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch_safe_free(field_expanded_alloc);
|
||||||
|
|
||||||
if (status != SWITCH_STATUS_SUCCESS) {
|
if (status != SWITCH_STATUS_SUCCESS) {
|
||||||
done = 1;
|
done = 1;
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue