diff --git a/src/mod/applications/mod_protovm/config.h b/src/mod/applications/mod_protovm/config.h
index b5beeeaca1..2429f2cb36 100644
--- a/src/mod/applications/mod_protovm/config.h
+++ b/src/mod/applications/mod_protovm/config.h
@@ -38,10 +38,10 @@ typedef struct vmivr_profile vmivr_profile_t;
struct vmivr_menu_profile {
const char *name;
- switch_event_t *event_keys_action;
+ switch_event_t *event_keys_action;
switch_event_t *event_keys_dtmf;
switch_event_t *event_keys_varname;
- switch_event_t *event_phrases;
+ switch_event_t *event_phrases;
};
typedef struct vmivr_menu_profile vmivr_menu_profile_t;
diff --git a/src/mod/applications/mod_protovm/menu.c b/src/mod/applications/mod_protovm/menu.c
index 3cd22a5884..ba4229d43d 100644
--- a/src/mod/applications/mod_protovm/menu.c
+++ b/src/mod/applications/mod_protovm/menu.c
@@ -337,7 +337,7 @@ void mtvm_menu_forward(switch_core_session_t *session, vmivr_profile_t *profile)
/* Initialize Menu Configs */
populate_profile_menu_event(profile, &sub_menu);
- id = mtvm_menu_get_input_set(session, profile, sub_menu, "X.", "#" /* TODO Conf terminate input key */);
+ id = mtvm_menu_get_input_set(session, profile, sub_menu, "X.");
if (id) {
const char *cmd = switch_core_session_sprintf(session, "%s %s %s %s %s %s %s%s%s", profile->api_profile, profile->domain, profile->id, profile->current_msg_uuid, profile->domain, id, prepend_filepath?" ":"", prepend_filepath?prepend_filepath:"" );
if (mt_api_execute(session, profile->api_msg_forward, cmd) == SWITCH_STATUS_SUCCESS) {
@@ -381,12 +381,16 @@ void mtvm_menu_set_password(switch_core_session_t *session, vmivr_profile_t *pro
char *password;
vmivr_menu_profile_t menu = { "std_set_password" };
- password = mtvm_menu_get_input_set(session, profile, menu, "XXX." /* TODO Conf Min 3 Digit */, "#" /* TODO Conf terminate input key */);
+ /* Initialize Menu Configs */
+ populate_profile_menu_event(profile, &menu);
+
+ password = mtvm_menu_get_input_set(session, profile, menu, "XXX." /* TODO Conf Min 3 Digit */);
/* TODO Add Prompts to tell if password was set and if it was not */
if (password) {
char *cmd = switch_core_session_sprintf(session, "%s %s %s %s", profile->api_profile, profile->domain, profile->id, password);
mt_api_execute(session, profile->api_pref_password_set, cmd);
+
}
free_profile_menu_event(&menu);
@@ -394,7 +398,7 @@ void mtvm_menu_set_password(switch_core_session_t *session, vmivr_profile_t *pro
void mtvm_menu_authenticate(switch_core_session_t *session, vmivr_profile_t *profile) {
switch_channel_t *channel = switch_core_session_get_channel(session);
- vmivr_menu_profile_t menu = { "std_authenticate" };
+ vmivr_menu_profile_t menu = { "std_authenticate" };
int retry;
const char *auth_var = NULL;
/* Initialize Menu Configs */
@@ -413,7 +417,7 @@ void mtvm_menu_authenticate(switch_core_session_t *session, vmivr_profile_t *pro
/* Initialize Menu Configs */
populate_profile_menu_event(profile, &sub_menu);
- id = mtvm_menu_get_input_set(session, profile, sub_menu, "X." /* TODO Conf Min 3 Digit */, "#" /* TODO Conf terminate input key */);
+ id = mtvm_menu_get_input_set(session, profile, sub_menu, "X." /* TODO Conf Min 3 Digit */);
free_profile_menu_event(&sub_menu);
}
if (!password) {
@@ -421,7 +425,7 @@ void mtvm_menu_authenticate(switch_core_session_t *session, vmivr_profile_t *pro
/* Initialize Menu Configs */
populate_profile_menu_event(profile, &sub_menu);
- password = mtvm_menu_get_input_set(session, profile, sub_menu, "X." /* TODO Conf Min 3 Digit */, "#" /* TODO Conf terminate input key */);
+ password = mtvm_menu_get_input_set(session, profile, sub_menu, "X." /* TODO Conf Min 3 Digit */);
free_profile_menu_event(&sub_menu);
}
cmd = switch_core_session_sprintf(session, "%s %s %s %s", profile->api_profile, profile->domain, id, password);
@@ -445,7 +449,7 @@ void mtvm_menu_select_greeting_slot(switch_core_session_t *session, vmivr_profil
/* Initialize Menu Configs */
populate_profile_menu_event(profile, &menu);
- result = mtvm_menu_get_input_set(session, profile, menu, "X", NULL);
+ result = mtvm_menu_get_input_set(session, profile, menu, "X");
if (result)
gnum = atoi(result);
@@ -471,7 +475,7 @@ void mtvm_menu_record_greeting_with_slot(switch_core_session_t *session, vmivr_p
/* Initialize Menu Configs */
populate_profile_menu_event(profile, &menu);
- result = mtvm_menu_get_input_set(session, profile, menu, "X", NULL);
+ result = mtvm_menu_get_input_set(session, profile, menu, "X");
if (result)
gnum = atoi(result);
@@ -557,10 +561,10 @@ void mtvm_menu_preference(switch_core_session_t *session, vmivr_profile_t *profi
free_profile_menu_event(&menu);
}
-char *mtvm_menu_get_input_set(switch_core_session_t *session, vmivr_profile_t *profile, vmivr_menu_profile_t menu, const char *input_mask, const char *terminate_key) {
+char *mtvm_menu_get_input_set(switch_core_session_t *session, vmivr_profile_t *profile, vmivr_menu_profile_t menu, const char *input_mask) {
char *result = NULL;
int retry;
-
+ const char *terminate_key = NULL;
switch_channel_t *channel = switch_core_session_get_channel(session);
if (!menu.event_keys_dtmf || !menu.event_phrases) {
@@ -568,6 +572,8 @@ char *mtvm_menu_get_input_set(switch_core_session_t *session, vmivr_profile_t *p
return result;
}
+ terminate_key = switch_event_get_header(menu.event_keys_action, "ivrengine:terminate_entry");
+
for (retry = MAX_ATTEMPT; switch_channel_ready(channel) && retry > 0; retry--) {
dtmf_ss_t loc;
char *dtmfa[16] = { 0 };
@@ -582,11 +588,12 @@ char *mtvm_menu_get_input_set(switch_core_session_t *session, vmivr_profile_t *p
/* Find the last entry and append this one to it */
for (i=0; dtmfa[i] && i < 16; i++){
}
- dtmfa[i] = (char *) input_mask;
+ dtmfa[i] = (char *) input_mask;
captureMenuInitialize(&loc, dtmfa);
- if (terminate_key)
- loc.terminate_key = terminate_key[0]; /* TODO Make this load from the configuration */
+ if (terminate_key) {
+ loc.terminate_key = terminate_key[0];
+ }
captureMenu(session, &loc, switch_event_get_header(menu.event_phrases, "instructions"), NULL, phrase_params, NULL, DEFAULT_IVR_TIMEOUT);
if (loc.result == RES_TIMEOUT) {
diff --git a/src/mod/applications/mod_protovm/menu.h b/src/mod/applications/mod_protovm/menu.h
index 0ef4e532e6..82fd993a8f 100644
--- a/src/mod/applications/mod_protovm/menu.h
+++ b/src/mod/applications/mod_protovm/menu.h
@@ -14,11 +14,11 @@ void mtvm_menu_preference(switch_core_session_t *session, vmivr_profile_t *profi
void mtvm_menu_forward(switch_core_session_t *session, vmivr_profile_t *profile);
switch_status_t mtvm_menu_record(switch_core_session_t *session, vmivr_profile_t *profile, vmivr_menu_profile_t menu, const char *file_name);
-char *mtvm_menu_get_input_set(switch_core_session_t *session, vmivr_profile_t *profile, vmivr_menu_profile_t menu, const char *input_mask, const char *terminate_key);
+char *mtvm_menu_get_input_set(switch_core_session_t *session, vmivr_profile_t *profile, vmivr_menu_profile_t menu, const char *input_mask);
struct vmivr_menu_function {
- const char *name;
+ const char *name;
void (*pt2Func)(switch_core_session_t *session, vmivr_profile_t *profile);
};
diff --git a/src/mod/applications/mod_protovm/protovm.conf.xml b/src/mod/applications/mod_protovm/protovm.conf.xml
index dc47f1e95c..c57e8f72b6 100644
--- a/src/mod/applications/mod_protovm/protovm.conf.xml
+++ b/src/mod/applications/mod_protovm/protovm.conf.xml
@@ -29,7 +29,7 @@
-
+
@@ -38,7 +38,7 @@
-
+
@@ -60,6 +60,7 @@
+
@@ -72,7 +73,7 @@
-
+
@@ -137,6 +138,7 @@
+
@@ -163,6 +165,7 @@
+