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 sa...@apache.org on 2007/03/31 05:53:25 UTC

svn commit: r524362 - in /webservices/axis2/trunk/c: include/ modules/core/transport/http/common/ modules/core/transport/http/receiver/

Author: samisa
Date: Fri Mar 30 20:53:24 2007
New Revision: 524362

URL: http://svn.apache.org/viewvc?view=rev&rev=524362
Log:
Removed ops form svr_conn and moved files to common to fix resulting build breaks

Added:
    webservices/axis2/trunk/c/modules/core/transport/http/common/http_response_writer.c
    webservices/axis2/trunk/c/modules/core/transport/http/common/simple_http_svr_conn.c
Removed:
    webservices/axis2/trunk/c/modules/core/transport/http/receiver/http_response_writer.c
    webservices/axis2/trunk/c/modules/core/transport/http/receiver/simple_http_svr_conn.c
Modified:
    webservices/axis2/trunk/c/include/axis2_simple_http_svr_conn.h
    webservices/axis2/trunk/c/modules/core/transport/http/common/Makefile.am
    webservices/axis2/trunk/c/modules/core/transport/http/receiver/Makefile.am

Modified: webservices/axis2/trunk/c/include/axis2_simple_http_svr_conn.h
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/include/axis2_simple_http_svr_conn.h?view=diff&rev=524362&r1=524361&r2=524362
==============================================================================
--- webservices/axis2/trunk/c/include/axis2_simple_http_svr_conn.h (original)
+++ webservices/axis2/trunk/c/include/axis2_simple_http_svr_conn.h Fri Mar 30 20:53:24 2007
@@ -41,157 +41,125 @@
 {
 #endif
 
-    /** Type name for struct axis2_simple_http_svr_conn_ops */
-    typedef struct axis2_simple_http_svr_conn_ops
-                axis2_simple_http_svr_conn_ops_t;
-    /** Type name for struct axis2_simple_http_svr_conn_ops_t */
     typedef struct axis2_simple_http_svr_conn axis2_simple_http_svr_conn_t;
 
     /**
-     * Simple HTTP Server Connection ops struct
+     * @param svr_conn pointer to server connection struct
+     * @param env pointer to environment struct
+     * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
+     */
+    AXIS2_EXTERN axis2_status_t AXIS2_CALL
+    axis2_simple_http_svr_conn_close(axis2_simple_http_svr_conn_t *svr_conn,
+        const axutil_env_t *env);
+
+    /**
+     * @param svr_conn pointer to server connection struct
+     * @param env pointer to environment struct
+     */
+    AXIS2_EXTERN axis2_bool_t AXIS2_CALL
+    axis2_simple_http_svr_conn_is_open(axis2_simple_http_svr_conn_t *svr_conn,
+        const axutil_env_t *env);
+
+    /**
+     * @param svr_conn pointer to server connection struct
+     * @param env pointer to environment struct
+     * @param keep_alive 
+     * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
+     */
+    AXIS2_EXTERN axis2_status_t AXIS2_CALL
+    axis2_simple_http_svr_conn_set_keep_alive(axis2_simple_http_svr_conn_t *svr_conn,
+        const axutil_env_t *env,
+        axis2_bool_t keep_alive);
+
+    /**
+     * @param svr_conn pointer to server connection struct
+     * @param env pointer to environment struct
+     */
+    AXIS2_EXTERN axis2_bool_t AXIS2_CALL
+    axis2_simple_http_svr_conn_is_keep_alive(axis2_simple_http_svr_conn_t *svr_conn,
+        const axutil_env_t *env);
+
+    /**
+     * @param svr_conn pointer to server connection struct
+     * @param env pointer to environment struct
+     */
+    AXIS2_EXTERN axutil_stream_t* AXIS2_CALL
+    axis2_simple_http_svr_conn_get_stream(const axis2_simple_http_svr_conn_t *svr_conn,
+        const axutil_env_t *env);
+
+    /**
+     * @param svr_conn pointer to server connection struct
+     * @param env pointer to environment struct
+     */
+    AXIS2_EXTERN axis2_http_response_writer_t *AXIS2_CALL
+    axis2_simple_http_svr_conn_get_writer(const axis2_simple_http_svr_conn_t *svr_conn,
+        const axutil_env_t *env);
+
+    /**
+     * @param svr_conn pointer to server connection struct
+     * @param env pointer to environment struct
+     */
+    AXIS2_EXTERN axis2_http_simple_request_t *AXIS2_CALL
+    axis2_simple_http_svr_conn_read_request(axis2_simple_http_svr_conn_t *svr_conn,
+        const axutil_env_t *env);
+
+    /**
+     * @param svr_conn pointer to server connection struct
+     * @param env pointer to environment struct
+     * @param response response
+     * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
+     */
+    AXIS2_EXTERN axis2_status_t AXIS2_CALL
+    axis2_simple_http_svr_conn_write_response(axis2_simple_http_svr_conn_t *svr_conn,
+        const axutil_env_t *env,
+        axis2_http_simple_response_t *response);
+
+    /**
+     * @param svr_conn pointer to server connection struct
+     * @param env pointer to environment struct
+     * @param timeout timeout
+     * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
+     */
+    AXIS2_EXTERN axis2_status_t AXIS2_CALL
+    axis2_simple_http_svr_conn_set_rcv_timeout(axis2_simple_http_svr_conn_t *svr_conn,
+        const axutil_env_t *env,
+        int timeout);
+
+    /**
+     * @param svr_conn pointer to server connection struct
+     * @param env pointer to environment struct
+     * @param timeout timeout
+     * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
+     */
+    AXIS2_EXTERN axis2_status_t AXIS2_CALL
+    axis2_simple_http_svr_conn_set_snd_timeout(axis2_simple_http_svr_conn_t *svr_conn,
+        const axutil_env_t *env,
+        int timeout);
+
+    /**
+     * @param svr_conn pointer to server connection struct
+     * @param env pointer to environment struct
+     */
+    AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+    axis2_simple_http_svr_conn_get_svr_ip(const axis2_simple_http_svr_conn_t *svr_conn,
+        const axutil_env_t *env);
+
+    /**
+     * @param svr_conn pointer to server connection struct
+     * @param env pointer to environment struct
+     */
+    AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+    axis2_simple_http_svr_conn_get_peer_ip(const axis2_simple_http_svr_conn_t *svr_conn,
+        const axutil_env_t *env);
+
+    /**
+     * @param svr_conn pointer to server connection struct
+     * @param env pointer to environment struct
+     * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
      */
-    struct axis2_simple_http_svr_conn_ops
-    {
-        /**
-         * @param svr_conn pointer to server connection struct
-         * @param env pointer to environment struct
-         * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
-         */
-        axis2_status_t (AXIS2_CALL *
-                close)(
-                    axis2_simple_http_svr_conn_t *svr_conn,
-                    const axutil_env_t *env);
-
-        /**
-         * @param svr_conn pointer to server connection struct
-         * @param env pointer to environment struct
-         */
-        axis2_bool_t (AXIS2_CALL *
-                is_open)(
-                    axis2_simple_http_svr_conn_t *svr_conn,
-                    const axutil_env_t *env);
-
-        /**
-         * @param svr_conn pointer to server connection struct
-         * @param env pointer to environment struct
-         * @param keep_alive 
-         * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
-         */
-        axis2_status_t (AXIS2_CALL *
-                set_keep_alive)(
-                    axis2_simple_http_svr_conn_t *svr_conn,
-                    const axutil_env_t *env,
-                    axis2_bool_t keep_alive);
-
-        /**
-         * @param svr_conn pointer to server connection struct
-         * @param env pointer to environment struct
-         */
-        axis2_bool_t (AXIS2_CALL *
-                is_keep_alive)(
-                    axis2_simple_http_svr_conn_t *svr_conn,
-                    const axutil_env_t *env);
-
-        /**
-         * @param svr_conn pointer to server connection struct
-         * @param env pointer to environment struct
-         */
-        axutil_stream_t* (AXIS2_CALL *
-                get_stream)(
-                    const axis2_simple_http_svr_conn_t *svr_conn,
-                    const axutil_env_t *env);
-
-        /**
-         * @param svr_conn pointer to server connection struct
-         * @param env pointer to environment struct
-         */
-        axis2_http_response_writer_t *(AXIS2_CALL *
-                get_writer)(
-                    const axis2_simple_http_svr_conn_t *svr_conn,
-                    const axutil_env_t *env);
-
-        /**
-         * @param svr_conn pointer to server connection struct
-         * @param env pointer to environment struct
-         */
-        axis2_http_simple_request_t *(AXIS2_CALL *
-                read_request)(
-                    axis2_simple_http_svr_conn_t *svr_conn,
-                    const axutil_env_t *env);
-
-        /**
-         * @param svr_conn pointer to server connection struct
-         * @param env pointer to environment struct
-         * @param response response
-         * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
-         */
-        axis2_status_t (AXIS2_CALL *
-                write_response)(
-                    axis2_simple_http_svr_conn_t *svr_conn,
-                    const axutil_env_t *env,
-                    axis2_http_simple_response_t *response);
-
-        /**
-         * @param svr_conn pointer to server connection struct
-         * @param env pointer to environment struct
-         * @param timeout timeout
-         * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
-         */
-        axis2_status_t (AXIS2_CALL *
-                set_rcv_timeout)(
-                    axis2_simple_http_svr_conn_t *svr_conn,
-                    const axutil_env_t *env,
-                    int timeout);
-
-        /**
-         * @param svr_conn pointer to server connection struct
-         * @param env pointer to environment struct
-         * @param timeout timeout
-         * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
-         */
-        axis2_status_t (AXIS2_CALL *
-                set_snd_timeout)(
-                    axis2_simple_http_svr_conn_t *svr_conn,
-                    const axutil_env_t *env,
-                    int timeout);
-
-        /**
-         * @param svr_conn pointer to server connection struct
-         * @param env pointer to environment struct
-         */
-        axis2_char_t *(AXIS2_CALL *
-                get_svr_ip)(
-                    const axis2_simple_http_svr_conn_t *svr_conn,
-                    const axutil_env_t *env);
-
-        /**
-         * @param svr_conn pointer to server connection struct
-         * @param env pointer to environment struct
-         */
-        axis2_char_t *(AXIS2_CALL *
-                get_peer_ip)(
-                    const axis2_simple_http_svr_conn_t *svr_conn,
-                    const axutil_env_t *env);
-
-        /**
-         * @param svr_conn pointer to server connection struct
-         * @param env pointer to environment struct
-         * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
-         */
-        void (AXIS2_CALL *
-                free)(
-                    axis2_simple_http_svr_conn_t *svr_conn,
-                    const axutil_env_t *env);
-    };
-
-    /**
-    * Simple HTTP Server Connection struct
-    */
-    struct axis2_simple_http_svr_conn
-    {
-        /** Simple HTTP Server Connection related ops */
-        axis2_simple_http_svr_conn_ops_t *ops;
-    };
+    AXIS2_EXTERN void AXIS2_CALL
+    axis2_simple_http_svr_conn_free(axis2_simple_http_svr_conn_t *svr_conn,
+        const axutil_env_t *env);
 
 
     /**
@@ -207,67 +175,67 @@
 /** Close.
     @sa axis2_simple_http_svr_conn_ops#close */
 #define AXIS2_SIMPLE_HTTP_SVR_CONN_CLOSE(svr_conn, env) \
-                    ((svr_conn)->ops->close(svr_conn, env))
+                    axis2_simple_http_svr_conn_close(svr_conn, env)
 
 /** Is open.
     @sa axis2_simple_http_svr_conn_ops#is_open */
 #define AXIS2_SIMPLE_HTTP_SVR_CONN_IS_OPEN(svr_conn, env) \
-                    ((svr_conn)->ops->is_open(svr_conn, env))
+                    axis2_simple_http_svr_conn_is_open(svr_conn, env)
 
 /** Keep alive.
     @sa axis2_simple_http_svr_conn_ops#set_keep_alive */
 #define AXIS2_SIMPLE_HTTP_SVR_CONN_SET_KEEP_ALIVE(svr_conn, env, keep_alive)\
-                    ((svr_conn)->ops->set_keep_alive(svr_conn, env, keep_alive))
+                    axis2_simple_http_svr_conn_set_keep_alive(svr_conn, env, keep_alive)
 
 /** Is keep alive.
     @sa axis2_simple_http_svr_conn_ops#is_keep_alive */
 #define AXIS2_SIMPLE_HTTP_SVR_CONN_IS_KEEP_ALIVE(svr_conn, env) \
-                    ((svr_conn)->ops->is_keep_alive(svr_conn, env))
+                    axis2_simple_http_svr_conn_is_keep_alive(svr_conn, env)
 
 /** Get stream.
     @sa axis2_simple_http_svr_conn_ops#get_stream */
 #define AXIS2_SIMPLE_HTTP_SVR_CONN_GET_STREAM(svr_conn, env) \
-                    ((svr_conn)->ops->get_stream(svr_conn, env))
+                    axis2_simple_http_svr_conn_get_stream(svr_conn, env)
 
 /** Set writer.
     @sa axis2_simple_http_svr_conn_ops#set_writer */
 #define AXIS2_SIMPLE_HTTP_SVR_CONN_SET_WRITER(svr_conn, env, writer) \
-                    ((svr_conn)->ops->set_writer(svr_conn, env, writer))
+                    axis2_simple_http_svr_conn_set_writer(svr_conn, env, writer)
 
 /** Read request.
     @sa axis2_simple_http_svr_conn_ops#read_request */
 #define AXIS2_SIMPLE_HTTP_SVR_CONN_READ_REQUEST(svr_conn, env) \
-                    ((svr_conn)->ops->read_request(svr_conn, env))
+                    axis2_simple_http_svr_conn_read_request(svr_conn, env)
 
 /** Write response.
     @sa axis2_simple_http_svr_conn_ops#write_response */
 #define AXIS2_SIMPLE_HTTP_SVR_CONN_WRITE_RESPONSE(svr_conn, env, response) \
-                    ((svr_conn)->ops->write_response(svr_conn, env, response))
+                    axis2_simple_http_svr_conn_write_response(svr_conn, env, response)
 
 /** Set snd timeout.
     @sa axis2_simple_http_svr_conn_ops#set_snd_timeout */
 #define AXIS2_SIMPLE_HTTP_SVR_CONN_SET_SND_TIMEOUT(svr_conn, env, timeout) \
-                    ((svr_conn)->ops->set_snd_timeout(svr_conn, env, timeout))
+                    axis2_simple_http_svr_conn_set_snd_timeout(svr_conn, env, timeout)
 
 /** Set rcv timeout.
     @sa axis2_simple_http_svr_conn_ops#set_rcv_timeout */
 #define AXIS2_SIMPLE_HTTP_SVR_CONN_SET_RCV_TIMEOUT(svr_conn, env, timeout) \
-                    ((svr_conn)->ops->set_rcv_timeout(svr_conn, env, timeout))
+                    axis2_simple_http_svr_conn_set_rcv_timeout(svr_conn, env, timeout)
 
 /** Get svr ip.
     @sa axis2_simple_http_svr_conn_ops#get_svr_ip */
 #define AXIS2_SIMPLE_HTTP_SVR_CONN_GET_SVR_IP(svr_conn, env) \
-                    ((svr_conn)->ops->get_svr_ip(svr_conn, env))
+                    axis2_simple_http_svr_conn_get_svr_ip(svr_conn, env)
 
 /** Get peer ip.
     @sa axis2_simple_http_svr_conn_ops#get_peer_ip */
 #define AXIS2_SIMPLE_HTTP_SVR_CONN_GET_PEER_IP(svr_conn, env) \
-                    ((svr_conn)->ops->get_peer_ip(svr_conn, env))
+                    axis2_simple_http_svr_conn_get_peer_ip(svr_conn, env)
 
 /** Frees the sime http server connection.
     @sa axis2_simple_http_svr_conn_ops#free */
 #define AXIS2_SIMPLE_HTTP_SVR_CONN_FREE(svr_conn, env) \
-                    ((svr_conn)->ops->free(svr_conn, env))
+                    axis2_simple_http_svr_conn_free(svr_conn, env)
 
 /** @} */
 

Modified: webservices/axis2/trunk/c/modules/core/transport/http/common/Makefile.am
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/modules/core/transport/http/common/Makefile.am?view=diff&rev=524362&r1=524361&r2=524362
==============================================================================
--- webservices/axis2/trunk/c/modules/core/transport/http/common/Makefile.am (original)
+++ webservices/axis2/trunk/c/modules/core/transport/http/common/Makefile.am Fri Mar 30 20:53:24 2007
@@ -9,6 +9,8 @@
                                   http_simple_request.c\
                                   http_simple_response.c\
                                   http_status_line.c\
+                                  http_response_writer.c\
+                                  simple_http_svr_conn.c\
                                   http_worker.c
 
 

Added: webservices/axis2/trunk/c/modules/core/transport/http/common/http_response_writer.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/modules/core/transport/http/common/http_response_writer.c?view=auto&rev=524362
==============================================================================
--- webservices/axis2/trunk/c/modules/core/transport/http/common/http_response_writer.c (added)
+++ webservices/axis2/trunk/c/modules/core/transport/http/common/http_response_writer.c Fri Mar 30 20:53:24 2007
@@ -0,0 +1,229 @@
+/*
+ * 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_response_writer.h>
+#include <axutil_array_list.h>
+#include <axis2_http_transport.h>
+#include <axutil_string.h>
+
+struct axis2_http_response_writer
+{
+    axutil_stream_t *stream;
+    axis2_char_t *encoding;
+};
+
+AXIS2_EXTERN axis2_http_response_writer_t *AXIS2_CALL
+axis2_http_response_writer_create(
+    const axutil_env_t *env,
+    axutil_stream_t *stream)
+{
+    AXIS2_ENV_CHECK(env, NULL);
+    return axis2_http_response_writer_create_with_encoding(env, stream,
+            AXIS2_HTTP_DEFAULT_CONTENT_CHARSET);
+
+}
+
+AXIS2_EXTERN axis2_http_response_writer_t *AXIS2_CALL
+axis2_http_response_writer_create_with_encoding(
+    const axutil_env_t *env,
+    axutil_stream_t *stream,
+    const axis2_char_t *encoding)
+{
+    axis2_http_response_writer_t *response_writer = NULL;
+    AXIS2_ENV_CHECK(env, NULL);
+    AXIS2_PARAM_CHECK(env->error, encoding, NULL);
+
+    response_writer = (axis2_http_response_writer_t *)AXIS2_MALLOC
+            (env->allocator, sizeof(
+                        axis2_http_response_writer_t));
+
+    if (! response_writer)
+    {
+        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        return NULL;
+    }
+    response_writer->stream = stream;
+    response_writer->encoding = (axis2_char_t *)axis2_strdup(env, encoding);
+
+    return response_writer;
+}
+
+
+AXIS2_EXTERN void AXIS2_CALL
+axis2_http_response_writer_free(
+    axis2_http_response_writer_t *response_writer,
+    const axutil_env_t *env)
+{
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    AXIS2_FREE(env->allocator,
+        response_writer->encoding);
+
+    AXIS2_FREE(env->allocator, response_writer);
+
+    return;
+}
+
+AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+axis2_http_response_writer_get_encoding(
+    const axis2_http_response_writer_t *response_writer,
+    const axutil_env_t *env)
+{
+    AXIS2_ENV_CHECK(env, NULL);
+    return response_writer->encoding;
+}
+
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_http_response_writer_close(
+    axis2_http_response_writer_t *response_writer,
+    const axutil_env_t *env)
+{
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    return AXIS2_SUCCESS;
+}
+
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_http_response_writer_flush(
+    axis2_http_response_writer_t *response_writer,
+    const axutil_env_t *env)
+{
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    /*
+        TODO if bufferring is added flush the buffer
+    */
+    return AXIS2_FALSE;
+}
+
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_http_response_writer_write_char(
+    axis2_http_response_writer_t *response_writer,
+    const axutil_env_t *env,
+    char c)
+{
+    int write = -1;
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+
+    if (! response_writer->stream)
+    {
+        return AXIS2_FAILURE;
+    }
+    write = AXIS2_STREAM_WRITE(response_writer->stream, env, &c, 1);
+    if (write < 0)
+    {
+        return AXIS2_FAILURE;
+    }
+    return AXIS2_SUCCESS;
+}
+
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_http_response_writer_write_buf(
+    axis2_http_response_writer_t *response_writer,
+    const axutil_env_t *env,
+    char *buf,
+    int offset,
+    axis2_ssize_t len)
+{
+    int write = -1;
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    AXIS2_PARAM_CHECK(env->error, buf, AXIS2_FAILURE);
+
+    if (! response_writer->stream)
+    {
+        return AXIS2_FAILURE;
+    }
+    write = AXIS2_STREAM_WRITE(response_writer->stream, env, buf, len);
+    if (write < 0)
+    {
+        return AXIS2_FAILURE;
+    }
+    /*
+         TODO handle offset
+     */
+    return AXIS2_SUCCESS;
+}
+
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_http_response_writer_print_str(
+    axis2_http_response_writer_t *response_writer,
+    const axutil_env_t *env,
+    const char *str)
+{
+    int write = -1;
+    int len = -1;
+
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    AXIS2_PARAM_CHECK(env->error, str, AXIS2_FAILURE);
+
+    len = axis2_strlen(str);
+    if (! response_writer->stream)
+    {
+        return AXIS2_FAILURE;
+    }
+    write = AXIS2_STREAM_WRITE(response_writer->stream, env, str, len);
+    if (write < 0)
+    {
+        return AXIS2_FAILURE;
+    }
+    return AXIS2_SUCCESS;
+}
+
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_http_response_writer_print_int(
+    axis2_http_response_writer_t *response_writer,
+    const axutil_env_t *env,
+    int i)
+{
+    axis2_char_t int_str[10];
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    sprintf(int_str, "%10d", i);
+    return axis2_http_response_writer_print_str(response_writer, env, int_str);
+}
+
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_http_response_writer_println_str(
+    axis2_http_response_writer_t *response_writer,
+    const axutil_env_t *env,
+    const char *str)
+{
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    AXIS2_PARAM_CHECK(env->error, str, AXIS2_FAILURE);
+
+    if (AXIS2_SUCCESS == axis2_http_response_writer_print_str(response_writer,
+            env, str))
+    {
+        return axis2_http_response_writer_print_str(response_writer, env,
+                AXIS2_HTTP_CRLF);
+    }
+    return AXIS2_FAILURE;
+}
+
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_http_response_writer_println(
+    axis2_http_response_writer_t *response_writer,
+    const axutil_env_t *env)
+{
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    return axis2_http_response_writer_print_str(response_writer, env,
+            AXIS2_HTTP_CRLF);
+}

