apr_xml_doc* UmcFramework::LoadDocument() { apr_xml_parser* pParser = NULL; apr_xml_doc* pDoc = NULL; apr_file_t* pFD = NULL; apr_status_t rv; const char* pFilePath; pFilePath = apt_dir_layout_path_compose(m_pDirLayout,APT_LAYOUT_CONF_DIR,"umcscenarios.xml",m_pPool); if(!pFilePath) { apt_log(APT_LOG_MARK,APT_PRIO_WARNING,"Failed to Compose Config File Path"); return NULL; } apt_log(APT_LOG_MARK,APT_PRIO_NOTICE,"Open Config File [%s]",pFilePath); rv = apr_file_open(&pFD,pFilePath,APR_READ|APR_BINARY,0,m_pPool); if(rv != APR_SUCCESS) { apt_log(APT_LOG_MARK,APT_PRIO_WARNING,"Failed to Open Config File [%s]",pFilePath); return NULL; } rv = apr_xml_parse_file(m_pPool,&pParser,&pDoc,pFD,2000); if(rv != APR_SUCCESS) { apt_log(APT_LOG_MARK,APT_PRIO_WARNING,"Failed to Parse Config File [%s]",pFilePath); pDoc = NULL; } apr_file_close(pFD); return pDoc; }
bool UmcFramework::LoadScenarios() { apr_dir_t* pDir; apr_finfo_t finfo; apr_status_t rv; const char* pDirPath; pDirPath = apt_dir_layout_path_compose(m_pDirLayout,APT_LAYOUT_CONF_DIR,"umc-scenarios",m_pPool); if(!pDirPath) { apt_log(APT_LOG_MARK,APT_PRIO_WARNING,"Failed to Compose Config File Path"); return false; } apt_log(APT_LOG_MARK,APT_PRIO_INFO,"Enter Directory [%s]",pDirPath); rv = apr_dir_open(&pDir,pDirPath,m_pPool); if(rv != APR_SUCCESS) { apt_log(APT_LOG_MARK,APT_PRIO_WARNING,"No Such Directory %s",pDirPath); return false; } while(apr_dir_read(&finfo,APR_FINFO_NAME,pDir) == APR_SUCCESS) { if(apr_fnmatch("*.xml",finfo.name,0) == APR_SUCCESS) { char* pFilePath; if(apr_filepath_merge(&pFilePath,pDirPath,finfo.name,APR_FILEPATH_NATIVE,m_pPool) == APR_SUCCESS) { LoadScenario(pFilePath); } } } apr_dir_close(pDir); return true; }
/** Load SofiaSIP signaling agent */ static apt_bool_t unimrcp_client_sip_uac_load(unimrcp_client_loader_t *loader, const apr_xml_elem *root, const char *id) { const apr_xml_elem *elem; mrcp_sig_agent_t *agent; mrcp_sofia_client_config_t *config; config = mrcp_sofiasip_client_config_alloc(loader->pool); config->local_port = DEFAULT_SIP_PORT; config->user_agent_name = DEFAULT_SOFIASIP_UA_NAME; config->origin = DEFAULT_SDP_ORIGIN; apt_log(APT_LOG_MARK,APT_PRIO_DEBUG,"Loading SofiaSIP Agent <%s>",id); for(elem = root->first_child; elem; elem = elem->next) { apt_log(APT_LOG_MARK,APT_PRIO_DEBUG,"Loading Element <%s>",elem->name); if(strcasecmp(elem->name,"sip-ip") == 0) { config->local_ip = unimrcp_client_ip_address_get(loader,elem,loader->ip); } else if(strcasecmp(elem->name,"sip-ext-ip") == 0) { config->ext_ip = unimrcp_client_ip_address_get(loader,elem,loader->ext_ip); } else if(strcasecmp(elem->name,"sip-port") == 0) { if(is_cdata_valid(elem) == TRUE) { config->local_port = (apr_port_t)atol(cdata_text_get(elem)); } } else if(strcasecmp(elem->name,"sip-transport") == 0) { if(is_cdata_valid(elem) == TRUE) { config->transport = cdata_copy(elem,loader->pool); } } else if(strcasecmp(elem->name,"ua-name") == 0) { if(is_cdata_valid(elem) == TRUE) { const apr_xml_attr *attr = NULL; for(attr = elem->attr; attr; attr = attr->next) { if(strcasecmp(attr->name,"appendversion") == 0) { break; } } if(is_attr_enabled(attr)) { config->user_agent_name = apr_psprintf(loader->pool,"%s "UNI_VERSION_STRING,cdata_text_get(elem)); } else { config->user_agent_name = cdata_copy(elem,loader->pool); } } } else if(strcasecmp(elem->name,"sdp-origin") == 0) { if(is_cdata_valid(elem) == TRUE) { config->origin = cdata_copy(elem,loader->pool); } } else if(strcasecmp(elem->name,"sip-t1") == 0) { if(is_cdata_valid(elem) == TRUE) { config->sip_t1 = atol(cdata_text_get(elem)); } } else if(strcasecmp(elem->name,"sip-t2") == 0) { if(is_cdata_valid(elem) == TRUE) { config->sip_t2 = atol(cdata_text_get(elem)); } } else if(strcasecmp(elem->name,"sip-t4") == 0) { if(is_cdata_valid(elem) == TRUE) { config->sip_t4 = atol(cdata_text_get(elem)); } } else if(strcasecmp(elem->name,"sip-t1x64") == 0) { if(is_cdata_valid(elem) == TRUE) { config->sip_t1x64 = atol(cdata_text_get(elem)); } } else if(strcasecmp(elem->name,"sip-message-output") == 0) { if(is_cdata_valid(elem) == TRUE) { config->tport_log = cdata_bool_get(elem); } } else if(strcasecmp(elem->name,"sip-message-dump") == 0) { if(is_cdata_valid(elem) == TRUE) { const char *root_path; const char *path = cdata_text_get(elem); if(loader->dir_layout && apr_filepath_root(&root_path,&path,0,loader->pool) == APR_ERELATIVE) config->tport_dump_file = apt_dir_layout_path_compose( loader->dir_layout, APT_LAYOUT_LOG_DIR, path, loader->pool); else config->tport_dump_file = cdata_copy(elem,loader->pool); } } else { apt_log(APT_LOG_MARK,APT_PRIO_WARNING,"Unknown Element <%s>",elem->name); } } if(!config->local_ip) { /* use default IP address if not specified */ config->local_ip = apr_pstrdup(loader->pool,loader->ip); } if(!config->ext_ip && loader->ext_ip) { /* use default ext IP address if not specified */ config->ext_ip = apr_pstrdup(loader->pool,loader->ext_ip); } agent = mrcp_sofiasip_client_agent_create(id,config,loader->pool); return mrcp_client_signaling_agent_register(loader->client,agent); }
APT_DECLARE(char*) apt_vardir_filepath_get(const apt_dir_layout_t *dir_layout, const char *file_name, apr_pool_t *pool) { return apt_dir_layout_path_compose(dir_layout,APT_LAYOUT_VAR_DIR,file_name,pool); }