X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=test%2Fecho-fork.c;h=6839c7743e43c656723464fc56645e0c851e18eb;hb=5a8c20cfd63b480e94101f7333e871511a92fd37;hp=289e24a72258efc731665395e223e7d15c2cc1f1;hpb=196806f90f40fcc0cf727abd4bed6bc5aefff5ff;p=meshlink diff --git a/test/echo-fork.c b/test/echo-fork.c index 289e24a7..6839c774 100644 --- a/test/echo-fork.c +++ b/test/echo-fork.c @@ -16,49 +16,78 @@ volatile bool foo_closed = false; int debug_level; 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")) + (void)mesh; + + if(!strcmp(node->name, "bar")) { bar_reachable = reachable; - else if(!strcmp(node->name, "foo")) - if(!reachable) + } else if(!strcmp(node->name, "foo")) + if(!reachable) { foo_closed = true; + } } void foo_receive_cb(meshlink_handle_t *mesh, meshlink_channel_t *channel, const void *data, size_t len) { + (void)mesh; + (void)channel; + (void)data; + (void)len; + // One way only. } void bar_receive_cb(meshlink_handle_t *mesh, meshlink_channel_t *channel, const void *data, size_t len) { + (void)mesh; + (void)channel; + if(!len) { fprintf(stderr, "Connection closed by foo\n"); foo_closed = true; return; } + + int ret_val; + (void)ret_val; // Write data to stdout. - write(1, data, len); + ret_val = write(1, data, len); } bool reject_cb(meshlink_handle_t *mesh, meshlink_channel_t *channel, uint16_t port, const void *data, size_t len) { + (void)mesh; + (void)channel; + (void)port; + (void)data; + (void)len; + return false; } 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) { + (void)len; + meshlink_set_channel_poll_cb(mesh, channel, NULL); - bar_responded=true; + bar_responded = true; } int main1(void) { @@ -67,6 +96,7 @@ int main1(void) { meshlink_set_log_cb(NULL, debug_level, log_cb); meshlink_handle_t *mesh1 = meshlink_open("echo-fork_conf.1", "foo", "echo-fork", DEV_CLASS_BACKBONE); + if(!mesh1) { fprintf(stderr, "Could not initialize configuration for foo\n"); return 1; @@ -83,8 +113,10 @@ int main1(void) { for(int i = 0; i < 20; i++) { sleep(1); - if(bar_reachable) + + if(bar_reachable) { break; + } } if(!bar_reachable) { @@ -95,6 +127,7 @@ int main1(void) { // 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; @@ -104,13 +137,15 @@ int main1(void) { meshlink_set_channel_poll_cb(mesh1, channel, poll_cb); // read and buffer stdin - int BUF_SIZE = 1024*1024; + int BUF_SIZE = 1024 * 1024; char buffer[BUF_SIZE]; for(int i = 0; i < 5; i++) { sleep(1); - if(bar_responded) + + if(bar_responded) { break; + } } if(!bar_responded) { @@ -121,18 +156,24 @@ int main1(void) { do { //fprintf(stderr, ":"); ssize_t len = read(0, buffer, BUF_SIZE); - if(len <= 0) + + if(len <= 0) { break; + } + char *p = buffer; + while(len > 0) { ssize_t sent = meshlink_channel_send(mesh1, channel, p, len); + if(sent < 0) { fprintf(stderr, "Sending message failed\n"); return 1; } - if(!sent) + + if(!sent) { usleep(100000); - else { + } else { len -= sent; p += sent; } @@ -160,6 +201,7 @@ int main2(void) { meshlink_set_log_cb(NULL, debug_level, log_cb); meshlink_handle_t *mesh2 = meshlink_open("echo-fork_conf.2", "bar", "echo-fork", DEV_CLASS_BACKBONE); + if(!mesh2) { fprintf(stderr, "Could not initialize configuration for bar\n"); return 1; @@ -174,8 +216,9 @@ int main2(void) { return 1; } - while(!foo_closed) + while(!foo_closed) { sleep(1); + } // Clean up. @@ -185,7 +228,7 @@ int main2(void) { } -int main(int argc, char *argv[]) { +int main() { debug_level = getenv("DEBUG") ? MESHLINK_DEBUG : MESHLINK_ERROR; // Initialize and exchange configuration. @@ -198,8 +241,9 @@ int main(int argc, char *argv[]) { meshlink_close(foo); meshlink_close(bar); - if(fork()) + if(fork()) { return main1(); - else + } else { return main2(); + } }