/** * Loads python script path and default script file from configuration file */ int IvrFactory::onLoad() { if(cfg.loadFile(add2path(AmConfig::ModConfigPath,1,MOD_NAME ".conf"))) return -1; // get application specific global parameters configureModule(cfg); //setScriptPath(cfg.getParameter("script_path")); string script_path = cfg.getParameter("script_path"); init_python_interpreter(script_path); DBG("** IVR compile time configuration:\n"); DBG("** built with PYTHON support.\n"); #ifdef IVR_WITH_TTS DBG("** Text-To-Speech enabled\n"); #else DBG("** Text-To-Speech disabled\n"); #endif DBG("** IVR run time configuration:\n"); DBG("** script path: \'%s\'\n", script_path.c_str()); regex_t reg; if(regcomp(®,PYFILE_REGEX,REG_EXTENDED)){ ERROR("while compiling regular expression\n"); return -1; } DIR* dir = opendir(script_path.c_str()); if(!dir){ regfree(®); ERROR("Ivr: script pre-loader (%s): %s\n", script_path.c_str(),strerror(errno)); return -1; } DBG("directory '%s' opened\n",script_path.c_str()); std::set<string> unique_entries; regmatch_t pmatch[2]; struct dirent* entry=0; while((entry = readdir(dir)) != NULL){ if(!regexec(®,entry->d_name,2,pmatch,0)){ string name(entry->d_name + pmatch[1].rm_so, pmatch[1].rm_eo - pmatch[1].rm_so); unique_entries.insert(name); } } closedir(dir); regfree(®); AmPlugIn* plugin = AmPlugIn::instance(); for(std::set<string>::iterator it = unique_entries.begin(); it != unique_entries.end(); it++) { if(loadScript(*it)){ bool res = plugin->registerFactory4App(*it,this); if(res) INFO("Application script registered: %s.\n", it->c_str()); } } if(cfg.hasParameter("enable_session_timer") && (cfg.getParameter("enable_session_timer") == string("yes")) ){ DBG("enabling session timers\n"); session_timer_f = AmPlugIn::instance()->getFactory4Seh("session_timer"); if(session_timer_f == NULL){ ERROR("Could not load the session_timer module: disabling session timers.\n"); } } start_deferred_threads(); return 0; // don't stop sems from starting up }
/** * Loads python script path and default script file from configuration file */ int PySemsFactory::onLoad() { user_timer_fact = AmPlugIn::instance()->getFactory4Di("user_timer"); if(!user_timer_fact){ ERROR("could not load user_timer from session_timer plug-in\n"); return -1; } AmConfigReader cfg; if(cfg.loadFile(add2path(AmConfig::ModConfigPath,1,MOD_NAME ".conf"))) return -1; // get application specific global parameters configureModule(cfg); string script_path = cfg.getParameter("script_path"); init_python_interpreter(script_path); #ifdef PY_SEMS_WITH_TTS DBG("** PY_SEMS Text-To-Speech enabled\n"); #else DBG("** PY_SEMS Text-To-Speech disabled\n"); #endif DBG("** PY_SEMS script path: \'%s\'\n", script_path.c_str()); regex_t reg; if(regcomp(®,PYFILE_REGEX,REG_EXTENDED)){ ERROR("while compiling regular expression\n"); return -1; } DIR* dir = opendir(script_path.c_str()); if(!dir){ regfree(®); ERROR("PySems: script pre-loader (%s): %s\n", script_path.c_str(),strerror(errno)); return -1; } DBG("directory '%s' opened\n",script_path.c_str()); set<string> unique_entries; regmatch_t pmatch[2]; struct dirent* entry=0; while((entry = readdir(dir)) != NULL){ if(!regexec(®,entry->d_name,2,pmatch,0)){ string name(entry->d_name + pmatch[1].rm_so, pmatch[1].rm_eo - pmatch[1].rm_so); unique_entries.insert(name); } } closedir(dir); regfree(®); AmPlugIn* plugin = AmPlugIn::instance(); for(set<string>::iterator it = unique_entries.begin(); it != unique_entries.end(); it++) { if(loadScript(*it)){ bool res = plugin->registerFactory4App(*it,this); if(res) INFO("Application script registered: %s.\n", it->c_str()); } } return 0; // don't stop sems from starting up }