/* Set RTP config struct with param, val pair. */ static int process_rtp_config(mrcp_client_t *client, mpf_rtp_config_t *rtp_config, mpf_rtp_settings_t *rtp_settings, const char *param, const char *val, apr_pool_t *pool) { int mine = 1; if ((client == NULL) || (rtp_config == NULL) || (rtp_settings == NULL) || (param == NULL) || (val == NULL) || (pool == NULL)) return mine; if (strcasecmp(param, "rtp-ip") == 0) apt_string_set(&rtp_config->ip, ip_addr_get(val, pool)); else if (strcasecmp(param, "rtp-ext-ip") == 0) apt_string_set(&rtp_config->ext_ip, ip_addr_get(val, pool)); else if (strcasecmp(param, "rtp-port-min") == 0) rtp_config->rtp_port_min = (apr_port_t)atol(val); else if (strcasecmp(param, "rtp-port-max") == 0) rtp_config->rtp_port_max = (apr_port_t)atol(val); else if (strcasecmp(param, "playout-delay") == 0) rtp_settings->jb_config.initial_playout_delay = atol(val); else if (strcasecmp(param, "min-playout-delay") == 0) rtp_settings->jb_config.min_playout_delay = atol(val); else if (strcasecmp(param, "max-playout-delay") == 0) rtp_settings->jb_config.max_playout_delay = atol(val); else if (strcasecmp(param, "codecs") == 0) { /* Make sure that /etc/mrcp.conf contains the desired codec first in the codecs parameter. */ const mpf_codec_manager_t *codec_manager = mrcp_client_codec_manager_get(client); if (codec_manager != NULL) { if (!mpf_codec_manager_codec_list_load(codec_manager, &rtp_settings->codec_list, val, pool)) ast_log(LOG_WARNING, "Unable to load codecs\n"); } } else if (strcasecmp(param, "ptime") == 0) rtp_settings->ptime = (apr_uint16_t)atol(val); else if (strcasecmp(param, "rtcp") == 0) rtp_settings->rtcp = atoi(val); else if (strcasecmp(param, "rtcp-bye") == 0) rtp_settings->rtcp_bye_policy = atoi(val); else if (strcasecmp(param, "rtcp-tx-interval") == 0) rtp_settings->rtcp_tx_interval = (apr_uint16_t)atoi(val); else if (strcasecmp(param, "rtcp-rx-resolution") == 0) rtp_settings->rtcp_rx_resolution = (apr_uint16_t)atol(val); else mine = 0; return mine; }
/** Load RTP settings */ static apt_bool_t unimrcp_client_rtp_settings_load(unimrcp_client_loader_t *loader, const apr_xml_elem *root, const char *id) { const apr_xml_elem *elem; mpf_rtp_settings_t *rtp_settings = mpf_rtp_settings_alloc(loader->pool); apt_log(APT_LOG_MARK,APT_PRIO_DEBUG,"Loading RTP Settings <%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,"jitter-buffer") == 0) { unimrcp_client_jb_settings_load(loader,&rtp_settings->jb_config,elem); } else if(strcasecmp(elem->name,"ptime") == 0) { if(is_cdata_valid(elem) == TRUE) { rtp_settings->ptime = (apr_uint16_t)atol(cdata_text_get(elem)); } } else if(strcasecmp(elem->name,"codecs") == 0) { const mpf_codec_manager_t *codec_manager = mrcp_client_codec_manager_get(loader->client); if(is_cdata_valid(elem) == TRUE && codec_manager) { mpf_codec_manager_codec_list_load( codec_manager, &rtp_settings->codec_list, cdata_text_get(elem), loader->pool); } } else if(strcasecmp(elem->name,"rtcp") == 0) { unimrcp_client_rtcp_settings_load(loader,rtp_settings,elem); } else { apt_log(APT_LOG_MARK,APT_PRIO_WARNING,"Unknown Element <%s>",elem->name); } } return mrcp_client_rtp_settings_register(loader->client,rtp_settings,id); }