/** @brief test uri * * create URI and get the values of it's components * */ void test_uri(axutil_env_t *env) { axis2_char_t * uri_str = "http://*****:*****@example.com:80/foo?bar#item5"; axis2_char_t * host = "home.netscape.com:443"; axis2_char_t * uri_str_base = "http://*****:*****@example.com:80/foo?bar"; axis2_char_t * scheme_str = "http"; axutil_uri_t * base = NULL; axutil_uri_t * hostinfo = NULL; axutil_uri_t * uri = NULL; axutil_uri_t * clone = NULL; axutil_uri_t * rel = NULL; axis2_port_t scheme_port; axis2_port_t port; axis2_char_t * str; hostinfo = axutil_uri_parse_hostinfo(env,host); CUT_ASSERT_PTR_NOT_EQUAL(hostinfo, NULL, 0); scheme_port = axutil_uri_port_of_scheme(scheme_str); CUT_ASSERT_INT_NOT_EQUAL(scheme_port, 0, 0); uri = axutil_uri_parse_string(env,uri_str); CUT_ASSERT_PTR_NOT_EQUAL(uri, NULL, 0); str = axutil_uri_get_protocol(uri,env); CUT_ASSERT_STR_EQUAL(str, "http", 0); port = axutil_uri_get_port(uri,env); CUT_ASSERT_INT_EQUAL(port, 80, 0); str = axutil_uri_get_path(uri,env); CUT_ASSERT_STR_EQUAL(str, "/foo", 0); str = axutil_uri_get_host(uri,env); CUT_ASSERT_STR_EQUAL(str, "example.com", 0); base = axutil_uri_parse_string(env,uri_str_base); CUT_ASSERT_PTR_NOT_EQUAL(base, NULL, 0); if (base) { str = axutil_uri_to_string(base,env,0); CUT_ASSERT_STR_EQUAL(str, "http://*****:*****@example.com/foo?bar", 0); } clone = axutil_uri_clone(uri,env); CUT_ASSERT_PTR_NOT_EQUAL(clone, NULL, 0); if (clone) { str = axutil_uri_to_string(clone,env,0); CUT_ASSERT_STR_EQUAL(str, "http://*****:*****@example.com/foo?bar#item5", 0); axutil_uri_free(clone,env); } rel = axutil_uri_resolve_relative(env,base,uri); CUT_ASSERT_PTR_NOT_EQUAL(rel, NULL, 0); if (rel) { str = axutil_uri_to_string(rel,env,0); CUT_ASSERT_STR_EQUAL(str, "http://*****:*****@example.com/foo?bar#item5", 0); } axutil_uri_free(uri,env); }
AXIS2_EXTERN int AXIS2_CALL axutil_url_get_port( axutil_url_t *url, const axutil_env_t *env) { AXIS2_ENV_CHECK(env, -1); AXIS2_PARAM_CHECK(env->error, url, -1); if(!url->port) { return axutil_uri_port_of_scheme(url->protocol); } return url->port; }
AXIS2_EXTERN axis2_status_t AXIS2_CALL axutil_url_set_host( axutil_url_t *url, const axutil_env_t *env, axis2_char_t *host) { AXIS2_PARAM_CHECK(env->error, host, AXIS2_FAILURE); if(url->host) { AXIS2_FREE(env->allocator, url->host); } url->host = axutil_strdup(env, host); if(url->server) { AXIS2_FREE(env->allocator, url->server); url->server = NULL; } if(url->host) { axis2_ssize_t len; axis2_char_t port_str[11]; axis2_bool_t print_port = AXIS2_FALSE; len = axutil_strlen(url->host); if(url->port != 0 && (!url->protocol || url->port != axutil_uri_port_of_scheme(url->protocol))) { print_port = AXIS2_TRUE; sprintf(port_str, "%d", url->port); len += axutil_strlen(port_str) + 1; /* +1 is for ':' */ } url->server = (axis2_char_t *)AXIS2_MALLOC(env->allocator, len + 1); sprintf(url->server, "%s%s%s", url->host, (print_port) ? ":" : "", (print_port) ? port_str : ""); } return AXIS2_SUCCESS; }
AXIS2_EXTERN axis2_char_t *AXIS2_CALL axutil_url_to_external_form( axutil_url_t *url, const axutil_env_t *env) { axis2_char_t *external_form = NULL; axis2_ssize_t len = 0; axis2_char_t port_str[11]; axis2_bool_t print_port = AXIS2_FALSE; AXIS2_PARAM_CHECK(env->error, url, NULL); if(!url->protocol) return NULL; if(url->port != 0 && url->port != axutil_uri_port_of_scheme(url->protocol)) { print_port = AXIS2_TRUE; sprintf(port_str, "%d", url->port); len += axutil_strlen(port_str) + 1; /* +1 is for ':' */ } len += axutil_strlen(url->protocol) + 6; if(url->host) len += axutil_strlen(url->host); if(url->path) len += axutil_strlen(url->path); if(url->query) len += axutil_strlen(url->query); external_form = (axis2_char_t *)AXIS2_MALLOC(env->allocator, len + 1); sprintf(external_form, "%s://%s%s%s%s%s", url->protocol, (url->host) ? url->host : "", (print_port) ? ":" : "", (print_port) ? port_str : "", (url->path) ? url->path : "", (url->query) ? url->query : ""); return external_form; }
AXIS2_EXTERN axis2_char_t *AXIS2_CALL axutil_url_get_server( axutil_url_t *url, const axutil_env_t *env) { axis2_ssize_t len = 0; axis2_char_t port_str[11]; axis2_bool_t print_port = AXIS2_FALSE; AXIS2_ENV_CHECK(env, NULL); AXIS2_PARAM_CHECK(env->error, url, NULL); if(!url->server && !url->host) return NULL; else if(!url->host) { AXIS2_FREE(env->allocator, url->server); url->server = NULL; return NULL; } else if(url->server) return url->server; len += axutil_strlen(url->host); if(url->port != 0 && (!url->protocol || url->port != axutil_uri_port_of_scheme(url->protocol))) { print_port = AXIS2_TRUE; sprintf(port_str, "%d", url->port); len += axutil_strlen(port_str) + 1; /* +1 is for ':' */ } url->server = (axis2_char_t *)AXIS2_MALLOC(env->allocator, len + 1); /* +1 is for '/0' */ sprintf(url->server, "%s%s%s", url->host, (print_port) ? ":" : "", (print_port) ? port_str : ""); return url->server; }
/** @brief test uri * * create URI and get the values of it's components * */ axis2_status_t test_uri(axutil_env_t *env) { axis2_char_t * uri_str = "http://*****:*****@example.com:80/foo?bar#item5"; axis2_char_t * host = "home.netscape.com:443"; axis2_char_t * uri_str_base = "http://*****:*****@example.com:80/foo?bar"; axis2_char_t * scheme_str = "http"; axutil_uri_t * base = NULL; axutil_uri_t * hostinfo = NULL; axutil_uri_t * uri = NULL; axutil_uri_t * clone = NULL; axutil_uri_t * rel = NULL; axis2_char_t * protocol = NULL; axis2_char_t * server = NULL; axis2_char_t * path = NULL; axis2_port_t scheme_port; axis2_port_t port; hostinfo = axutil_uri_parse_hostinfo(env,host); if(hostinfo) { printf("The host information of uri is %s\n",axutil_uri_to_string(hostinfo,env,0)); } else { printf("Test hostinfo faild\n"); } scheme_port = axutil_uri_port_of_scheme(scheme_str); if(scheme_port) { printf("port of scheme is %u\n", scheme_port); } else { printf("Test port failed\n"); } uri = axutil_uri_parse_string(env,uri_str); if(uri) { printf("The uri is %s\n",axutil_uri_to_string(uri,env,0)); axutil_uri_free(uri, env); } else { return AXIS2_FAILURE; } base = axutil_uri_parse_string(env,uri_str_base); if(base) { printf("The base of uri is %s\n",axutil_uri_to_string(base,env,0)); } else { printf("Test base failed\n"); } clone = axutil_uri_clone(uri,env); if(clone) { printf("The clone of uri is %s\n",axutil_uri_to_string(clone,env,0)); axutil_uri_free(clone,env); } else { printf("Test clone failed"); } rel = axutil_uri_resolve_relative(env,base,clone); if(rel) { printf("The resolved relative uri is %s\n",axutil_uri_to_string(rel,env,0)); } else { printf("Test resolve relative failed"); } protocol = axutil_uri_get_protocol(uri,env); if (!protocol) { axutil_uri_free(uri,env); return AXIS2_FAILURE; } server = axutil_uri_get_server(uri,env); if (!server) { axutil_uri_free(uri,env); return AXIS2_FAILURE; } port = axutil_uri_get_port(uri,env); if (!port) { axutil_uri_free(uri,env); return AXIS2_FAILURE; } path = axutil_uri_get_path(uri,env); if (!path) { axutil_uri_free(uri,env); return AXIS2_FAILURE; } printf("The protocol is %s\n",protocol); printf("The server is %s \n",server); printf("The port is %u \n",port); printf("The path is %s\n",path); axutil_uri_free(uri,env); return AXIS2_SUCCESS; }