#define _GNU_SOURCE 1
+
+#ifdef NDEBUG
+#undef NDEBUG
+#endif
+
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
static void bar_receive_cb(meshlink_handle_t *mesh, meshlink_channel_t *channel, const void *data, size_t len) {
// Echo the data back.
if(len) {
- meshlink_channel_send(mesh, channel, data, len);
+ assert(meshlink_channel_send(mesh, channel, data, len) == (ssize_t)len);
} else {
meshlink_channel_close(mesh, channel);
}
}
-static 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;
-}
-
static bool accept_cb(meshlink_handle_t *mesh, meshlink_channel_t *channel, uint16_t port, const void *data, size_t len) {
if(port != 7) {
return false;
meshlink_set_log_cb(NULL, MESHLINK_DEBUG, log_cb);
assert(meshlink_destroy("channels_fork_conf.1"));
- meshlink_handle_t *mesh = meshlink_open("channels_fork_conf.1", "foo", "channels", DEV_CLASS_BACKBONE);
+ meshlink_handle_t *mesh = meshlink_open("channels_fork_conf.1", "foo", "channels-fork", DEV_CLASS_BACKBONE);
assert(mesh);
meshlink_enable_discovery(mesh, false);
- meshlink_add_address(mesh, "localhost");
+ assert(meshlink_set_canonical_address(mesh, meshlink_get_self(mesh), "localhost", NULL));
char *data = meshlink_export(mesh);
assert(data);
assert(meshlink_import(mesh, indata));
- meshlink_set_channel_accept_cb(mesh, reject_cb);
-
assert(meshlink_start(mesh));
// Open a channel from foo to bar.
meshlink_set_log_cb(NULL, MESHLINK_DEBUG, log_cb);
assert(meshlink_destroy("channels_fork_conf.2"));
- meshlink_handle_t *mesh = meshlink_open("channels_fork_conf.2", "bar", "channels", DEV_CLASS_BACKBONE);
+ meshlink_handle_t *mesh = meshlink_open("channels_fork_conf.2", "bar", "channels-fork", DEV_CLASS_BACKBONE);
assert(mesh);
meshlink_enable_discovery(mesh, false);
- meshlink_add_address(mesh, "localhost");
+ assert(meshlink_set_canonical_address(mesh, meshlink_get_self(mesh), "localhost", NULL));
char *data = meshlink_export(mesh);
assert(data);
assert(0);
}
-int main() {
+int main(void) {
+ init_sync_flag(&bar_responded);
+ init_sync_flag(&foo_connected);
+ init_sync_flag(&foo_gone);
+
int fda[2], fdb[2];
- assert(pipe2(fda, 0) != -1);
- assert(pipe2(fdb, 0) != -1);
+ assert(pipe(fda) != -1);
+ assert(pipe(fdb) != -1);
if(!fork()) {
return main2(fdb[0], fda[1]);