#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
+#include <errno.h>
+#include "message.h"
static int connect_friend(struct sockaddr **saddr, char *address, char *port)
{
struct sockaddr *saddr;
};
+static int usock;
+
+int sock_init(void)
+{
+ struct sockaddr_in6 sa;
+ memset(&sa, 0, sizeof(sa));
+ sa.sin6_family = AF_INET6;
+ sa.sin6_port = htons(17078);
+ memcpy((void *) &sa.sin6_addr, (void *) &in6addr_any, sizeof(in6addr_any));
+ usock = socket(AF_INET6, SOCK_DGRAM, 0);
+ bind(usock, (struct sockaddr *) &sa, sizeof(sa));
+ message_init(usock);
+ return 0;
+}
+
+int friend_send_message(struct friend *friend, char *buffer, size_t len)
+{
+ socklen_t sl;
+ if (friend->saddr->sa_family == AF_INET)
+ sl = sizeof(struct sockaddr_in);
+ else if (friend->saddr->sa_family == AF_INET6)
+ sl = sizeof(struct sockaddr_in6);
+ else
+ return -EAFNOSUPPORT;
+ sendto(usock, buffer, len, 0, friend->saddr, sl);
+ return 0;
+}
+
struct cache {
GList *friends;
};