static void root_from_slash(abts_case *tc, void *data) { apr_status_t rv; const char *root = NULL; const char *path = "//"; rv = apr_filepath_root(&root, &path, APR_FILEPATH_TRUENAME, p); #if defined(WIN32) || defined(OS2) ABTS_INT_EQUAL(tc, APR_EINCOMPLETE, rv); ABTS_STR_EQUAL(tc, "//", root); #else ABTS_INT_EQUAL(tc, APR_SUCCESS, rv); ABTS_STR_EQUAL(tc, "/", root); #endif ABTS_STR_EQUAL(tc, "", path); }
static void root_from_cwd_and_back(abts_case *tc, void *data) { apr_status_t rv; const char *root = NULL; const char *path = "//"; char *origpath; char *testpath; #if defined(WIN32) || defined(OS2) || defined(NETWARE) int hadfailed; #endif ABTS_INT_EQUAL(tc, APR_SUCCESS, apr_filepath_get(&origpath, 0, p)); path = origpath; rv = apr_filepath_root(&root, &path, APR_FILEPATH_TRUENAME, p); #if defined(WIN32) || defined(OS2) hadfailed = tc->failed; /* It appears some mingw/cygwin and more modern builds can return * a lowercase drive designation, but we canonicalize to uppercase */ ABTS_INT_EQUAL(tc, toupper(origpath[0]), root[0]); ABTS_INT_EQUAL(tc, ':', root[1]); ABTS_INT_EQUAL(tc, '/', root[2]); ABTS_INT_EQUAL(tc, 0, root[3]); ABTS_STR_EQUAL(tc, origpath + 3, path); #elif defined(NETWARE) ABTS_INT_EQUAL(tc, origpath[0], root[0]); { char *pt = strchr(root, ':'); ABTS_PTR_NOTNULL(tc, pt); ABTS_INT_EQUAL(tc, ':', pt[0]); ABTS_INT_EQUAL(tc, '/', pt[1]); ABTS_INT_EQUAL(tc, 0, pt[2]); pt = strchr(origpath, ':'); ABTS_PTR_NOTNULL(tc, pt); ABTS_STR_EQUAL(tc, (pt+2), path); } #else ABTS_INT_EQUAL(tc, APR_SUCCESS, rv); ABTS_STR_EQUAL(tc, "/", root); ABTS_STR_EQUAL(tc, origpath + 1, path); #endif rv = apr_filepath_merge(&testpath, root, path, APR_FILEPATH_TRUENAME | APR_FILEPATH_NOTABOVEROOT | APR_FILEPATH_NOTRELATIVE, p); ABTS_INT_EQUAL(tc, APR_SUCCESS, rv); #if defined(WIN32) || defined(OS2) || defined(NETWARE) hadfailed = tc->failed; #endif /* The API doesn't promise equality!!! * apr_filepath_get never promised a canonical filepath. * We'll emit noise under verbose so the user is aware, * but translate this back to success. */ ABTS_STR_EQUAL(tc, origpath, testpath); #if defined(WIN32) || defined(OS2) || defined(NETWARE) if (!hadfailed) tc->failed = 0; #endif }
/** 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); }
static APR_INLINE apr_status_t apt_dir_is_path_absolute(const char *path, apr_pool_t *pool) { const char *root_path; const char *file_path = path; return apr_filepath_root(&root_path,&file_path,0,pool); }