git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@8058 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
Anthony Minessale 2008-04-08 17:40:46 +00:00
parent e43317f14c
commit 306ea2df6c
1 changed files with 17 additions and 1 deletions

View File

@ -56,6 +56,7 @@ struct switch_ivr_menu_action {
switch_ivr_action_t ivr_action;
char *arg;
char *bind;
int re;
struct switch_ivr_menu_action *next;
};
@ -190,6 +191,9 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_menu_bind_function(switch_ivr_menu_t
action->bind = switch_core_strdup(menu->pool, bind);
action->next = menu->actions;
action->arg = switch_core_strdup(menu->pool, arg);
if (*action->arg == '/') {
action->re = 1;
}
len = (uint32_t) strlen(action->bind) + 1;
if (len > menu->inlen) {
menu->inlen = len;
@ -311,7 +315,19 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_menu_execute(switch_core_session_t *s
if (!switch_strlen_zero(menu->buf)) {
for (ap = menu->actions; ap; ap = ap->next) {
if (!strcmp(menu->buf, ap->bind)) {
int ok = 0;
if (*ap->bind == '/') {
switch_regex_t *re = NULL;
int ovector[30];
ok = switch_regex_perform(menu->buf, ap->bind, &re, ovector, sizeof(ovector) / sizeof(ovector[0]));
switch_regex_safe_free(re);
} else {
ok = !strcmp(menu->buf, ap->bind);
}
if (ok) {
match++;
errs = 0;
if (ap->function) {