X-Git-Url: http://git.meshlink.io/?p=meshlink;a=blobdiff_plain;f=test%2Fchannels-fork.c;h=db2a033f7b6617eea9a576c530707e2ac3379f75;hp=faa16c6ef715b2efb6e03b0709b5df24fe9f0e04;hb=668664d0ea90dc81670cccd7b7d56b36b8360eaa;hpb=b67296418c51784d39a24c3041e2cb199bee06f2 diff --git a/test/channels-fork.c b/test/channels-fork.c index faa16c6e..db2a033f 100644 --- a/test/channels-fork.c +++ b/test/channels-fork.c @@ -10,19 +10,23 @@ volatile bool bar_reachable = false; volatile bool bar_responded = false; void log_cb(meshlink_handle_t *mesh, meshlink_log_level_t level, const char *text) { - if(mesh) + if(mesh) { fprintf(stderr, "(%s) ", mesh->name); + } + fprintf(stderr, "[%d] %s\n", level, text); } void status_cb(meshlink_handle_t *mesh, meshlink_node_t *node, bool reachable) { - if(!strcmp(node->name, "bar")) + if(!strcmp(node->name, "bar")) { bar_reachable = reachable; + } } void foo_receive_cb(meshlink_handle_t *mesh, meshlink_channel_t *channel, const void *data, size_t len) { - if(len == 5 && !memcmp(data, "Hello", 5)) + if(len == 5 && !memcmp(data, "Hello", 5)) { bar_responded = true; + } } void bar_receive_cb(meshlink_handle_t *mesh, meshlink_channel_t *channel, const void *data, size_t len) { @@ -35,24 +39,32 @@ bool reject_cb(meshlink_handle_t *mesh, meshlink_channel_t *channel, uint16_t po } bool accept_cb(meshlink_handle_t *mesh, meshlink_channel_t *channel, uint16_t port, const void *data, size_t len) { - if(port != 7) + if(port != 7) { return false; + } + meshlink_set_channel_receive_cb(mesh, channel, bar_receive_cb); - if(data) + + if(data) { bar_receive_cb(mesh, channel, data, len); + } + return true; } void poll_cb(meshlink_handle_t *mesh, meshlink_channel_t *channel, size_t len) { meshlink_set_channel_poll_cb(mesh, channel, NULL); - if(meshlink_channel_send(mesh, channel, "Hello", 5) != 5) + + if(meshlink_channel_send(mesh, channel, "Hello", 5) != 5) { fprintf(stderr, "Could not send whole message\n"); + } } int main1(int rfd, int wfd) { meshlink_set_log_cb(NULL, MESHLINK_DEBUG, log_cb); meshlink_handle_t *mesh1 = meshlink_open("channels_conf.1", "foo", "channels", DEV_CLASS_BACKBONE); + if(!mesh1) { fprintf(stderr, "Could not initialize configuration for foo\n"); return 1; @@ -63,6 +75,7 @@ int main1(int rfd, int wfd) { meshlink_add_address(mesh1, "localhost"); char *data = meshlink_export(mesh1); + if(!data) { fprintf(stderr, "Foo could not export its configuration\n"); return 1; @@ -92,8 +105,10 @@ int main1(int rfd, int wfd) { for(int i = 0; i < 20; i++) { sleep(1); - if(bar_reachable) + + if(bar_reachable) { break; + } } if(!bar_reachable) { @@ -104,6 +119,7 @@ int main1(int rfd, int wfd) { // Open a channel from foo to bar. meshlink_node_t *bar = meshlink_get_node(mesh1, "bar"); + if(!bar) { fprintf(stderr, "Foo could not find bar\n"); return 1; @@ -114,8 +130,10 @@ int main1(int rfd, int wfd) { for(int i = 0; i < 5; i++) { sleep(1); - if(bar_responded) + + if(bar_responded) { break; + } } if(!bar_responded) { @@ -139,6 +157,7 @@ int main2(int rfd, int wfd) { meshlink_set_log_cb(NULL, MESHLINK_DEBUG, log_cb); meshlink_handle_t *mesh2 = meshlink_open("channels_conf.2", "bar", "channels", DEV_CLASS_BACKBONE); + if(!mesh2) { fprintf(stderr, "Could not initialize configuration for bar\n"); return 1; @@ -147,14 +166,22 @@ int main2(int rfd, int wfd) { meshlink_enable_discovery(mesh2, false); char *data = meshlink_export(mesh2); + if(!data) { fprintf(stderr, "Bar could not export its configuration\n"); return 1; } size_t len = strlen(data); - if(write(wfd, &len, sizeof(len)) <= 0) abort(); - if(write(wfd, data, len) <= 0) abort(); + + if(write(wfd, &len, sizeof(len)) <= 0) { + abort(); + } + + if(write(wfd, data, len) <= 0) { + abort(); + } + free(data); read(rfd, &len, sizeof(len)); @@ -189,8 +216,9 @@ int main(int argc, char *argv[]) { pipe2(fda, 0); pipe2(fdb, 0); - if(fork()) + if(fork()) { return main1(fda[0], fdb[1]); - else + } else { return main2(fdb[0], fda[1]); + } }