You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by sa...@apache.org on 2006/01/11 17:25:15 UTC
svn commit: r368055 - in
/webservices/axis2/trunk/c/modules/core/transport/http: axis2_http_client.c
axis2_simple_http_svr_conn.c
Author: samisa
Date: Wed Jan 11 08:25:07 2006
New Revision: 368055
URL: http://svn.apache.org/viewcvs?rev=368055&view=rev
Log:
Added functionality
Modified:
webservices/axis2/trunk/c/modules/core/transport/http/axis2_http_client.c
webservices/axis2/trunk/c/modules/core/transport/http/axis2_simple_http_svr_conn.c
Modified: webservices/axis2/trunk/c/modules/core/transport/http/axis2_http_client.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/core/transport/http/axis2_http_client.c?rev=368055&r1=368054&r2=368055&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/core/transport/http/axis2_http_client.c (original)
+++ webservices/axis2/trunk/c/modules/core/transport/http/axis2_http_client.c Wed Jan 11 08:25:07 2006
@@ -284,9 +284,6 @@
if(0 != strstr(str_status_line, AXIS2_HTTP_CRLF))
{
end_of_line = AXIS2_TRUE;
- }
- if(AXIS2_TRUE == end_of_line)
- {
break;
}
}
@@ -319,9 +316,6 @@
if(0 != strstr(str_header, AXIS2_HTTP_CRLF))
{
end_of_line = AXIS2_TRUE;
- }
- if(AXIS2_TRUE == end_of_line)
- {
break;
}
}
Modified: webservices/axis2/trunk/c/modules/core/transport/http/axis2_simple_http_svr_conn.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/core/transport/http/axis2_simple_http_svr_conn.c?rev=368055&r1=368054&r2=368055&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/core/transport/http/axis2_simple_http_svr_conn.c (original)
+++ webservices/axis2/trunk/c/modules/core/transport/http/axis2_simple_http_svr_conn.c Wed Jan 11 08:25:07 2006
@@ -16,6 +16,8 @@
#include <axis2_simple_http_svr_conn.h>
#include <unistd.h>
+#include <axis2_http_transport.h>
+#include <axis2_string.h>
/**
* @brief Simple HTTP Server Connection struct impl
@@ -70,7 +72,7 @@
axis2_simple_http_svr_conn_write_response
(axis2_simple_http_svr_conn_t *svr_conn,
axis2_env_t **env,
- const axis2_http_simple_response_t *response);
+ axis2_http_simple_response_t *response);
axis2_status_t AXIS2_CALL
axis2_simple_http_svr_conn_free(axis2_simple_http_svr_conn_t *svr_conn,
@@ -96,6 +98,17 @@
svr_conn_impl->stream = NULL;
svr_conn_impl->keep_alive = AXIS2_FALSE;
+ if(-1 != svr_conn_impl->socket)
+ {
+ svr_conn_impl->stream = axis2_stream_create_socket(env,
+ svr_conn_impl->socket);
+ if(NULL == svr_conn_impl->stream)
+ {
+ axis2_simple_http_svr_conn_free((axis2_simple_http_svr_conn_t *)
+ svr_conn_impl, env);
+ return NULL;
+ }
+ }
svr_conn_impl->svr_conn.ops = AXIS2_MALLOC((*env)->allocator,
sizeof(axis2_simple_http_svr_conn_ops_t));
if(NULL == svr_conn_impl->svr_conn.ops)
@@ -238,23 +251,145 @@
axis2_simple_http_svr_conn_read_request(axis2_simple_http_svr_conn_t *svr_conn,
axis2_env_t **env)
{
+ axis2_char_t str_line[1024];
+ axis2_char_t tmp_buf[3];
+ axis2_simple_http_svr_conn_impl_t *svr_conn_impl = NULL;
+ 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_FUNC_PARAM_CHECK(svr_conn, env, NULL);
- /*
- TODO stream dependant code
- */
- return NULL;
+
+ svr_conn_impl = AXIS2_INTF_TO_IMPL(svr_conn);
+ memset(str_line, 0, 1024);
+ while((read = AXIS2_STREAM_READ(svr_conn_impl->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;
+ }
+ }
+ request_line = axis2_http_request_line_parse_line(env, str_line);
+ if(NULL == request_line)
+ {
+ AXIS2_ERROR_SET((*env)->error,
+ AXIS2_ERROR_INVALID_HTTP_INVALID_HEADER_START_LINE,
+ AXIS2_FAILURE);
+ return NULL;
+ }
+ request = axis2_http_simple_request_create(env, request_line, NULL , 0,
+ svr_conn_impl->stream);
+ /* now read the headers */
+ memset(str_line, 0, 1024);
+ end_of_line = AXIS2_FALSE;
+ while(AXIS2_FALSE == end_of_headers)
+ {
+ while((read = AXIS2_STREAM_READ(svr_conn_impl->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, 1024);
+ if(NULL != tmp_header)
+ {
+ AXIS2_HTTP_SIMPLE_REQUEST_ADD_HEADER(request, env,
+ tmp_header);
+ }
+ }
+ }
+ end_of_line = AXIS2_FALSE;
+ }
+ return request;
}
axis2_status_t AXIS2_CALL
axis2_simple_http_svr_conn_write_response
- (axis2_simple_http_svr_conn_t *svr_conn,
- axis2_env_t **env,
- const axis2_http_simple_response_t *response)
-{
+ (axis2_simple_http_svr_conn_t *svr_conn,
+ axis2_env_t **env,
+ axis2_http_simple_response_t *response)
+{
+ axis2_http_response_writer_t *response_writer = NULL;
+ axis2_simple_http_svr_conn_impl_t *svr_conn_impl = NULL;
+ axis2_array_list_t *headers = NULL;
+ axis2_stream_t *response_stream = NULL;
+ axis2_char_t *response_body = NULL;
+ int body_size = NULL;
+ int i = 0;
+
AXIS2_FUNC_PARAM_CHECK(svr_conn, env, AXIS2_FAILURE);
+ AXIS2_PARAM_CHECK((*env)->error, response, AXIS2_FAILURE);
+
+ svr_conn_impl = AXIS2_INTF_TO_IMPL(svr_conn);
+ response_writer = axis2_http_response_writer_create(env,
+ svr_conn_impl->stream);
+ if(NULL == response_writer)
+ {
+ return AXIS2_FAILURE;
+ }
+
+ AXIS2_HTTP_RESPONSE_WRITER_PRINTLN_STR(response_writer, env,
+ AXIS2_HTTP_SIMPLE_RESPONSE_GET_STAUTUS_LINE(response,
+ env));
+ headers = AXIS2_HTTP_SIMPLE_RESPONSE_GET_HEADERS(response, env);
+
+
+
+ for(i = 0; i < AXIS2_ARRAY_LIST_SIZE(headers, env); i++)
+ {
+ axis2_http_header_t *header = NULL;
+ header = (axis2_http_header_t *)AXIS2_ARRAY_LIST_GET(headers, env, i);
+ if(NULL != header)
+ {
+ AXIS2_HTTP_RESPONSE_WRITER_PRINTLN_STR(response_writer, env,
+ AXIS2_HTTP_HEADER_TO_EXTERNAL_FORM(
+ (axis2_http_header_t*)header, env));
+ }
+ }
+ AXIS2_HTTP_RESPONSE_WRITER_PRINTLN(response_writer, env);
+
+ response_stream = AXIS2_HTTP_SIMPLE_RESPONSE_GET_BODY(response, env);
+ body_size = AXIS2_HTTP_SIMPLE_RESPONSE_GET_BODY_BYTES(response, env,
+ &response_body);
+ if(body_size > 0)
+ {
+ int write_size = 0;
+ write_size = AXIS2_STREAM_WRITE(response_stream, env, response_body,
+ body_size);
+ if(write_size < 0)
+ {
+ AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_WRITING_RESPONSE,
+ AXIS2_FAILURE);
+ return AXIS2_FAILURE;
+ }
+ }
/*
- TODO stream dependant code
+ TODO chunking
*/
return AXIS2_SUCCESS;
}