Author: senaka
Date: Thu Mar 6 05:31:50 2008
New Revision: 634266
URL: http://svn.apache.org/viewvc?rev=634266&view=rev
Log:
Fixing JIRA Issue AXIS2C-1034
Modified:
webservices/axis2/trunk/c/util/include/axutil_url.h
webservices/axis2/trunk/c/util/src/url.c
Modified: webservices/axis2/trunk/c/util/include/axutil_url.h
URL:
http://svn.apache.org/viewvc/webservices/axis2/trunk/c/util/include/axutil_url.h?rev=634266&r1=634265&r2=634266&view=diff
==============================================================================
--- webservices/axis2/trunk/c/util/include/axutil_url.h (original)
+++ webservices/axis2/trunk/c/util/include/axutil_url.h Thu Mar 6 05:31:50 2008
@@ -45,7 +45,7 @@
axutil_url_create(
const axutil_env_t * env,
const axis2_char_t * protocol,
- const axis2_char_t * server,
+ const axis2_char_t * host,
const int port,
const axis2_char_t * path);
@@ -72,6 +72,17 @@
AXIS2_EXTERN axis2_char_t *AXIS2_CALL
axutil_url_get_protocol(
+ axutil_url_t * url,
+ const axutil_env_t * env);
+
+ 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_EXTERN axis2_char_t *AXIS2_CALL
+ axutil_url_get_host(
axutil_url_t * url,
const axutil_env_t * env);
Modified: webservices/axis2/trunk/c/util/src/url.c
URL:
http://svn.apache.org/viewvc/webservices/axis2/trunk/c/util/src/url.c?rev=634266&r1=634265&r2=634266&view=diff
==============================================================================
--- webservices/axis2/trunk/c/util/src/url.c (original)
+++ webservices/axis2/trunk/c/util/src/url.c Thu Mar 6 05:31:50 2008
@@ -26,16 +26,17 @@
struct axutil_url
{
axis2_char_t *protocol;
- axis2_char_t *server;
+ axis2_char_t *host;
int port;
axis2_char_t *path;
+ axis2_char_t *server;
};
AXIS2_EXTERN axutil_url_t *AXIS2_CALL
axutil_url_create(
const axutil_env_t * env,
const axis2_char_t * protocol,
- const axis2_char_t * server,
+ const axis2_char_t * host,
const int port,
const axis2_char_t * path)
{
@@ -45,7 +46,7 @@
if (!protocol || !*protocol ||
strstr(protocol, "://") ||
- (server && strchr(server, '/')))
+ (host && strchr(host, '/')))
{
return NULL;
}
@@ -58,12 +59,13 @@
return NULL;
}
url->protocol = axutil_strdup(env, protocol);
- url->server = NULL;
+ url->host = NULL;
url->path = NULL;
+ url->server = NULL;
- if (server)
+ if (host)
{
- url->server = (axis2_char_t *) axutil_strdup(env, server);
+ url->host = (axis2_char_t *) axutil_strdup(env, host);
url->port = port;
}
else
@@ -106,10 +108,9 @@
const axutil_env_t * env,
const axis2_char_t * str_url)
{
-
/**
* Only accepted format is :
- * protocol://server:port/path
+ * protocol://host:port/path
* Added file:///path
* port is optional and the default port is assumed
* if path is not present / (root) is assumed
@@ -119,7 +120,7 @@
const axis2_char_t *protocol = NULL;
axis2_char_t *path = NULL;
axis2_char_t *port_str = NULL;
- axis2_char_t *server = NULL;
+ axis2_char_t *host = NULL;
axis2_char_t *params = NULL;
int port = 0;
@@ -132,22 +133,22 @@
return NULL;
}
protocol = tmp_url_str;
- server = strstr(tmp_url_str, "://");
- if (!server)
+ host = strstr(tmp_url_str, "://");
+ if (!host)
{
AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_ADDRESS,
AXIS2_FAILURE);
AXIS2_FREE(env->allocator, tmp_url_str);
return NULL;
}
- if (axutil_strlen(server) < 3 * sizeof(axis2_char_t))
+ if (axutil_strlen(host) < 3 * sizeof(axis2_char_t))
{
AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_ADDRESS,
AXIS2_FAILURE);
AXIS2_FREE(env->allocator, tmp_url_str);
return NULL;
}
- *server = '\0';
- server += 3 * sizeof(axis2_char_t); /* skip "://" part */
- if (axutil_strlen(server) <= 0)
+ *host = '\0';
+ host += 3 * sizeof(axis2_char_t); /* skip "://" part */
+ if (axutil_strlen(host) <= 0)
{
AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_ADDRESS,
AXIS2_FAILURE);
AXIS2_FREE(env->allocator, tmp_url_str);
@@ -158,46 +159,37 @@
*/
if (0 == axutil_strcasecmp(protocol, (const axis2_char_t *) "file"))
{
- ret = axutil_url_create(env, protocol, NULL, 0, server);
+ ret = axutil_url_create(env, protocol, NULL, 0, host);
AXIS2_FREE(env->allocator, tmp_url_str);
return ret;
}
- params = strchr(server, '?');
+ params = strchr(host, '?');
if (!params)
{
- params = strchr(server, '#');
+ params = strchr(host, '#');
}
if (params)
{
*params = '\0';
}
- port_str = strchr(server, ':');
+ port_str = strchr(host, ':');
if (!port_str)
{
- if (axutil_strcasecmp(protocol, "http") == 0)
- port = 80;
- else if (axutil_strcasecmp(protocol, "https") == 0)
- port = 443;
- else if (axutil_strcasecmp(protocol, "ftp") == 0)
- port = 20;
- else if (axutil_strcasecmp(protocol, "smtp") == 0)
- port = 25;
-
- path = strchr(server, '/');
+ path = strchr(host, '/');
if (!path)
{
/* No path - assume def path ('/') */
- /* here we have protocol + server + def port + def path */
- ret = axutil_url_create(env, protocol, server, port, "/");
+ /* here we have protocol + host + def port + def path */
+ ret = axutil_url_create(env, protocol, host, port, "/");
AXIS2_FREE(env->allocator, tmp_url_str);
return ret;
}
else
{
*path++ = '\0';
- /* here we have protocol + server + def port + path */
- ret = axutil_url_create(env, protocol, server, port, path);
+ /* here we have protocol + host + def port + path */
+ ret = axutil_url_create(env, protocol, host, port, path);
AXIS2_FREE(env->allocator, tmp_url_str);
return ret;
}
@@ -209,8 +201,8 @@
if (!path)
{
port = AXIS2_ATOI(port_str);
- /* here we have protocol + server + port + def path */
- ret = axutil_url_create(env, protocol, server, port, "/");
+ /* here we have protocol + host + port + def path */
+ ret = axutil_url_create(env, protocol, host, port, "/");
AXIS2_FREE(env->allocator, tmp_url_str);
return ret;
}
@@ -220,15 +212,15 @@
port = AXIS2_ATOI(port_str);
if (axutil_strlen(path) > 0)
{
- /* here we have protocol + server + port + path */
- ret = axutil_url_create(env, protocol, server, port, path);
+ /* here we have protocol + host + port + path */
+ ret = axutil_url_create(env, protocol, host, port, path);
AXIS2_FREE(env->allocator, tmp_url_str);
return ret;
}
else
{
- /* here we have protocol + server + port + def path */
- ret = axutil_url_create(env, protocol, server, port, "/");
+ /* here we have protocol + host + port + def path */
+ ret = axutil_url_create(env, protocol, host, port, "/");
AXIS2_FREE(env->allocator, tmp_url_str);
return ret;
}
@@ -247,6 +239,11 @@
AXIS2_FREE(env->allocator, url->protocol);
url->protocol = NULL;
}
+ if (url->host)
+ {
+ AXIS2_FREE(env->allocator, url->host);
+ url->host = NULL;
+ }
if (url->server)
{
AXIS2_FREE(env->allocator, url->server);
@@ -287,9 +284,9 @@
}
len = axutil_strlen(url->protocol) + 6;
- if (url->server)
+ if (url->host)
{
- len += axutil_strlen(url->server);
+ len += axutil_strlen(url->host);
}
if (url->path)
{
@@ -301,7 +298,7 @@
}
external_form = (axis2_char_t *) AXIS2_MALLOC(env->allocator, len);
sprintf(external_form, "%s://%s%s%s%s", url->protocol,
- (url->server) ? url->server : "",
+ (url->host) ? url->host : "",
(print_port) ? ":" : "",
(print_port) ? port_str : "",
(url->path) ? url->path : "");
@@ -334,18 +331,98 @@
}
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_ssize_t len = 0;
+ axis2_char_t port_str[8];
+ axis2_bool_t print_port = AXIS2_FALSE;
+ AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+ 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);
+ }
+ if (!url->host)
+ {
+ return AXIS2_SUCCESS;
+ }
+ 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;
+ }
+ url->server = (axis2_char_t *) AXIS2_MALLOC(env->allocator, len);
+ 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_get_host(
+ axutil_url_t * url,
+ const axutil_env_t * env)
+{
+ return url->host;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
axutil_url_set_server(
axutil_url_t * url,
const axutil_env_t * env,
axis2_char_t * server)
{
+ axis2_char_t *temp = NULL;
+ axis2_char_t *port_str = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
AXIS2_PARAM_CHECK(env->error, server, AXIS2_FAILURE);
+
+ temp = axutil_strdup(env, server);
+ if (temp && *temp == ':')
+ {
+ AXIS2_FREE(env->allocator, temp);
+ return AXIS2_FAILURE;
+ }
+
+ if (strchr(temp, '/'))
+ {
+ AXIS2_FREE(env->allocator, temp);
+ return AXIS2_FAILURE;
+ }
+
if (url->server)
{
AXIS2_FREE(env->allocator, url->server);
}
+ if (url->host)
+ {
+ AXIS2_FREE(env->allocator, url->host);
+ }
+ url->port = 0;
+
url->server = axutil_strdup(env, server);
+
+ port_str = strchr(temp, ':');
+ if (port_str)
+ {
+ *port_str++ = '\0';
+ url->port = AXIS2_ATOI(port_str);
+ }
+
+ url->host = axutil_strdup(env, temp);
+ AXIS2_FREE(env->allocator, temp);
return AXIS2_SUCCESS;
}
@@ -354,6 +431,36 @@
axutil_url_t * url,
const axutil_env_t * env)
{
+ axis2_ssize_t len = 0;
+ axis2_char_t port_str[8];
+ axis2_bool_t print_port = AXIS2_FALSE;
+ AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+
+ if (!url->server && !url->host)
+ {
+ return NULL;
+ }
+ else if (!url->host)
+ {
+ AXIS2_FREE(env->allocator, url->server);
+ 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;
+ }
+ url->server = (axis2_char_t *) AXIS2_MALLOC(env->allocator, len);
+ sprintf(url->server, "%s%s%s", url->host,
+ (print_port) ? ":" : "",
+ (print_port) ? port_str : "");
return url->server;
}
@@ -363,8 +470,35 @@
const axutil_env_t * env,
int port)
{
+ axis2_ssize_t len = 0;
+ axis2_char_t port_str[8];
+ axis2_bool_t print_port = AXIS2_FALSE;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+ if (url->port == port)
+ {
+ return AXIS2_SUCCESS;
+ }
url->port = port;
+ if (url->server)
+ {
+ AXIS2_FREE(env->allocator, url->server);
+ }
+ if (!url->host)
+ {
+ return AXIS2_SUCCESS;
+ }
+ 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;
+ }
+ url->server = (axis2_char_t *) AXIS2_MALLOC(env->allocator, len);
+ sprintf(url->server, "%s%s%s", url->host,
+ (print_port) ? ":" : "",
+ (print_port) ? port_str : "");
return AXIS2_SUCCESS;
}
@@ -407,7 +541,7 @@
{
AXIS2_ENV_CHECK(env, NULL);
- return axutil_url_create(env, url->protocol, url->server, url->port,
+ return axutil_url_create(env, url->protocol, url->host, url->port,
url->path);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]