diff --git a/apps/voicebox/Voicebox.cpp b/apps/voicebox/Voicebox.cpp index a3b4ca59..443b68c3 100644 --- a/apps/voicebox/Voicebox.cpp +++ b/apps/voicebox/Voicebox.cpp @@ -43,8 +43,6 @@ using std::vector; #define APP_NAME "voicebox" - - EXPORT_SESSION_FACTORY(VoiceboxFactory,APP_NAME); VoiceboxFactory::VoiceboxFactory(const string& _app_name) @@ -60,31 +58,33 @@ unsigned int VoiceboxFactory::save_key = 2; unsigned int VoiceboxFactory::delete_key = 3; unsigned int VoiceboxFactory::startover_key = 4; +string VoiceboxFactory::default_language = ""; + AmPromptCollection* VoiceboxFactory::getPrompts(const string& domain, - const string& language) { + const string& language, + PromptOptions& po) { map >::iterator d_it = prompts.find(domain); if (d_it != prompts.end()) { map::iterator l_it = d_it->second.find(language); - if (l_it != d_it->second.end()) + if (l_it != d_it->second.end()) { + + // get the optios to the dom/lang combination + po = PromptOptions(false, false); + map >::iterator d_oit = + prompt_options.find(domain); + if (d_oit != prompt_options.end()) { + map::iterator l_oit = d_oit->second.find(language); + if (l_oit != d_oit->second.end()) + po = l_oit->second; + } + return l_it->second; + } } return NULL; } -// todo: combine options and promptcollection into struct -PromptOptions VoiceboxFactory::getPromptOptions(const string& domain, - const string& language) { - map >::iterator d_it = - prompt_options.find(domain); - if (d_it != prompt_options.end()) { - map::iterator l_it = d_it->second.find(language); - if (l_it != d_it->second.end()) - return l_it->second; - } - return PromptOptions(false, false); -} - AmPromptCollection* VoiceboxFactory::loadPrompts(string prompt_base_path, string domain, string language, bool load_digits) { @@ -174,6 +174,11 @@ int VoiceboxFactory::onLoad() // get application specific global parameters configureModule(cfg); + default_language = cfg.getParameter("default_language"); + if (default_language.length()) { + DBG("set default language '%s'\n", default_language.c_str()); + } + vector domains = explode(cfg.getParameter("domains"), ";"); domains.push_back(""); // add default (empty) domain vector languages = explode(cfg.getParameter("languages"), ";"); @@ -283,21 +288,23 @@ AmSession* VoiceboxFactory::onInvite(const AmSipRequest& req) AmSession::Exception(500, APP_NAME ": parameters not found"); } - user = get_header_keyvalue(iptel_app_param,"User"); - pin = get_header_keyvalue(iptel_app_param,"PIN"); - domain = get_header_keyvalue(iptel_app_param,"Domain"); - language = get_header_keyvalue(iptel_app_param,"Language"); + user = get_header_keyvalue(iptel_app_param, "usr", "User"); + pin = get_header_keyvalue(iptel_app_param, "pin", "PIN"); + domain = get_header_keyvalue(iptel_app_param, "dom", "Domain"); + language = get_header_keyvalue(iptel_app_param,"lng", "Language"); // checks if (user.empty()) throw AmSession::Exception(500, APP_NAME ": user missing"); + + if (language.empty()) + language = default_language; - AmPromptCollection* pc = getPrompts(domain, language); + PromptOptions po(false, false); + AmPromptCollection* pc = getPrompts(domain, language, po); if (NULL == pc) throw AmSession::Exception(500, APP_NAME ": no menu for domain/language"); - PromptOptions po = getPromptOptions(domain, language); - return new VoiceboxDialog(user, domain, pin, pc, po); } diff --git a/apps/voicebox/Voicebox.h b/apps/voicebox/Voicebox.h index 3ba64544..25806aaa 100644 --- a/apps/voicebox/Voicebox.h +++ b/apps/voicebox/Voicebox.h @@ -47,8 +47,8 @@ class VoiceboxFactory map > prompts; map > prompt_options; - AmPromptCollection* getPrompts(const string& domain, const string& language); - PromptOptions getPromptOptions(const string& domain, const string& language); + AmPromptCollection* getPrompts(const string& domain, const string& language, + PromptOptions& po); AmPromptCollection* loadPrompts(string prompt_base_path, string domain, string language, bool load_digits); @@ -57,6 +57,7 @@ class VoiceboxFactory static unsigned int save_key; static unsigned int delete_key; static unsigned int startover_key; + static string default_language; public: diff --git a/apps/voicebox/etc/voicebox.conf b/apps/voicebox/etc/voicebox.conf index 158b5952..506347b2 100644 --- a/apps/voicebox/etc/voicebox.conf +++ b/apps/voicebox/etc/voicebox.conf @@ -26,3 +26,8 @@ domains=iptel.org # languages=english(digits=right); + +# +# default language (if not set in App-Params) +# +default_language=english \ No newline at end of file