]> git.meshlink.io Git - meshlink/blob - test/invite-join.c
Add test cases for importing/exporting data and inviting/joining nodes.
[meshlink] / test / invite-join.c
1 #include <unistd.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5 #include "meshlink.h"
6
7 volatile bool baz_reachable = false;
8
9 void status_cb(meshlink_handle_t *mesh, meshlink_node_t *node, bool reachable) {
10         if(!strcmp(node->name, "baz"))
11                 baz_reachable = reachable;
12 }
13
14 int main(int argc, char *argv[]) {
15         // Open two new meshlink instance.
16
17         meshlink_handle_t *mesh1 = meshlink_open("invite_join_conf.1", "foo");
18         if(!mesh1)
19                 return 1;
20
21         meshlink_handle_t *mesh2 = meshlink_open("invite_join_conf.2", "bar");
22         if(!mesh2)
23                 return 1;
24
25         // Start the first instance and have it generate an invitation.
26
27         meshlink_set_node_status_cb(mesh1, status_cb);
28         
29         if(!meshlink_start(mesh1))
30                 return 1;
31
32         meshlink_add_address(mesh1, "localhost");
33         char *url = meshlink_invite(mesh1, "baz");
34         if(!url)
35                 return 1;
36
37         // Have the second instance join the first.
38
39         if(!meshlink_join(mesh2, url))
40                 return 1;
41
42         free(url);
43
44         if(!meshlink_start(mesh2))
45                 return 1;
46
47         // Wait for the two to connect.
48
49         for(int i = 0; i < 20; i++) {
50                 sleep(1);
51                 if(baz_reachable)
52                         break;
53         }
54
55         if(!baz_reachable)
56                 return 1;
57
58         // Clean up.
59
60         meshlink_stop(mesh2);
61         meshlink_stop(mesh1);
62         meshlink_close(mesh2);
63         meshlink_close(mesh1);
64
65         return 0;
66 }