Implement receiving from multiple sources. Also modify the tests for this.
[swifty.git] / test / client.c
index ddd6202..2f8e87a 100644 (file)
@@ -6,6 +6,21 @@
 #include <string.h>
 #include <netinet/in.h>
 #include <stdlib.h>
+#include <time.h>
+
+#define ADDR 0x8082A8C0
+#define DADDR 0x8082A8C0
+
+int gen_port()
+{
+       int ret;
+       srand(time(NULL));
+       ret = (rand() % 255) + 1;
+       if (ret == 100 || ret == 101)
+               ret *= 2;
+       printf("Generated source port %d\n", ret);
+       return ret;
+}
 
 int main(int argc, const char *argv[])
 {
@@ -22,8 +37,8 @@ int main(int argc, const char *argv[])
     memset(saddr, 0, size);
 
     saddr->count = 1;
-    saddr->dests[0].addr = 0x0100007F;
-    saddr->dests[0].port = 50;
+    saddr->dests[0].addr = ADDR;
+    saddr->dests[0].port = gen_port();
 
     if (bind(sock, (struct sockaddr *) saddr, size) < 0) {
         perror("Failed to bind socket");
@@ -31,26 +46,32 @@ int main(int argc, const char *argv[])
         return -1;
     }
 
-    char buf[] = "Buffer de test";
-    struct iovec iov[1];
+    char buf[] = "Buffer1";
+    char buf2[] = "Buffer2";
+    struct iovec iov[2];
     struct msghdr msg;
-    struct sockaddr_swift *to = malloc(size);
+    int size2 = sizeof(struct sockaddr_swift) + 2 * sizeof(struct swift_dest);
+    struct sockaddr_swift *to = malloc(size2);
 
     memset(&msg, 0, sizeof(msg));
     memset(&iov, 0, sizeof(iov));
-    memset(to, 0, size);
+    memset(to, 0, size2);
 
     iov[0].iov_base = buf;
     iov[0].iov_len = sizeof(buf);
+    iov[1].iov_base = buf2;
+    iov[1].iov_len = sizeof(buf2);
 
-    to->count = 1;
-    to->dests[0].addr = 0x0100007F;
+    to->count = 2;
+    to->dests[0].addr = DADDR;
     to->dests[0].port = 100;
+    to->dests[1].addr = DADDR;
+    to->dests[1].port = 101;
 
     msg.msg_iov = iov;
-    msg.msg_iovlen = 1;
+    msg.msg_iovlen = 2;
     msg.msg_name = to;
-    msg.msg_namelen = size;
+    msg.msg_namelen = size2;
 
     int ret;