Added: webservices/axis2/trunk/c/modules/core/transport/http/common/simple_http_svr_conn.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/modules/core/transport/http/common/simple_http_svr_conn.c?view=auto&rev=524362
==============================================================================
--- webservices/axis2/trunk/c/modules/core/transport/http/common/simple_http_svr_conn.c (added)
+++ webservices/axis2/trunk/c/modules/core/transport/http/common/simple_http_svr_conn.c Fri Mar 30 20:53:24 2007
@@ -0,0 +1,493 @@
+/*
+ * 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_simple_http_svr_conn.h>
+#include <axis2_http_transport.h>
+#include <axutil_string.h>
+#include <axutil_network_handler.h>
+#include <axis2_http_chunked_stream.h>
+#include <platforms/axis2_platform_auto_sense.h>
+
+struct axis2_simple_http_svr_conn
+{
+    int socket;
+    axutil_stream_t *stream;
+    axis2_bool_t keep_alive;
+};
+
+AXIS2_EXTERN axis2_simple_http_svr_conn_t *AXIS2_CALL
+axis2_simple_http_svr_conn_create(
+    const axutil_env_t *env,
+    int sockfd)
+{
+    axis2_simple_http_svr_conn_t *svr_conn = NULL;
+    AXIS2_ENV_CHECK(env, NULL);
+    svr_conn = (axis2_simple_http_svr_conn_t *)
+            AXIS2_MALLOC(env->allocator,
+                    sizeof(axis2_simple_http_svr_conn_t));
+
+    if (! svr_conn)
+    {
+        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        return NULL;
+    }
+    svr_conn->socket = sockfd;
+    svr_conn->stream = NULL;
+    svr_conn->keep_alive = AXIS2_FALSE;
+
+    if (-1 != svr_conn->socket)
+    {
+        svr_conn->stream = axutil_stream_create_socket(env,
+                svr_conn->socket);
+        if (! svr_conn->stream)
+        {
+            axis2_simple_http_svr_conn_free((axis2_simple_http_svr_conn_t *)
+                    svr_conn, env);
+            return NULL;
+        }
+    }
+    return svr_conn;
+}
+
+AXIS2_EXTERN void AXIS2_CALL
+axis2_simple_http_svr_conn_free(
+    axis2_simple_http_svr_conn_t *svr_conn,
+    const axutil_env_t *env)
+{
+    axis2_simple_http_svr_conn_close(svr_conn, env);
+
+    AXIS2_FREE(env->allocator, svr_conn);
+
+    return;
+}
+
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_simple_http_svr_conn_close(
+    axis2_simple_http_svr_conn_t *svr_conn,
+    const axutil_env_t *env)
+{
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+
+    AXIS2_STREAM_FREE(svr_conn->stream, env);
+    if (-1 != svr_conn->socket)
+    {
+        axutil_network_handler_close_socket(env, svr_conn->socket);
+        svr_conn->socket = -1;
+    }
+    return AXIS2_SUCCESS;
+}
+
+
+AXIS2_EXTERN axis2_bool_t AXIS2_CALL
+axis2_simple_http_svr_conn_is_open(
+    axis2_simple_http_svr_conn_t *svr_conn,
+    const axutil_env_t *env)
+{
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    if (-1 != svr_conn->socket)
+    {
+        return AXIS2_TRUE;
+    }
+    else
+    {
+        return AXIS2_FALSE;
+    }
+    return AXIS2_FALSE;
+}
+
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_simple_http_svr_conn_set_keep_alive(
+    axis2_simple_http_svr_conn_t *svr_conn,
+    const axutil_env_t *env,
+    axis2_bool_t keep_alive)
+{
+    svr_conn->keep_alive = keep_alive;
+    return AXIS2_SUCCESS;
+}
+
+
+AXIS2_EXTERN axis2_bool_t AXIS2_CALL
+axis2_simple_http_svr_conn_is_keep_alive(
+    axis2_simple_http_svr_conn_t *svr_conn,
+    const axutil_env_t *env)
+{
+    return svr_conn->keep_alive;
+}
+
+
+AXIS2_EXTERN axutil_stream_t *AXIS2_CALL
+axis2_simple_http_svr_conn_get_stream(
+    const axis2_simple_http_svr_conn_t *svr_conn,
+    const axutil_env_t *env)
+{
+    return svr_conn->stream;
+}
+
+
+AXIS2_EXTERN axis2_http_response_writer_t *AXIS2_CALL
+axis2_simple_http_svr_conn_get_writer(
+    const axis2_simple_http_svr_conn_t *svr_conn,
+    const axutil_env_t *env)
+{
+    return axis2_http_response_writer_create(env,
+            svr_conn->stream);
+}
+
+
+AXIS2_EXTERN axis2_http_simple_request_t *AXIS2_CALL
+axis2_simple_http_svr_conn_read_request(
+    axis2_simple_http_svr_conn_t *svr_conn,
+    const axutil_env_t *env)
+{
+    axis2_char_t str_line[2048];
+    axis2_char_t tmp_buf[2048];
+    int read = -1;
+    axis2_bool_t end_of_line = AXIS2_FALSE;
+    axis2_bool_t end_of_headers = AXIS2_FALSE;
+    axis2_http_request_line_t *request_line = NULL;
+    axis2_http_simple_request_t *request = NULL;
+
+    AXIS2_ENV_CHECK(env, NULL);
+
+    memset(str_line, 0, 2048);
+    while ((read = axutil_stream_peek_socket(svr_conn->stream, env, tmp_buf, 2048)) > 0)
+    {
+        axis2_char_t *start = tmp_buf;
+        axis2_char_t *end = NULL;
+        tmp_buf[read] = '\0';
+        end = strstr(tmp_buf, AXIS2_HTTP_CRLF);
+        if (end)
+        {
+            read = AXIS2_STREAM_READ(svr_conn->stream, env, tmp_buf, end - start + 2);
+            if (read > 0)
+            {
+                tmp_buf[read] = '\0';
+                strcat(str_line, tmp_buf);
+                break;
+            }
+            else
+            {
+                break;
+            }
+        }
+        else
+        {
+            read = AXIS2_STREAM_READ(svr_conn->stream, env, tmp_buf, 2048);
+            if (read > 0)
+            {
+                tmp_buf[read] = '\0';
+                strcat(str_line, tmp_buf);
+            }
+        }
+    }
+    
+    /*while ((read = AXIS2_STREAM_READ(svr_conn->stream, env, tmp_buf,
+            1)) > 0)
+    {
+        tmp_buf[read] = '\0';
+        strcat(str_line, tmp_buf);
+        if (0 != strstr(str_line, AXIS2_HTTP_CRLF))
+        {
+            end_of_line = AXIS2_TRUE;
+        }
+        if (AXIS2_TRUE == end_of_line)
+        {
+            break;
+        }
+    }*/
+    
+    if (str_line)
+    {
+        if (0 != axis2_strncasecmp(str_line, "GET", 3) && 0 !=
+                axis2_strncasecmp(str_line, "POST", 4))
+        {
+            char write_buf[512];
+            sprintf(write_buf, "%s %s\r\n%s: close\r\n\r\n",
+                    AXIS2_HTTP_HEADER_PROTOCOL_11,
+                    AXIS2_HTTP_RESPONSE_BAD_REQUEST,
+                    AXIS2_HTTP_HEADER_CONNECTION);
+            AXIS2_STREAM_WRITE(svr_conn->stream, env, write_buf,
+                    axis2_strlen(write_buf) + 1);
+            return NULL;
+        }
+    }
+    request_line = axis2_http_request_line_parse_line(env, str_line);
+    if (! request_line)
+    {
+        AXIS2_ERROR_SET(env->error,
+                AXIS2_ERROR_INVALID_HTTP_HEADER_START_LINE,
+                AXIS2_FAILURE);
+        return NULL;
+    }
+    request = axis2_http_simple_request_create(env, request_line, NULL , 0,
+            svr_conn->stream);
+    /* now read the headers */
+    memset(str_line, 0, 2048);
+    end_of_line = AXIS2_FALSE;
+    while (AXIS2_FALSE == end_of_headers)
+    {
+        while ((read = axutil_stream_peek_socket(svr_conn->stream, env, tmp_buf, 2048)) > 0)
+        {
+            axis2_char_t *start = tmp_buf;
+            axis2_char_t *end = NULL;
+            tmp_buf[read] = '\0';
+            end = strstr(tmp_buf, AXIS2_HTTP_CRLF);
+            if (end)
+            {
+                read = AXIS2_STREAM_READ(svr_conn->stream, env, tmp_buf, end - start + 2);
+                if (read > 0)
+                {
+                    tmp_buf[read] = '\0';
+                    strcat(str_line, tmp_buf);
+                    end_of_line = AXIS2_TRUE;
+                    break;
+                }
+                else
+                {
+                    break;
+                }
+            }
+            else
+            {
+                read = AXIS2_STREAM_READ(svr_conn->stream, env, tmp_buf, 2048);
+                if (read > 0)
+                {
+                    tmp_buf[read] = '\0';
+                    strcat(str_line, tmp_buf);
+                }
+            }
+        }
+    
+        /*while ((read = AXIS2_STREAM_READ(svr_conn->stream, env, tmp_buf,
+                1)) > 0)
+        {
+            tmp_buf[read] = '\0';
+            strcat(str_line, tmp_buf);
+            if (0 != strstr(str_line, AXIS2_HTTP_CRLF))
+            {
+                end_of_line = AXIS2_TRUE;
+                break;
+            }
+        }*/
+        if (AXIS2_TRUE == end_of_line)
+        {
+            if (0 == axis2_strcmp(str_line, AXIS2_HTTP_CRLF))
+            {
+                end_of_headers = AXIS2_TRUE;
+            }
+            else
+            {
+                axis2_http_header_t *tmp_header =
+                    axis2_http_header_create_by_str(env, str_line);
+                memset(str_line, 0, 2048);
+                if (tmp_header)
+                {
+                    AXIS2_HTTP_SIMPLE_REQUEST_ADD_HEADER(request, env,
+                            tmp_header);
+                }
+            }
+        }
+        end_of_line = AXIS2_FALSE;
+    }
+    return request;
+}
+
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_simple_http_svr_conn_write_response(
+    axis2_simple_http_svr_conn_t *svr_conn,
+    const axutil_env_t *env,
+    axis2_http_simple_response_t *response)
+{
+    axis2_http_response_writer_t *response_writer = NULL;
+    axutil_array_list_t *headers = NULL;
+    axutil_stream_t *response_stream = NULL;
+    axis2_char_t *response_body = NULL;
+    int body_size = 0;
+    int i = 0;
+    axis2_http_header_t *enc_header = NULL;
+    axis2_bool_t chuked_encoding = AXIS2_FALSE;
+    axis2_char_t *status_line = NULL;
+    axis2_bool_t binary_content = AXIS2_FALSE;
+    axis2_char_t *content_type = NULL;
+
+
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    AXIS2_PARAM_CHECK(env->error, response, AXIS2_FAILURE);
+
+    response_writer = axis2_http_response_writer_create(env,
+            svr_conn->stream);
+    content_type = (axis2_char_t *)AXIS2_HTTP_SIMPLE_RESPONSE_GET_CONTENT_TYPE(
+                response, env);
+    if (content_type)
+    {
+        if (strstr(content_type, AXIS2_HTTP_HEADER_ACCEPT_MULTIPART_RELATED)
+                && strstr(content_type, AXIS2_HTTP_HEADER_XOP_XML))
+            binary_content = AXIS2_TRUE;
+    }
+    if (! response_writer)
+    {
+        return AXIS2_FAILURE;
+    }
+    enc_header = AXIS2_HTTP_SIMPLE_RESPONSE_GET_FIRST_HEADER(response, env,
+            AXIS2_HTTP_HEADER_TRANSFER_ENCODING);
+    if (enc_header)
+    {
+        axis2_char_t *enc_value = AXIS2_HTTP_HEADER_GET_VALUE(enc_header, env);
+        if (enc_value)
+        {
+            if (0 == axis2_strcmp(enc_value,
+                    AXIS2_HTTP_HEADER_TRANSFER_ENCODING_CHUNKED))
+            {
+                chuked_encoding = AXIS2_TRUE;
+                /* remove the content length header */
+                if (AXIS2_TRUE == AXIS2_HTTP_SIMPLE_RESPONSE_CONTAINS_HEADER(
+                            response, env, AXIS2_HTTP_HEADER_CONTENT_LENGTH))
+                {
+                    AXIS2_HTTP_SIMPLE_RESPONSE_REMOVE_HEADERS(response, env,
+                            AXIS2_HTTP_HEADER_CONTENT_LENGTH);
+                }
+            }
+        }
+    }
+    status_line = AXIS2_HTTP_SIMPLE_RESPONSE_GET_STATUS_LINE(response, env);
+    if (! status_line)
+    {
+        AXIS2_ERROR_SET(env->error,
+                AXIS2_ERROR_INVALID_HTTP_HEADER_START_LINE,
+                AXIS2_FAILURE);
+        AXIS2_HTTP_RESPONSE_WRITER_FREE(response_writer, env);
+        response_writer = NULL;
+        return AXIS2_FAILURE;
+    }
+    AXIS2_HTTP_RESPONSE_WRITER_PRINT_STR(response_writer, env, status_line);
+    headers = AXIS2_HTTP_SIMPLE_RESPONSE_GET_HEADERS(response, env);
+
+    if (headers)
+    {
+        for (i = 0; i < axutil_array_list_size(headers, env); i++)
+        {
+            axis2_http_header_t *header = NULL;
+            header = (axis2_http_header_t *)axutil_array_list_get(headers, env,
+                    i);
+            if (header)
+            {
+                axis2_char_t *header_ext_form =
+                    AXIS2_HTTP_HEADER_TO_EXTERNAL_FORM(
+                        (axis2_http_header_t*)header, env);
+                AXIS2_HTTP_RESPONSE_WRITER_PRINT_STR(response_writer, env,
+                        header_ext_form);
+                AXIS2_FREE(env->allocator, header_ext_form);
+            }
+        }
+    }
+    AXIS2_HTTP_RESPONSE_WRITER_PRINTLN(response_writer, env);
+
+    response_stream = AXIS2_HTTP_SIMPLE_RESPONSE_GET_BODY(response, env);
+    if (response_stream)
+    {
+        body_size = AXIS2_STREAM_BASIC_GET_LEN(response_stream, env);
+        response_body = axutil_stream_get_buffer(response_stream, env);
+        axutil_stream_flush_buffer(response_stream, env);
+        response_body[body_size] = '\0';
+    }
+
+    if (body_size <= 0)
+    {
+        AXIS2_HTTP_RESPONSE_WRITER_FREE(response_writer, env);
+        return AXIS2_SUCCESS;
+    }
+    if (AXIS2_FALSE == chuked_encoding)
+    {
+        axis2_status_t write_stat = AXIS2_FAILURE;
+        if (AXIS2_FALSE == binary_content)
+            write_stat = AXIS2_HTTP_RESPONSE_WRITER_PRINTLN_STR(response_writer,
+                    env, response_body);
+        else
+        {
+            write_stat = AXIS2_HTTP_RESPONSE_WRITER_WRITE_BUF(response_writer,
+                    env, response_body, 0, body_size);
+        }
+
+        if (AXIS2_SUCCESS != write_stat)
+        {
+            AXIS2_ERROR_SET(env->error, AXIS2_ERROR_WRITING_RESPONSE,
+                    AXIS2_FAILURE);
+            AXIS2_HTTP_RESPONSE_WRITER_FREE(response_writer, env);
+            return AXIS2_FAILURE;
+        }
+    }
+    else
+    {
+        axis2_http_chunked_stream_t *chunked_stream = NULL;
+        int left = body_size;
+        chunked_stream = axis2_http_chunked_stream_create(env,
+                svr_conn->stream);
+        while (left > 0)
+        {
+            left -= AXIS2_HTTP_CHUNKED_STREAM_WRITE(chunked_stream, env,
+                    response_body, body_size);
+        }
+        AXIS2_HTTP_CHUNKED_STREAM_WRITE_LAST_CHUNK(chunked_stream, env);
+        AXIS2_HTTP_CHUNKED_STREAM_FREE(chunked_stream, env);
+    }
+    /*AXIS2_FREE(env->allocator, response_body);*/
+    AXIS2_HTTP_RESPONSE_WRITER_FREE(response_writer, env);
+    return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_simple_http_svr_conn_set_rcv_timeout(
+    axis2_simple_http_svr_conn_t *svr_conn,
+    const axutil_env_t *env,
+    int timeout)
+{
+    return axutil_network_handler_set_sock_option(env,
+            svr_conn->socket, SO_RCVTIMEO,
+            timeout);
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_simple_http_svr_conn_set_snd_timeout(
+    axis2_simple_http_svr_conn_t *svr_conn,
+    const axutil_env_t *env,
+    int timeout)
+{
+    return axutil_network_handler_set_sock_option(env,
+            svr_conn->socket, SO_SNDTIMEO,
+            timeout);
+}
+
+AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+axis2_simple_http_svr_conn_get_svr_ip(
+    const axis2_simple_http_svr_conn_t *svr_conn,
+    const axutil_env_t *env)
+{
+    return axutil_network_handler_get_svr_ip(env,
+            svr_conn->socket);
+}
+
+AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+axis2_simple_http_svr_conn_get_peer_ip(
+    const axis2_simple_http_svr_conn_t *svr_conn,
+    const axutil_env_t *env)
+{
+    return axutil_network_handler_get_peer_ip(env,
+            svr_conn->socket);
+}

Modified: webservices/axis2/trunk/c/modules/core/transport/http/receiver/Makefile.am
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/modules/core/transport/http/receiver/Makefile.am?view=diff&rev=524362&r1=524361&r2=524362
==============================================================================
--- webservices/axis2/trunk/c/modules/core/transport/http/receiver/Makefile.am (original)
+++ webservices/axis2/trunk/c/modules/core/transport/http/receiver/Makefile.am Fri Mar 30 20:53:24 2007
@@ -3,9 +3,7 @@
                                  $(top_builddir)/modules/core/transport/http/common/libaxis2_http_common.la
 
 
-libaxis2_http_receiver_la_SOURCES = http_response_writer.c\
-				    simple_http_svr_conn.c\
-                                    http_receiver.c\
+libaxis2_http_receiver_la_SOURCES = http_receiver.c\
                                     http_svr_thread.c
 
 



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org