From 8d4823fa8a4db82fff3aad2c8507872ed2b0d907 Mon Sep 17 00:00:00 2001 From: short <> Date: Thu, 20 May 2004 18:30:13 +0000 Subject: [PATCH] +Implemented -v|--verbose functionality. --- src/main.h | 2 ++ src/network.c | 9 +++------ src/packet.c | 45 +++++++++++++++++++++++++++++++++++++++++++-- src/packet.h | 12 ++++++++++++ 4 files changed, 60 insertions(+), 8 deletions(-) diff --git a/src/main.h b/src/main.h index acc6e0a..519e01d 100644 --- a/src/main.h +++ b/src/main.h @@ -26,6 +26,8 @@ G_BEGIN_DECLS +extern int optarg_verbose; + G_END_DECLS diff --git a/src/network.c b/src/network.c index aaa0f47..74208be 100644 --- a/src/network.c +++ b/src/network.c @@ -44,6 +44,8 @@ #define NETWORK_PATHNAME_PID "/var/run/udpgate.pid" #define SOCK_SOURCE_CHECK_EVENTS (G_IO_IN) /* |G_IO_PRI */ #define SOCK_SOURCE_CHECK_REVENTS (SOCK_SOURCE_CHECK_EVENTS) /* |G_IO_ERR|G_IO_HUP|G_IO_NVAL */ +#define SERVER_INADDR 0x7F000001 +#undef SERVER_INADDR #define SERVER_INADDR 0x511F02EA /* paulina.vellum.cz = 81.31.2.234; host order */ #define SERVER_PORT 9201 /* host order */ #define PROBE_INADDR SERVER_INADDR /* host order */ @@ -272,12 +274,7 @@ err_packet_disassembly_destroy_got_hash: client_destroy(probe); if (network_notify_hostip) - (*network_notify_hostip)(hostip_guint32, - udpgate_printf_alloca("%d.%d.%d.%d", - (hostip_guint32>>24U)&0xFFU, - (hostip_guint32>>16U)&0xFFU, - (hostip_guint32>> 8U)&0xFFU, - (hostip_guint32>> 0U)&0xFFU)); + (*network_notify_hostip)(hostip_guint32,HOSTIP_GUINT32_TO_STRING(hostip_guint32)); } } diff --git a/src/packet.c b/src/packet.c index 142c1bf..fa86e88 100644 --- a/src/packet.c +++ b/src/packet.c @@ -27,6 +27,8 @@ #include #include "packet.h" +#include "main.h" /* for optarg_verbose */ + static void packet_assembly_guint32(GString *gstring,guint32 value_guint32) { @@ -105,13 +107,23 @@ guint32 elem_type_uint32; switch (elem_type_uint32) { case PACKET_ELEM_TYPE_PROGRAM_VERSION: packet_assembly_data_string(gstring,value); + if (optarg_verbose) + g_message(_("Assembled PROGRAM_VERSION: %s"),(const char *)value); break; case PACKET_ELEM_TYPE_CLIENT_INADDR: + packet_assembly_data_guint32(gstring,GPOINTER_TO_UINT(value)); + if (optarg_verbose) + g_message(_("Assembled CLIENT_INADDR: %s"),HOSTIP_GUINT32_TO_STRING(GPOINTER_TO_UINT(value))); + break; case PACKET_ELEM_TYPE_DATA_GUINT32: packet_assembly_data_guint32(gstring,GPOINTER_TO_UINT(value)); + if (optarg_verbose) + g_message(_("Assembled DATA_GUINT32: 0x%08x"),(unsigned)GPOINTER_TO_UINT(value)); break; case PACKET_ELEM_TYPE_CLIENT_PORT: packet_assembly_data_guint16(gstring,GPOINTER_TO_UINT(value)); + if (optarg_verbose) + g_message(_("Assembled CLIENT_PORT: %d"),(int)GPOINTER_TO_UINT(value)); break; default: g_assert_not_reached(); @@ -125,6 +137,9 @@ GString *gstring; g_return_val_if_fail(packet_length_pointer!=NULL,NULL); g_return_val_if_fail(values!=NULL,NULL); + if (optarg_verbose) + g_message(_("Assembling packet...")); + gstring=g_string_new(NULL); g_string_append(gstring,PACKET_HEADER); @@ -135,6 +150,9 @@ GString *gstring; (GHFunc)packet_assembly_foreach, /* func */ gstring); /* user_data */ + if (optarg_verbose) + g_message(_("Packet assembly done.")); + *packet_length_pointer=gstring->len; return g_string_free(gstring, FALSE); /* free_segment */ @@ -268,6 +286,9 @@ GSList *items; g_return_val_if_fail(packet!=NULL,NULL); + if (optarg_verbose) + g_message(_("Decoding packet...")); + r=g_hash_table_new_full( g_direct_hash, /* hash_func */ g_direct_equal, /* key_equal_func */ @@ -306,20 +327,37 @@ err_packet_disassembly_destroy_value_destroy_func_items: case PACKET_ELEM_TYPE_PROGRAM_VERSION: if (!packet_disassembly_data_string(&value,elem_data,elem_data_length_guint32,&items)) goto err_packet_disassembly_destroy_value_destroy_func_items; + if (optarg_verbose) + g_message(_("Decoded PROGRAM_VERSION: %s"),(const char *)value); break; case PACKET_ELEM_TYPE_CLIENT_INADDR: + if (!packet_disassembly_data_guint32(&value,elem_data,elem_data_length_guint32,&items)) + goto err_packet_disassembly_destroy_value_destroy_func_items; + if (optarg_verbose) + g_message(_("Decoded CLIENT_INADDR: %s"),HOSTIP_GUINT32_TO_STRING(GPOINTER_TO_UINT(value))); + break; case PACKET_ELEM_TYPE_DATA_GUINT32: if (!packet_disassembly_data_guint32(&value,elem_data,elem_data_length_guint32,&items)) goto err_packet_disassembly_destroy_value_destroy_func_items; + if (optarg_verbose) + g_message(_("Decoded DATA_GUINT32: 0x%08x"),(unsigned)GPOINTER_TO_UINT(value)); break; case PACKET_ELEM_TYPE_CLIENT_PORT: if (!packet_disassembly_data_guint16(&value,elem_data,elem_data_length_guint32,&items)) goto err_packet_disassembly_destroy_value_destroy_func_items; + if (optarg_verbose) + g_message(_("Decoded CLIENT_PORT: %d"),GPOINTER_TO_UINT(value)); break; default: - if (elem_type_guint32&PACKET_ELEM_ATTR_MANDATORY) + if (elem_type_guint32&PACKET_ELEM_ATTR_MANDATORY) { + if (optarg_verbose) + g_message(_("Decoding failed on ATTR_MANDATORY ELEM code 0x%08x"),(unsigned)elem_type_guint32); goto err_packet_disassembly_destroy_value_destroy_func_items; - else /* ignore the PACKET_ELEM_ATTR_OPTIONAL packet */; + } + else { + if (optarg_verbose) + g_message(_("Decoding ignores ATTR_OPTIONAL ELEM code 0x%08x"),(unsigned)elem_type_guint32); + } continue; } g_hash_table_insert(r,GUINT_TO_POINTER(elem_type_guint32),value); @@ -329,5 +367,8 @@ err_packet_disassembly_destroy_value_destroy_func_items: packet_disassembly_destroy_registry_init(); g_hash_table_insert(packet_disassembly_destroy_registry,r,items); + if (optarg_verbose) + g_message(_("Decoding done.")); + return r; } diff --git a/src/packet.h b/src/packet.h index a5726db..e87b3e1 100644 --- a/src/packet.h +++ b/src/packet.h @@ -27,6 +27,18 @@ G_BEGIN_DECLS +#define HOSTIP_GUINT32_TO_STRING(hostip_guint32) \ + (udpgate_printf_alloca("%d.%d.%d.%d", \ + ((hostip_guint32)>>24U)&0xFFU, \ + ((hostip_guint32)>>16U)&0xFFU, \ + ((hostip_guint32)>> 8U)&0xFFU, \ + ((hostip_guint32)>> 0U)&0xFFU)) +/* Do not use nested udpgate_printf_alloca() - macros cannot nest! */ +#define SOCKADDR_IN_TO_STRING(sockaddr_in_pointer) ({ \ + const gchar *_hostip_string=HOSTIP_GUINT32_TO_STRING(ntohl((sockaddr_in_pointer)->sin_addr.s_addr)); \ + udpgate_printf_alloca("%s:%d",_hostip_string,ntohs((sockaddr_in_pointer)->sin_port)); \ + }) + #define PACKET_HEADER "UDPGate0" #define PACKET_ELEM_ATTR_MANDATORY (0x80000000) -- 1.8.3.1