/** Create factory of MRCPv2 connection agents */ static mrcp_ca_factory_t* unimrcp_client_ca_factory_create(unimrcp_client_loader_t *loader, const apr_xml_elem *elem) { mrcp_ca_factory_t *ca_factory = NULL; mrcp_connection_agent_t *agent; char *name; char *state; char *list_str = apr_pstrdup(loader->pool,cdata_text_get(elem)); do { name = apr_strtok(list_str, ",", &state); if(name) { agent = mrcp_client_connection_agent_get(loader->client,name); if(agent) { if(!ca_factory) ca_factory = mrcp_ca_factory_create(loader->pool); mrcp_ca_factory_agent_add(ca_factory,agent); } else { apt_log(APT_LOG_MARK,APT_PRIO_WARNING,"Unknown MRCPv2-UAC Name <%s>",name); } } list_str = NULL; /* make sure we pass NULL on subsequent calls of apr_strtok() */ } while(name); return ca_factory; }
/** Load MRCPv2 profile */ static apt_bool_t unimrcp_client_mrcpv2_profile_load(unimrcp_client_loader_t *loader, const apr_xml_elem *root, const char *id) { const apr_xml_elem *elem; mrcp_profile_t *profile; mrcp_sig_agent_t *sip_agent = NULL; mrcp_connection_agent_t *mrcpv2_agent = NULL; mpf_engine_t *media_engine = NULL; mpf_termination_factory_t *rtp_factory = NULL; mpf_rtp_settings_t *rtp_settings = NULL; mrcp_sig_settings_t *sip_settings = NULL; apt_log(APT_LOG_MARK,APT_PRIO_DEBUG,"Loading MRCPv2 Profile <%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(is_cdata_valid(elem) == FALSE) { continue; } if(strcasecmp(elem->name,"sip-uac") == 0) { sip_agent = mrcp_client_signaling_agent_get(loader->client,cdata_text_get(elem)); } else if(strcasecmp(elem->name,"mrcpv2-uac") == 0) { mrcpv2_agent = mrcp_client_connection_agent_get(loader->client,cdata_text_get(elem)); } else if(strcasecmp(elem->name,"media-engine") == 0) { media_engine = mrcp_client_media_engine_get(loader->client,cdata_text_get(elem)); } else if(strcasecmp(elem->name,"rtp-factory") == 0) { rtp_factory = mrcp_client_rtp_factory_get(loader->client,cdata_text_get(elem)); } else if(strcasecmp(elem->name,"sip-settings") == 0) { sip_settings = mrcp_client_signaling_settings_get(loader->client,cdata_text_get(elem)); } else if(strcasecmp(elem->name,"rtp-settings") == 0) { rtp_settings = mrcp_client_rtp_settings_get(loader->client,cdata_text_get(elem)); } else { apt_log(APT_LOG_MARK,APT_PRIO_WARNING,"Unknown Element <%s>",elem->name); } } apt_log(APT_LOG_MARK,APT_PRIO_NOTICE,"Create MRCPv2 Profile [%s]",id); profile = mrcp_client_profile_create( NULL,sip_agent,mrcpv2_agent, media_engine,rtp_factory, rtp_settings,sip_settings, loader->pool); return mrcp_client_profile_register(loader->client,profile,id); }