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