#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 */
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));
}
}
#include <glib/gslist.h>
#include "packet.h"
+#include "main.h" /* for optarg_verbose */
+
static void packet_assembly_guint32(GString *gstring,guint32 value_guint32)
{
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();
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);
(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 */
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 */
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);
packet_disassembly_destroy_registry_init();
g_hash_table_insert(packet_disassembly_destroy_registry,r,items);
+ if (optarg_verbose)
+ g_message(_("Decoding done."));
+
return r;
}
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)