gboolean ping_timeout(gpointer data)
{
struct friend *friend = data;
+ friend_timeout(friend);
return G_SOURCE_REMOVE;
}
command(buffer, len);
} else {
struct friend *friend;
- friend = friend_get_by_address(iaddress);
- if (friend);
- g_source_remove_by_user_data(friend);
+ uint16_t port = g_inet_socket_address_get_port(G_INET_SOCKET_ADDRESS(address));
+ friend = friend_get_by_address(iaddress, port);
+ if (friend) {
+ printf("got message from %s\n", friend_get_name(friend));
+ friend_got_message(friend, buffer, len);
+ } else {
+ printf("could not find friend from address %s\n", g_inet_address_to_string(iaddress));
+ }
}
g_object_unref(address);
g_free(buffer);
int ping(struct friend *friend)
{
+ int err;
char ping[5] = "PING";
- friend_send_message(friend, ping, 4);
- g_timeout_add(2000, ping_timeout, friend);
+ err = friend_send_message(friend, ping, 4);
+ if (!err)
+ g_timeout_add(2000, ping_timeout, friend);
+ return err;
+}
+
+int pong(struct friend *friend)
+{
+ char pong[5] = "PONG";
+ return friend_send_message(friend, pong, 4);
}