X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=examples%2Fchannels.c;h=6d34de360b2991e3bc985d2dff5d23ef68b419e6;hb=257493390b8f103f792fa99c823b0bf7c46020a2;hp=3ad2742e1fcf55649695660d92775ff422e8287d;hpb=7d0d06e82233623ce90c70dac2803a7f299c673e;p=meshlink diff --git a/examples/channels.c b/examples/channels.c index 3ad2742e..6d34de36 100644 --- a/examples/channels.c +++ b/examples/channels.c @@ -18,8 +18,6 @@ static void log_message(meshlink_handle_t *mesh, meshlink_log_level_t level, con } static void channel_receive(meshlink_handle_t *mesh, meshlink_channel_t *channel, const void *data, size_t len) { - const char *msg = data; - if(!len) { if(meshlink_errno) fprintf(stderr, "Error while reading data from %s: %s\n", channel->node->name, meshlink_strerror(meshlink_errno)); @@ -32,12 +30,10 @@ static void channel_receive(meshlink_handle_t *mesh, meshlink_channel_t *channel } // TODO: we now have TCP semantics, don't expect exactly one message per receive call. - if(msg[len - 1]) { - fprintf(stderr, "Received invalid data from %s\n", channel->node->name); - return; - } - printf("%s says: %s\n", channel->node->name, msg); + printf("%s says: ", channel->node->name); + fwrite(data, len, 1, stdout); + fputc('\n', stdout); } static bool channel_accept(meshlink_handle_t *mesh, meshlink_channel_t *channel, uint16_t port, const void *data, size_t len) { @@ -59,6 +55,11 @@ static bool channel_accept(meshlink_handle_t *mesh, meshlink_channel_t *channel, return true; } +static void channel_poll(meshlink_handle_t *mesh, meshlink_channel_t *channel, size_t len) { + fprintf(stderr, "Channel to '%s' connected\n", channel->node->name); + meshlink_set_channel_poll_cb(mesh, channel, NULL); +} + static void node_status(meshlink_handle_t *mesh, meshlink_node_t *node, bool reachable) { if(reachable) printf("%s joined.\n", node->name); @@ -219,9 +220,10 @@ static void parse_input(meshlink_handle_t *mesh, char *buf) { return; } destination->priv = channel; + meshlink_set_channel_poll_cb(mesh, channel, channel_poll); } - if(!meshlink_channel_send(mesh, channel, msg, len + 1)) { + if(!meshlink_channel_send(mesh, channel, msg, strlen(msg))) { fprintf(stderr, "Could not send message to '%s': %s\n", destination->name, meshlink_strerror(meshlink_errno)); return; }