Make the tests compilable after the latest API changes.
[swifty.git] / test / client_lf.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 #include <fcntl.h>
10
11 #define ADDR 0x80BEA8C0
12 #define DADDR 0x81BEA8C0
13
14 int main(int argc, const char *argv[])
15 {
16     int sock;
17
18     sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_MPTP);
19     if (sock < 0) {
20         perror("Failed to create socket");
21         return -1;
22     }
23
24     int size = sizeof(struct sockaddr_mptp) + sizeof(struct mptp_dest);
25     struct sockaddr_mptp *saddr = malloc(size);
26     memset(saddr, 0, size);
27
28     saddr->count = 1;
29     saddr->dests[0].addr = ADDR;
30     saddr->dests[0].port = 50;
31
32     if (bind(sock, (struct sockaddr *) saddr, size) < 0) {
33         perror("Failed to bind socket");
34         close(sock);
35         return -1;
36     }
37
38     int fd = open("large_file", O_RDONLY);
39     if (fd < 0) {
40         perror("Failed to open file");
41         close(sock);
42         return -1;
43     }
44
45     char buf[8192];
46     struct iovec iov[2];
47     struct msghdr msg;
48     int size2 = sizeof(struct sockaddr_mptp) + 2 * sizeof(struct mptp_dest);
49     struct sockaddr_mptp *to = malloc(size2);
50
51     memset(&msg, 0, sizeof(msg));
52     memset(&iov, 0, sizeof(iov));
53     memset(to, 0, size2);
54
55     iov[0].iov_base = buf;
56     iov[1].iov_base = buf;
57
58     to->count = 2;
59     to->dests[0].addr = DADDR;
60     to->dests[0].port = 100;
61     to->dests[1].addr = DADDR;
62     to->dests[1].port = 101;
63
64     msg.msg_iov = iov;
65     msg.msg_iovlen = 2;
66     msg.msg_name = to;
67     msg.msg_namelen = size2;
68
69     while (1) {
70         int ret;
71
72         ret = read(fd, buf, 8192, 0);
73         if (ret == 0)
74             break;
75         if (ret < 0) {
76             perror("Failed to read from file");
77             return -1;
78         }
79         iov[0].iov_len = ret;
80         iov[1].iov_len = ret;
81
82         ret = sendmsg(sock, &msg, sizeof(msg));
83         if (ret < 0) {
84             perror("Failed to send on socket");
85             return -1;
86         }
87
88         printf("Sent %d bytes on socket\n", msg.msg_namelen);
89     }
90
91     if (close(sock) < 0) {
92         perror("Failed to close socket");
93         close(fd);
94         return -1;
95     }
96
97     close(fd);
98
99     free(saddr);
100     free(to);
101     return 0;
102 }