]> git.meshlink.io Git - meshlink/blob - test/ephemeral.c
Never automatically try to bind to ports >= 32768.
[meshlink] / test / ephemeral.c
1 #include <stdio.h>
2 #include <sys/time.h>
3 #include <assert.h>
4
5 #include "meshlink.h"
6
7 void log_cb(meshlink_handle_t *mesh, meshlink_log_level_t level, const char *text) {
8         static struct timeval tv0;
9         struct timeval tv;
10
11         if(tv0.tv_sec == 0) {
12                 gettimeofday(&tv0, NULL);
13         }
14
15         gettimeofday(&tv, NULL);
16         fprintf(stderr, "%u.%.03u ", (unsigned int)(tv.tv_sec - tv0.tv_sec), (unsigned int)tv.tv_usec / 1000);
17
18         if(mesh) {
19                 fprintf(stderr, "(%s) ", mesh->name);
20         }
21
22         fprintf(stderr, "[%d] %s\n", level, text);
23 }
24
25 int main() {
26         meshlink_set_log_cb(NULL, MESHLINK_DEBUG, log_cb);
27
28         // Open two ephemeral meshlink instance.
29
30         meshlink_handle_t *mesh1 = meshlink_open_ephemeral("foo", "ephemeral", DEV_CLASS_BACKBONE);
31         meshlink_handle_t *mesh2 = meshlink_open_ephemeral("bar", "ephemeral", DEV_CLASS_BACKBONE);
32
33         assert(mesh1);
34         assert(mesh2);
35
36         meshlink_set_log_cb(mesh1, MESHLINK_DEBUG, log_cb);
37         meshlink_set_log_cb(mesh2, MESHLINK_DEBUG, log_cb);
38
39         // Exchange data
40
41         assert(meshlink_import(mesh1, meshlink_export(mesh2)));
42         assert(meshlink_import(mesh2, meshlink_export(mesh1)));
43
44         // Check that they know each other
45
46         assert(meshlink_get_node(mesh1, "bar"));
47         assert(meshlink_get_node(mesh2, "foo"));
48
49         // Close the ephemeral instances and reopen them.
50
51         meshlink_close(mesh1);
52         meshlink_close(mesh2);
53
54         mesh1 = meshlink_open_ephemeral("foo", "ephemeral", DEV_CLASS_BACKBONE);
55         mesh2 = meshlink_open_ephemeral("bar", "ephemeral", DEV_CLASS_BACKBONE);
56
57         assert(mesh1);
58         assert(mesh2);
59
60         meshlink_set_log_cb(mesh1, MESHLINK_DEBUG, log_cb);
61         meshlink_set_log_cb(mesh2, MESHLINK_DEBUG, log_cb);
62
63         // Check that the nodes no longer know each other
64
65         assert(!meshlink_get_node(mesh1, "bar"));
66         assert(!meshlink_get_node(mesh2, "foo"));
67
68         // That's it.
69
70         meshlink_close(mesh1);
71         meshlink_close(mesh2);
72
73         return 0;
74 }