X-Git-Url: http://git.cascardo.eti.br/?a=blobdiff_plain;f=message.c;h=1d6c22e188473a7c6340c7aacbc0aefdf3126a9d;hb=985ac6d68d47c3701e8fdc8e42305effd4887498;hp=4d3150ae05199ab2513889ce039d77b631baef67;hpb=a35406f8da02aa40551c5bf7364d4e6890db018c;p=cascardo%2Ff2fchat.git diff --git a/message.c b/message.c index 4d3150a..1d6c22e 100644 --- a/message.c +++ b/message.c @@ -18,6 +18,7 @@ #include "message.h" #include "friend.h" +#include "menu.h" #include #include @@ -33,9 +34,14 @@ gboolean ping_timeout(gpointer data) static GIOChannel *uchannel; static GSocket *gusock; -static void command(char *buffer, size_t len) +static void command(char *buffer, size_t len, GSocketAddress *address) { - printf("message from loopback: %d %.*s\n", len, len, buffer); + gchar **args; + args = g_strsplit(buffer, " ", -1); + if (args == NULL) + return; + menu_run(args, address); + g_strfreev(args); } gboolean message_incoming(GIOChannel *channel, GIOCondition cond, gpointer data) @@ -51,11 +57,12 @@ gboolean message_incoming(GIOChannel *channel, GIOCondition cond, gpointer data) if (len <= 0) { goto out; } - buffer = g_malloc(len); + buffer = g_malloc(len + 1); len = g_socket_receive_from(gusock, &address, buffer, len, NULL, NULL); + buffer[len] = 0; iaddress = g_inet_socket_address_get_address(G_INET_SOCKET_ADDRESS(address)); if (g_inet_address_get_is_loopback(iaddress)) { - command(buffer, len); + command(buffer, len, address); } else { struct friend *friend; uint16_t port = g_inet_socket_address_get_port(G_INET_SOCKET_ADDRESS(address));