Make the tests compilable after the latest API changes.
[swifty.git] / test / server.c
1 #include "../src/kernel/mptp.h"
2
3 #include <sys/socket.h>
4 #include <sys/types.h>
5 #include <stdio.h>
6 #include <string.h>
7 #include <netinet/in.h>
8 #include <stdlib.h>
9
10 #define ADDR 0x8182A8C0
11 #define NUM_BUF 10
12
13 int main(int argc, const char *argv[])
14 {
15     int sock;
16         int i;
17
18     if (argc != 2) {
19         fprintf(stderr, "USAGE: %s listening_port\n", argv[0]);
20         return -1;
21     }
22
23     sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_MPTP);
24     if (sock < 0) {
25         perror("Failed to create socket");
26         return -1;
27     }
28
29     int size = sizeof(struct sockaddr_mptp) + sizeof(struct mptp_dest);
30     struct sockaddr_mptp *saddr = malloc(size);
31     memset(saddr, 0, size);
32
33     saddr->count = 1;
34     saddr->dests[0].addr = ADDR;
35     saddr->dests[0].port = atoi(argv[1]);
36
37     if (bind(sock, (struct sockaddr *) saddr, size) < 0) {
38         perror("Failed to bind socket");
39         close(sock);
40         return -1;
41     }
42
43     char buf[NUM_BUF][10240];
44     struct iovec iov[NUM_BUF];
45     struct msghdr msg;
46         size += (NUM_BUF - 1) * sizeof(struct mptp_dest);
47     struct sockaddr_mptp *from = malloc(size);
48
49     memset(&msg, 0, sizeof(msg));
50     memset(&iov, 0, sizeof(iov));
51     memset(from, 0, size);
52
53         for (i = 0; i < NUM_BUF; i++) {
54                 iov[i].iov_base = buf[i];
55                 iov[i].iov_len = sizeof(buf[i]);
56         }
57
58     msg.msg_iov = iov;
59     msg.msg_iovlen = 10;
60     msg.msg_name = from;
61     msg.msg_namelen = size;
62
63     int ret, fromlen;
64
65         sleep(20);
66
67     ret = recvmsg(sock, &msg, 0);
68     if (ret < 0) {
69         perror("Failed to recv on socket");
70         return -1;
71     }
72
73     printf("Received %d bytes on socket\n", ret);
74         for (i = 0; i < from->count; i++) {
75                 printf("buf=%s from %s:%d\n", buf[i], inet_ntoa(from->dests[i].addr), from->dests[i].port);
76         }
77
78     if (close(sock) < 0) {
79         perror("Failed to close socket");
80         return -1;
81     }
82
83     free(saddr);
84     free(from);
85
86     return 0;
87 }