]> git.meshlink.io Git - meshlink/blob - test/import-export.c
Add an example chat program for the C++ API.
[meshlink] / test / import-export.c
1 #include <unistd.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5 #include "meshlink.h"
6
7 volatile bool bar_reachable = false;
8
9 void status_cb(meshlink_handle_t *mesh, meshlink_node_t *node, bool reachable) {
10         if(!strcmp(node->name, "bar"))
11                 bar_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("import_export_conf.1", "foo");
18         if(!mesh1)
19                 return 1;
20
21         meshlink_handle_t *mesh2 = meshlink_open("import_export_conf.2", "bar");
22         if(!mesh2)
23                 return 1;
24
25         // Import and export both side's data
26
27         meshlink_add_address(mesh1, "localhost");
28         meshlink_add_address(mesh2, "localhost");
29
30         char *data = meshlink_export(mesh1);
31
32         if(!meshlink_import(mesh2, data))
33                 return 1;
34
35         free(data);
36
37         data = meshlink_export(mesh2);
38
39         if(!meshlink_import(mesh1, data))
40                 return 1;
41
42         free(data);
43
44         // Start both instances
45
46         meshlink_set_node_status_cb(mesh1, status_cb);
47         
48         if(!meshlink_start(mesh1))
49                 return 1;
50
51         if(!meshlink_start(mesh2))
52                 return 1;
53
54         // Wait for the two to connect.
55
56         for(int i = 0; i < 20; i++) {
57                 sleep(1);
58                 if(bar_reachable)
59                         break;
60         }
61
62         if(!bar_reachable)
63                 return 1;
64
65         // Clean up.
66
67         meshlink_stop(mesh2);
68         meshlink_stop(mesh1);
69         meshlink_close(mesh2);
70         meshlink_close(mesh1);
71
72         return 0;
73 }