Add socket and message.
[cascardo/f2fchat.git] / friend.c
index dc0f25e..de5ffdb 100644 (file)
--- a/friend.c
+++ b/friend.c
@@ -23,6 +23,8 @@
 #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)
 {
@@ -60,6 +62,34 @@ struct friend {
        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;
 };