You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by di...@apache.org on 2007/02/13 12:02:22 UTC
svn commit: r506969 -
/webservices/axis2/scratch/c/dinesh/486/c/modules/core/transport/http/receiver/http_request_line.c
Author: dinesh
Date: Tue Feb 13 03:02:19 2007
New Revision: 506969
URL: http://svn.apache.org/viewvc?view=rev&rev=506969
Log:
axis2c-486: working on axis2c transport refactoring, moving sender releated files to sender and receiver releated files to receiver
Added:
webservices/axis2/scratch/c/dinesh/486/c/modules/core/transport/http/receiver/http_request_line.c
Added: webservices/axis2/scratch/c/dinesh/486/c/modules/core/transport/http/receiver/http_request_line.c
URL: http://svn.apache.org/viewvc/webservices/axis2/scratch/c/dinesh/486/c/modules/core/transport/http/receiver/http_request_line.c?view=auto&rev=506969
==============================================================================
--- webservices/axis2/scratch/c/dinesh/486/c/modules/core/transport/http/receiver/http_request_line.c (added)
+++ webservices/axis2/scratch/c/dinesh/486/c/modules/core/transport/http/receiver/http_request_line.c Tue Feb 13 03:02:19 2007
@@ -0,0 +1,291 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <axis2_http_request_line.h>
+#include <axis2_string.h>
+#include <string.h>
+#include <axis2_http_transport.h>
+#include <stdio.h>
+/**
+ * @brief HTTP Request Line struct impl
+ * Axis2 HTTP Request Line impl
+ */
+
+typedef struct axis2_http_request_line_impl
+{
+ axis2_http_request_line_t request_line;
+ axis2_char_t *http_version;
+ axis2_char_t *method;
+ axis2_char_t *uri;
+}
+axis2_http_request_line_impl_t;
+
+#define AXIS2_INTF_TO_IMPL(request_line) \
+ ((axis2_http_request_line_impl_t *)(request_line))
+
+/***************************** Function headers *******************************/
+
+/*
+ * This is just a function
+ * Not assciated with an ops struct
+ */
+axis2_http_request_line_t *AXIS2_CALL
+axis2_http_request_line_parse_line(
+ const axis2_env_t *env,
+ const axis2_char_t *str);
+
+axis2_char_t *AXIS2_CALL
+axis2_http_request_line_get_method(
+ const axis2_http_request_line_t *request_line,
+ const axis2_env_t *env);
+
+axis2_char_t *AXIS2_CALL
+axis2_http_request_line_get_http_version(
+ const axis2_http_request_line_t *request_line,
+ const axis2_env_t *env);
+
+axis2_char_t *AXIS2_CALL
+axis2_http_request_line_get_uri(
+ const axis2_http_request_line_t *request_line,
+ const axis2_env_t *env);
+
+axis2_char_t *AXIS2_CALL
+axis2_http_request_line_to_string(
+ axis2_http_request_line_t *request_line,
+ const axis2_env_t *env);
+
+axis2_status_t AXIS2_CALL
+axis2_http_request_line_free(
+ axis2_http_request_line_t *request_line,
+ const axis2_env_t *env);
+
+/***************************** End of function headers ************************/
+
+AXIS2_EXTERN axis2_http_request_line_t *AXIS2_CALL
+axis2_http_request_line_create(
+ const axis2_env_t *env,
+ const axis2_char_t *method,
+ const axis2_char_t *uri,
+ const axis2_char_t *http_version)
+{
+ axis2_http_request_line_impl_t *request_line_impl = NULL;
+ AXIS2_ENV_CHECK(env, NULL);
+ AXIS2_PARAM_CHECK(env->error, method, NULL);
+ AXIS2_PARAM_CHECK(env->error, uri, NULL);
+ AXIS2_PARAM_CHECK(env->error, http_version, NULL);
+
+ request_line_impl = (axis2_http_request_line_impl_t *)AXIS2_MALLOC
+ (env->allocator, sizeof(
+ axis2_http_request_line_impl_t));
+
+ if (NULL == request_line_impl)
+ {
+ AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+ return NULL;
+ }
+ request_line_impl->method = (axis2_char_t *)AXIS2_STRDUP(method, env);
+ request_line_impl->uri = (axis2_char_t *)AXIS2_STRDUP(uri, env);
+ request_line_impl->http_version = (axis2_char_t *)AXIS2_STRDUP(
+ http_version, env);
+
+ request_line_impl->request_line.ops = AXIS2_MALLOC(env->allocator,
+ sizeof(axis2_http_request_line_ops_t));
+ if (NULL == request_line_impl->request_line.ops)
+ {
+ axis2_http_request_line_free((axis2_http_request_line_t *)
+ request_line_impl, env);
+ AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+ return NULL;
+ }
+
+ request_line_impl->request_line.ops->get_method =
+ axis2_http_request_line_get_method;
+ request_line_impl->request_line.ops->get_http_version =
+ axis2_http_request_line_get_http_version;
+ request_line_impl->request_line.ops->get_uri =
+ axis2_http_request_line_get_uri;
+ request_line_impl->request_line.ops->to_string =
+ axis2_http_request_line_to_string;
+ request_line_impl->request_line.ops->free =
+ axis2_http_request_line_free;
+ return &(request_line_impl->request_line);
+}
+
+axis2_status_t AXIS2_CALL
+axis2_http_request_line_free(
+ axis2_http_request_line_t *request_line,
+ const axis2_env_t *env)
+{
+ axis2_http_request_line_impl_t *request_line_impl = NULL;
+ AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+ request_line_impl = AXIS2_INTF_TO_IMPL(request_line);
+
+ if (request_line_impl->method)
+ {
+ AXIS2_FREE(env->allocator, request_line_impl->method);
+ request_line_impl->method = NULL;
+ }
+ if (request_line_impl->uri)
+ {
+ AXIS2_FREE(env->allocator, request_line_impl->uri);
+ request_line_impl->uri = NULL;
+ }
+ if (request_line_impl->http_version)
+ {
+ AXIS2_FREE(env->allocator, request_line_impl->http_version);
+ request_line_impl->http_version = NULL;
+ }
+ if (request_line->ops)
+ AXIS2_FREE(env->allocator, request_line->ops);
+
+ AXIS2_FREE(env->allocator, AXIS2_INTF_TO_IMPL(request_line));
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN axis2_http_request_line_t *AXIS2_CALL
+axis2_http_request_line_parse_line(
+ const axis2_env_t *env,
+ const axis2_char_t *str)
+{
+ axis2_char_t *req_line = NULL;
+ axis2_char_t *method = NULL;
+ axis2_char_t *uri = NULL;
+ axis2_char_t *http_version = NULL;
+ axis2_http_request_line_t *ret = NULL;
+ axis2_char_t *tmp = NULL;
+ int i = 0;
+
+ AXIS2_PARAM_CHECK(env->error, str, NULL);
+
+ tmp = AXIS2_STRSTR(str, AXIS2_HTTP_CRLF);
+
+
+ if (NULL == tmp)
+ {
+ AXIS2_ERROR_SET(env->error,
+ AXIS2_ERROR_INVALID_HTTP_HEADER_START_LINE,
+ AXIS2_FAILURE);
+ return NULL;
+ }
+ i = tmp - str;
+ req_line = AXIS2_MALLOC(env->allocator, i * sizeof(axis2_char_t) + 1);
+ if (NULL == req_line)
+ {
+ AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+ return NULL;
+ }
+ memcpy(req_line, str, i * sizeof(axis2_char_t));
+ req_line[i] = '\0';
+ tmp = req_line;
+
+ method = tmp;
+ tmp = strchr(tmp, ' ');
+ if (NULL == tmp)
+ {
+ AXIS2_FREE(env->allocator, req_line);
+ AXIS2_ERROR_SET(env->error,
+ AXIS2_ERROR_INVALID_HTTP_HEADER_START_LINE,
+ AXIS2_FAILURE);
+ return NULL;
+ }
+ *tmp++ = '\0';
+ uri = tmp;
+ tmp = strrchr(tmp, ' ');
+ if (NULL == tmp)
+ {
+ AXIS2_FREE(env->allocator, req_line);
+ AXIS2_ERROR_SET(env->error,
+ AXIS2_ERROR_INVALID_HTTP_HEADER_START_LINE,
+ AXIS2_FAILURE);
+ return NULL;
+ }
+ *tmp++ = '\0';
+ http_version = tmp;
+ ret = axis2_http_request_line_create(env, method, uri, http_version);
+ AXIS2_FREE(env->allocator, req_line);
+
+ return ret;
+}
+
+
+axis2_char_t *AXIS2_CALL
+axis2_http_request_line_get_method(
+ const axis2_http_request_line_t *request_line,
+ const axis2_env_t *env)
+{
+ AXIS2_ENV_CHECK(env, NULL);
+ return AXIS2_INTF_TO_IMPL(request_line)->method;
+}
+
+
+axis2_char_t *AXIS2_CALL
+axis2_http_request_line_get_http_version(
+ const axis2_http_request_line_t *request_line,
+ const axis2_env_t *env)
+{
+ AXIS2_ENV_CHECK(env, NULL);
+ return AXIS2_INTF_TO_IMPL(request_line)->http_version;
+}
+
+
+axis2_char_t *AXIS2_CALL
+axis2_http_request_line_get_uri(
+ const axis2_http_request_line_t *request_line,
+ const axis2_env_t *env)
+{
+ AXIS2_ENV_CHECK(env, NULL);
+ return AXIS2_INTF_TO_IMPL(request_line)->uri;
+}
+
+
+axis2_char_t *AXIS2_CALL
+axis2_http_request_line_to_string(
+ axis2_http_request_line_t *request_line,
+ const axis2_env_t *env)
+{
+ axis2_http_request_line_impl_t *req_line_impl = NULL;
+ int alloc_len = 0;
+ axis2_char_t *ret = NULL;
+
+ AXIS2_ENV_CHECK(env, NULL);
+
+ req_line_impl = AXIS2_INTF_TO_IMPL(
+ request_line);
+ alloc_len = AXIS2_STRLEN(req_line_impl->method) +
+ AXIS2_STRLEN(req_line_impl->uri) +
+ AXIS2_STRLEN(req_line_impl->http_version) + 6;
+ /* 5 = 2 * spaces + '/' +CR + LF + '\0' */
+
+ ret = AXIS2_MALLOC(env->allocator,
+ alloc_len * sizeof(axis2_char_t));
+ if (NULL == ret)
+ {
+ AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+ return NULL;
+ }
+ if (req_line_impl->uri[0] != '/')
+ {
+ sprintf(ret, "%s /%s %s%s", req_line_impl->method, req_line_impl->uri,
+ req_line_impl->http_version, AXIS2_HTTP_CRLF);
+ }
+ else
+ {
+ sprintf(ret, "%s %s %s%s", req_line_impl->method, req_line_impl->uri,
+ req_line_impl->http_version, AXIS2_HTTP_CRLF);
+ }
+ return ret;
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org