X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=test%2Fecho-fork.c;h=e6aefaab8a4fdcdaa741eb8cce8ae07aa08ebc44;hb=9e2e05f3495c883356be93232b26d6cbb796a269;hp=ee24e8cb5e31e61d6b76dcafcaead08f62d864e6;hpb=8da66a40066247bdb63999433eb597d285b10aae;p=meshlink diff --git a/test/echo-fork.c b/test/echo-fork.c old mode 100755 new mode 100644 index ee24e8cb..e6aefaab --- a/test/echo-fork.c +++ b/test/echo-fork.c @@ -16,49 +16,76 @@ 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; } + // Write data to stdout. 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 +94,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 +111,10 @@ int main1(void) { for(int i = 0; i < 20; i++) { sleep(1); - if(bar_reachable) + + if(bar_reachable) { break; + } } if(!bar_reachable) { @@ -93,8 +123,9 @@ 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 +135,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,15 +154,21 @@ 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) { usleep(100000); } else { @@ -160,6 +199,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 +214,9 @@ int main2(void) { return 1; } - while(!foo_closed) + while(!foo_closed) { sleep(1); + } // Clean up. @@ -185,7 +226,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 +239,9 @@ int main(int argc, char *argv[]) { meshlink_close(foo); meshlink_close(bar); - if(fork()) + if(fork()) { return main1(); - else + } else { return main2(); + } }