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