hello users,

every time i'm testing my projects i use tcpmon, but i can't copy+paste the
output . I rebuild the tcpmon and extented it, so that it could write
to a file and format the output a little (reading xml in just one line is no
fun).

I appended the changes, that i made to tcpmon.c, maybe someone like it.

changes are :
- on_new_entry_to_file
- str_replace (yes I have seen 'axutil_string_replace', but that is not what I
needed)

mfg derMark

/*
 * 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 <axutil_utils.h>
#include <axutil_error_default.h>
#include <axutil_log_default.h>
#include <axutil_thread_pool.h>
#include <tcpmon_session.h>
#include <tcpmon_entry.h>
#include <tcpmon_util.h>
#include <platforms/axutil_platform_auto_sense.h>
#include <axutil_string.h>

#define SIZE 1024

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);

char *str_replace(char *str, const char *search, const char *replace);


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("Usage : %s [OPTIONS] -lp LISTEN_PORT 
-tp TARGET_PORT -th [TARGET_HOST]\n", argv[0]);
                                printf("use -h for help\n");
                                return 0;
                }

                while (ii < argc)
                {
                                if (!strcmp ("-lp", argv[ii]))
                                {
                                                ii++;
                                                listen_port = atoi(argv[ii++]);
                                                if (listen_port == 0)
                                                {
                                                                printf("INVALID 
value for listen port\n");
                                                                printf("use -h 
for help\n");
                                                                return 0;
                                                }

                                }
                                else if (!strcmp ("-tp", argv[ii]))
                                {
                                                ii++;
                                                target_port = atoi(argv[ii++]);
                                                if (target_port == 0)
                                                {
                                                                printf("INVALID 
value for target port\n");
                                                                printf("use -h 
for help\n");
                                                                return 0;
                                                }
                                }
                                else if (!strcmp ("-th", argv[ii]))
                                {
                                                ii++;
                                                target_host = 
(char*)axutil_strdup(env, argv[ii++]);
                                }
                                else if (!strcmp ("--test", argv [ii]))
                                {
                                                ii++;
                                                test_bit = 1;
                                }
                else if (!strcmp ("--format",argv [ii]))
                {
                    ii++;
                    format_bit = 1;
                }
                                else
                                  {
                                                printf("INVALID value for 
tcpmon \n");
                                                printf("use -h for help\n");
                                                return 0;
                                  }
                }

                if (!(listen_port && target_port && target_host))
        {
                                printf ("ERROR: essential argument missing \n");
                                printf ("Please recheck values of listen_port 
(-lp), target_port(-tp) and target_host (-th)\n");
                                return 0;
        }

        printf ("Listen port : %d Target port : %d Target host: %s\n", 
            listen_port, target_port, target_host);
                session = tcpmon_session_create(env);

                TCPMON_SESSION_SET_LISTEN_PORT(session, env, listen_port);
                TCPMON_SESSION_SET_TARGET_PORT(session, env, target_port);
                TCPMON_SESSION_SET_TARGET_HOST(session, env, target_host);
                TCPMON_SESSION_ON_TRANS_FAULT(session, env, on_error_func);

                //TCPMON_SESSION_ON_NEW_ENTRY(session, env, on_new_entry);
                TCPMON_SESSION_ON_NEW_ENTRY(session, env, on_new_entry_to_file);

                TCPMON_SESSION_SET_TEST_BIT (session, env, test_bit);
                TCPMON_SESSION_SET_FORMAT_BIT(session, env, format_bit);
                TCPMON_SESSION_START(session, env);

                do
                {
                                c = getchar();
                }
                while (c != 'q');

                TCPMON_SESSION_STOP(session, env);
                TCPMON_SESSION_FREE(session, env);
                AXIS2_FREE(env-> allocator, target_host);
                axutil_allocator_free(allocator);
                axutil_env_free(env);
                return 0;
}


int on_new_entry_to_file(const axutil_env_t *env,
                                          tcpmon_entry_t* entry,
                                          int status)
{
                char* plain_buffer = NULL;
                char* formated_buffer = NULL;
        int format = 0;
                FILE *file;
                char *convert = NULL;

                file = fopen("tcpmon_traffic.log", "a+");

                if(NULL == file) {
                        printf("\ncould not create or open log-file\n");
                        return -1;
                }

                fprintf(file, "\n= = = = = = = = = = = = = = = = = = = = = = = 
= = = = = = = = = = = = = = = = = = = = =\n");

        format = TCPMON_ENTRY_GET_FORMAT_BIT(entry, env);

                if (status == 0)
                {
                                plain_buffer = TCPMON_ENTRY_SENT_DATA(entry, 
env);
                                if (plain_buffer) /* this can be possible as no 
xml present */
                                {
                                                formated_buffer = 
tcpmon_util_format_as_xml
                                                                (env, 
plain_buffer, format);
                                }
                                else
                                {
                                                formated_buffer = "";
                                }
                                // 2 screen
                                printf("%s\n", "SENDING DATA..");
                                printf("/* sending time = %s*/\n", 
TCPMON_ENTRY_SENT_TIME(entry, env));
                                printf("---------------------\n");

                                printf("%s\n\n%s\n\n", 
TCPMON_ENTRY_SENT_HEADERS(entry, env), formated_buffer);

                                // 2 file
                                fprintf(file, "%s\n", "SENDING DATA..");
                                fprintf(file, "/* sending time = %s*/\n", 
TCPMON_ENTRY_SENT_TIME(entry, env));
                                fprintf(file, "---------------------\n");

                                convert = TCPMON_ENTRY_SENT_HEADERS(entry, env);
                                convert = str_replace(convert, "; ", ";\n\t");
                                fprintf(file, "%s", convert);

                                convert = formated_buffer;
                                convert = str_replace(convert, "; ", ";\n\t");
                                convert = str_replace(convert, "><", ">\n<");
                                fprintf(file, "%s", convert);

                                
                }
                if (status == 1)
                {
                                plain_buffer = TCPMON_ENTRY_ARRIVED_DATA(entry, 
env);
                                if (plain_buffer) /* this can be possible as no 
xml present */
                                {
                                                formated_buffer = 
tcpmon_util_format_as_xml
                                                                (env, 
plain_buffer, format);
                                }
                                else
                                {
                                                formated_buffer = "";
                                }
                                // 2 screen
                                printf("%s\n", "RETRIEVING DATA..");
                                printf("/* retrieving time = %s*/\n", 
TCPMON_ENTRY_ARRIVED_TIME(entry, env));
                                printf("/* time throughput = %s*/\n", 
TCPMON_ENTRY_TIME_DIFF(entry, env));
                                printf("---------------------\n");

                                printf("%s\n\n%s\n\n", 
TCPMON_ENTRY_ARRIVED_HEADERS(entry, env), formated_buffer);

                                // 2 file
                                fprintf(file, "%s\n", "RETRIEVING DATA..");
                                fprintf(file, "/* retrieving time = %s*/\n", 
TCPMON_ENTRY_ARRIVED_TIME(entry, env));
                                fprintf(file, "/* time throughput = %s*/\n", 
TCPMON_ENTRY_TIME_DIFF(entry, env));
                                fprintf(file, "---------------------\n");

                                convert = TCPMON_ENTRY_ARRIVED_HEADERS(entry, 
env);
                                convert = str_replace(convert, "; ", ";\n\t");
                                fprintf(file, "%s", convert);

                                convert = formated_buffer;
                                convert = str_replace(convert, "; ", ";\n\t");
                                convert = str_replace(convert, "><", ">\n<");
                                fprintf(file, "%s", convert);
                }

                fclose(file);

                return 0;
}


