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 pi...@apache.org on 2008/01/24 10:27:27 UTC
svn commit: r614828 - in /webservices/axis2/trunk/c/tools/tcpmon/src:
entry.c session.c tcpmon.c
Author: pini
Date: Thu Jan 24 01:26:46 2008
New Revision: 614828
URL: http://svn.apache.org/viewvc?rev=614828&view=rev
Log:
Fixing jira issue 296
Modified:
webservices/axis2/trunk/c/tools/tcpmon/src/entry.c
webservices/axis2/trunk/c/tools/tcpmon/src/session.c
webservices/axis2/trunk/c/tools/tcpmon/src/tcpmon.c
Modified: webservices/axis2/trunk/c/tools/tcpmon/src/entry.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/tools/tcpmon/src/entry.c?rev=614828&r1=614827&r2=614828&view=diff
==============================================================================
--- webservices/axis2/trunk/c/tools/tcpmon/src/entry.c (original)
+++ webservices/axis2/trunk/c/tools/tcpmon/src/entry.c Thu Jan 24 01:26:46 2008
@@ -431,6 +431,14 @@
{
(on_trans_fault_funct) (env, "Missing target port and host");
}
+ if (thd)
+ {
+ AXIS2_FREE(env->allocator, thd);
+ }
+ if (data)
+ {
+ AXIS2_FREE(env->allocator, (tcpmon_entry_request_data_t *)data);
+ }
return NULL;
}
client_stream = axutil_stream_create_socket(env, client_socket);
@@ -445,6 +453,14 @@
{
(on_trans_fault_funct) (env, "error in creating the client stream");
}
+ if (thd)
+ {
+ AXIS2_FREE(env->allocator, thd);
+ }
+ if (data)
+ {
+ AXIS2_FREE(env->allocator, (tcpmon_entry_request_data_t *)data);
+ }
return NULL;
}
@@ -495,6 +511,14 @@
{
(on_trans_fault_funct) (env, "error in creating the host socket");
}
+ if (thd)
+ {
+ AXIS2_FREE(env->allocator, thd);
+ }
+ if (data)
+ {
+ AXIS2_FREE(env->allocator, (tcpmon_entry_request_data_t *)data);
+ }
return NULL;
}
@@ -513,6 +537,14 @@
{
(on_trans_fault_funct) (env, "error in creating the host stream");
}
+ if (thd)
+ {
+ AXIS2_FREE(env->allocator, thd);
+ }
+ if (data)
+ {
+ AXIS2_FREE(env->allocator, (tcpmon_entry_request_data_t *)data);
+ }
return NULL;
}
@@ -569,6 +601,18 @@
axutil_network_handler_close_socket(env, client_socket);
axutil_network_handler_close_socket(env, host_socket);
+ if (entry_impl)
+ {
+ tcpmon_entry_free(&(entry_impl->entry), env);
+ }
+ if (thd)
+ {
+ AXIS2_FREE(env->allocator, thd);
+ }
+ if (data)
+ {
+ AXIS2_FREE(env->allocator, (tcpmon_entry_request_data_t *)data);
+ }
return NULL;
}
@@ -589,6 +633,7 @@
int read = 0;
int header_width = 0;
int current_line_offset = 0;
+ int mtom_optimized = 0;
axis2_char_t *current_line = NULL;
int line_just_ended = 1;
axis2_char_t *length_char = 0;
@@ -600,6 +645,7 @@
{
buffer = AXIS2_REALLOC(env->allocator, buffer,
sizeof(axis2_char_t) * (read_size + 1));
+ *(buffer + read_size) = '\0';
read = axutil_stream_read(stream, env, buffer + read_size, 1);
if (header_just_finished)
@@ -613,6 +659,8 @@
{
*(buffer + read_size) = '\0';
current_line = buffer + current_line_offset;
+ if (!mtom_optimized && strstr(current_line, "multipart/related"))
+ mtom_optimized = 1;
if (strstr(current_line, "Content-Length"))
{
if ((length_char = strstr(current_line, ":")))
@@ -659,6 +707,10 @@
{
header_found = 1;
*(buffer + read_size - 3) = '\0';
+ if (header_ptr)
+ {
+ AXIS2_FREE(env->allocator, header_ptr);
+ }
header_ptr = (axis2_char_t *) axutil_strdup(env, buffer);
header_just_finished = 1;
*(buffer + read_size - 3) = '\r';
@@ -673,24 +725,50 @@
chunked_encoded = 1;
header_found = 1;
*(buffer + read_size - 3) = '\0';
+ if (header_ptr)
+ {
+ AXIS2_FREE(env->allocator, header_ptr);
+ }
header_ptr = (axis2_char_t *) axutil_strdup(env, buffer);
header_just_finished = 1;
*(buffer + read_size - 3) = '\r';
}
+ if (!(*(buffer + read_size - 1)))
+ {
+ if (!mtom_optimized)
+ {
+ read_size--;
+ length = 0;
+ }
+ else
+ {
+ *(buffer + read_size - 1) = ' ';
+ }
+ }
}
while (length != 0);
+ buffer = AXIS2_REALLOC(env->allocator, buffer,
+ sizeof(axis2_char_t) * (read_size + 1));
+ *(buffer + read_size) = '\0';
+
if (header_width != 0)
{
body_ptr = buffer + header_width;
- *data = (axis2_char_t *) axutil_strdup(env, body_ptr);
+ if (body_ptr && *body_ptr)
+ {
+ *data = (axis2_char_t *) axutil_strdup(env, body_ptr);
+ }
+ body_ptr = NULL;
}
else
{
- *(buffer + read_size) = '\0';
+ if (header_ptr)
+ {
+ AXIS2_FREE(env->allocator, header_ptr);
+ }
header_ptr = (axis2_char_t *) axutil_strdup(env, buffer);
-
- /** soap body part is unavailable */
+ /** soap body part is unavailable */
*data = NULL;
}
Modified: webservices/axis2/trunk/c/tools/tcpmon/src/session.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/tools/tcpmon/src/session.c?rev=614828&r1=614827&r2=614828&view=diff
==============================================================================
--- webservices/axis2/trunk/c/tools/tcpmon/src/session.c (original)
+++ webservices/axis2/trunk/c/tools/tcpmon/src/session.c Thu Jan 24 01:26:46 2008
@@ -56,6 +56,9 @@
#define AXIS2_INTF_TO_IMPL(session) \
((tcpmon_session_impl_t *) session)
+axutil_thread_t *server_thread = NULL;
+tcpmon_session_server_thread_data_t *thread_data = NULL;
+
/************************* Function prototypes ********************************/
@@ -393,8 +396,6 @@
const axutil_env_t * env)
{
tcpmon_session_impl_t *session_impl = NULL;
- axutil_thread_t *server_thread = NULL;
- tcpmon_session_server_thread_data_t *thread_data = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
@@ -438,6 +439,17 @@
session_impl = AXIS2_INTF_TO_IMPL(session);
session_impl->is_running = AXIS2_FALSE;
+ if (server_thread)
+ {
+ AXIS2_FREE(env->allocator, server_thread);
+ server_thread = NULL;
+ }
+ if (thread_data)
+ {
+ AXIS2_FREE(env->allocator, (tcpmon_session_server_thread_data_t *)thread_data);
+ thread_data = NULL;
+ }
+
return AXIS2_SUCCESS;
}
@@ -504,6 +516,16 @@
"error in creating the server socket, "
"port may be already occupied");
}
+ if (thd)
+ {
+ AXIS2_FREE(env->allocator, server_thread);
+ server_thread = NULL;
+ }
+ if (data)
+ {
+ AXIS2_FREE(env->allocator, (tcpmon_session_server_thread_data_t *)data);
+ thread_data = NULL;
+ }
return NULL;
}
while (session_impl->is_running)
@@ -548,7 +570,16 @@
axutil_thread_pool_thread_detach(env->thread_pool, request_thread);
}
axutil_network_handler_close_socket(env, listen_socket);
-
+ if (thd)
+ {
+ AXIS2_FREE(env->allocator, server_thread);
+ server_thread = NULL;
+ }
+ if (data)
+ {
+ AXIS2_FREE(env->allocator, (tcpmon_session_server_thread_data_t *)data);
+ thread_data = NULL;
+ }
return NULL;
}
Modified: webservices/axis2/trunk/c/tools/tcpmon/src/tcpmon.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/tools/tcpmon/src/tcpmon.c?rev=614828&r1=614827&r2=614828&view=diff
==============================================================================
--- webservices/axis2/trunk/c/tools/tcpmon/src/tcpmon.c (original)
+++ webservices/axis2/trunk/c/tools/tcpmon/src/tcpmon.c Thu Jan 24 01:26:46 2008
@@ -23,19 +23,25 @@
#include <tcpmon_session.h>
#include <tcpmon_entry.h>
#include <tcpmon_util.h>
+#include <signal.h>
#include <stdio.h>
#define SIZE 1024
axis2_char_t *tcpmon_traffic_log = "tcpmon_traffic.log";
+axutil_env_t *system_env = NULL;
+tcpmon_session_t *session = NULL;
+char *target_host = NULL;
int on_new_entry(
const axutil_env_t * env,
tcpmon_entry_t * entry,
int status);
+
int on_new_entry_to_file(
const axutil_env_t * env,
tcpmon_entry_t * entry,
int status);
+
int on_error_func(
const axutil_env_t * env,
char *error_message);
@@ -45,35 +51,22 @@
const char *search,
const char *replace);
+void sig_handler(
+ int signal);
+
int
main(
int argc,
char **argv)
{
axutil_env_t *env = NULL;
- axutil_allocator_t *allocator = NULL;
- axutil_error_t *error = NULL;
- axutil_log_t *log = NULL;
- axutil_thread_pool_t *thread_pool = NULL;
- tcpmon_session_t *session = NULL;
int c;
int listen_port = 9090,
target_port = 8080;
- char *target_host = NULL;
int test_bit = 0;
int format_bit = 0;
int ii = 1;
- allocator = axutil_allocator_init(NULL);
-
- error = axutil_error_create(allocator);
- log = axutil_log_create(allocator, NULL, "axis2_tcpmon.log");
- thread_pool = axutil_thread_pool_init(allocator);
-
- env = axutil_env_create_with_error_log_thread_pool(allocator, error, log,
- thread_pool);
- target_host = axutil_strdup(env, "localhost");
-
if (!axutil_strcmp(argv[1], "-h"))
{
printf
@@ -93,6 +86,16 @@
return 0;
}
+ env = axutil_env_create_all("axis2_tcpmon.log", AXIS2_LOG_LEVEL_DEBUG);
+
+#ifndef WIN32
+ signal(SIGINT, sig_handler);
+ signal(SIGPIPE, sig_handler);
+ system_env = env;
+#endif
+
+ target_host = axutil_strdup(env, "localhost");
+
while (ii < argc)
{
if (!strcmp("-lp", argv[ii]))
@@ -103,6 +106,12 @@
{
printf("INVALID value for listen port\n");
printf("Use -h for help\n");
+ AXIS2_FREE(env->allocator, target_host);
+ if (env)
+ {
+ axutil_env_free((axutil_env_t *) env);
+ env = NULL;
+ }
return 0;
}
@@ -115,12 +124,19 @@
{
printf("INVALID value for target port\n");
printf("Use -h for help\n");
+ AXIS2_FREE(env->allocator, target_host);
+ if (env)
+ {
+ axutil_env_free((axutil_env_t *) env);
+ env = NULL;
+ }
return 0;
}
}
else if (!strcmp("-th", argv[ii]))
{
ii++;
+ AXIS2_FREE(env->allocator, target_host);
target_host = (char *) axutil_strdup(env, argv[ii++]);
}
else if (!strcmp("--test", argv[ii]))
@@ -142,6 +158,12 @@
{
printf("INVALID value for tcpmon \n");
printf("Use -h for help\n");
+ AXIS2_FREE(env->allocator, target_host);
+ if (env)
+ {
+ axutil_env_free((axutil_env_t *) env);
+ env = NULL;
+ }
return 0;
}
}
@@ -151,6 +173,12 @@
printf("ERROR: essential argument missing \n");
printf
("Please recheck values of listen_port (-lp), target_port(-tp) and target_host (-th)\n");
+ AXIS2_FREE(env->allocator, target_host);
+ if (env)
+ {
+ axutil_env_free((axutil_env_t *) env);
+ env = NULL;
+ }
return 0;
}
@@ -178,8 +206,11 @@
TCPMON_SESSION_STOP(session, env);
TCPMON_SESSION_FREE(session, env);
AXIS2_FREE(env->allocator, target_host);
- axutil_allocator_free(allocator);
- axutil_env_free(env);
+ if (env)
+ {
+ axutil_env_free((axutil_env_t *) env);
+ env = NULL;
+ }
return 0;
}
@@ -234,14 +265,22 @@
TCPMON_ENTRY_SENT_TIME(entry, env));
fprintf(file, "---------------------\n");
- convert = TCPMON_ENTRY_SENT_HEADERS(entry, env);
+ convert = axutil_strdup(env, TCPMON_ENTRY_SENT_HEADERS(entry, env));
convert = str_replace(convert, "; ", ";\n\t");
fprintf(file, "%s", convert);
+ if (convert)
+ {
+ free(convert);
+ }
- convert = formated_buffer;
+ convert = axutil_strdup(env, formated_buffer);
convert = str_replace(convert, "; ", ";\n\t");
convert = str_replace(convert, "><", ">\n<");
fprintf(file, "%s", convert);
+ if (convert)
+ {
+ free(convert);
+ }
}
if (status == 1)
@@ -275,14 +314,21 @@
TCPMON_ENTRY_TIME_DIFF(entry, env));
fprintf(file, "---------------------\n");
- convert = TCPMON_ENTRY_ARRIVED_HEADERS(entry, env);
+ convert = axutil_strdup(env, TCPMON_ENTRY_ARRIVED_HEADERS(entry, env));
convert = str_replace(convert, "; ", ";\n\t");
fprintf(file, "%s", convert);
-
- convert = formated_buffer;
+ if (convert)
+ {
+ free(convert);
+ }
+ convert = axutil_strdup(env, formated_buffer);
convert = str_replace(convert, "; ", ";\n\t");
convert = str_replace(convert, "><", ">\n<");
fprintf(file, "%s", convert);
+ if (convert)
+ {
+ free(convert);
+ }
}
fclose(file);
@@ -401,5 +447,53 @@
}
free(str_tmp);
+ free(str);
return (str_return);
}
+
+/**
+ * Signal handler
+ */
+#ifndef WIN32
+void
+sig_handler(
+ int signal)
+{
+
+ if (!system_env)
+ {
+ AXIS2_LOG_ERROR(system_env->log, AXIS2_LOG_SI,
+ "Received signal %d, unable to proceed system_env is NULL,\
+ system exit with -1", signal);
+ _exit (-1);
+ }
+
+ switch (signal)
+ {
+ case SIGINT:
+ {
+ AXIS2_LOG_INFO(system_env->log, "Received signal SIGINT. Utility "
+ "shutting down");
+ TCPMON_SESSION_STOP(session, system_env);
+ TCPMON_SESSION_FREE(session, system_env);
+ AXIS2_FREE(system_env->allocator, target_host);
+ if (system_env)
+ {
+ axutil_env_free(system_env);
+ }
+ exit(0);
+ }
+ case SIGPIPE:
+ {
+ AXIS2_LOG_INFO(system_env->log, "Received signal SIGPIPE. Operation "
+ "aborted");
+ return;
+ }
+ case SIGSEGV:
+ {
+ fprintf(stderr, "Received deadly signal SIGSEGV. Terminating\n");
+ _exit(-1);
+ }
+ }
+}
+#endif
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org