int on_new_entry(const axutil_env_t *env,
                                          tcpmon_entry_t* entry,
                                          int status)
{
                char* plain_buffer = NULL;
                char* formated_buffer = NULL;
        int format = 0;

        format = TCPMON_ENTRY_GET_FORMAT_BIT(entry, env);

                if (status == 0)
                {
                                plain_buffer = TCPMON_ENTRY_SENT_DATA(entry, 
env);
                                if (plain_buffer) /* this can be possible as no 
xml present */
                                {
                                                formated_buffer = 
tcpmon_util_format_as_xml
                                                                (env, 
plain_buffer, format);
                                }
                                else
                                {
                                                formated_buffer = "";
                                }
                                printf("%s\n", "SENDING DATA..");
                                printf("/* sending time = %s*/\n", 
TCPMON_ENTRY_SENT_TIME(entry, env));
                                printf("---------------------\n");

                                printf("%s\n\n%s\n\n", 
TCPMON_ENTRY_SENT_HEADERS(entry, env), formated_buffer);
                }
                if (status == 1)
                {
                                plain_buffer = TCPMON_ENTRY_ARRIVED_DATA(entry, 
env);
                                if (plain_buffer) /* this can be possible as no 
xml present */
                                {
                                                formated_buffer = 
tcpmon_util_format_as_xml
                                                                (env, 
plain_buffer, format);
                                }
                                else
                                {
                                                formated_buffer = "";
                                }
                                printf("%s\n", "RETRIEVING DATA..");
                                printf("/* retrieving time = %s*/\n", 
TCPMON_ENTRY_ARRIVED_TIME(entry, env));
                                printf("/* time throughput = %s*/\n", 
TCPMON_ENTRY_TIME_DIFF(entry, env));
                                printf("---------------------\n");

                                printf("%s\n\n%s\n\n", 
TCPMON_ENTRY_ARRIVED_HEADERS(entry, env),
                                                 formated_buffer);
                }
                return 0;
}



int on_error_func(const axutil_env_t *env,
                                                char* error_message)
{
                fprintf(stderr, "ERROR: %s\n", error_message);
                return 0;
}




char *str_replace(char *str, const char *search, const char *replace) {
        int size = strlen(str) * 2;
        //int size = 2048;
        int addmem = size;
        int diff = strlen(replace)-strlen(search);

        char *str_return = (char *) malloc(size *sizeof(char));
        char *str_tmp = (char *) malloc(size * sizeof(char));
        char *str_relic;        

        if(str_return == NULL || str_tmp == NULL) {
                free(str_return);
                free(str_tmp);
                return "function str_replace : gimme more memory";
        }

        strcpy(str_return, str);

        while( (str_relic = strstr(str_return, search)) != NULL) {
                if( strlen(str_return) + diff >= addmem) {
                        str_return = (char *) realloc(str_return, addmem+=size);
                        str_tmp = (char *) realloc(str_tmp, addmem);

                        if(str_return == NULL || str_tmp == NULL) {
                                free(str_return);
                                free(str_tmp);
                                return "function str_replace : gimme more 
memory";
                        }
                }

                strcpy(str_tmp, replace);
                strcat(str_tmp, (str_relic+strlen(search)) );
                *str_relic = '\0';

                strcat(str_return, str_tmp);
        }

        free(str_tmp);
        return(str_return);
}













---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to