#include <linux/limits.h>
#include "../src/meshlink.h"
+#include "../src/devtools.h"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <errno.h>
static int n = 10;
static meshlink_handle_t **mesh;
printf("%zu known nodes:\n", nnodes);
for(int i = 0; i < nnodes; i++) {
//printf(" %s\n", nodes[i]->name);
- if (nindex != i) {
if(!meshlink_send(mesh[nindex], nodes[i], "magic", strlen("magic") + 1)) {
fprintf(stderr, "Could not send message to '%s': %s\n", nodes[i]->name, meshlink_strerror(meshlink_errno));
}
- }
}
}
}
}
+static bool exportmeshgraph(const char* path)
+{
+ struct stat ps;
+ int psr = stat(path, &ps);
+
+ if(psr == 0 || errno != ENOENT)
+ {
+ if(psr == -1)
+ { perror("stat"); }
+ else
+ { fprintf(stderr, "%s exists already\n", path); }
+
+ return false;
+ }
+
+ FILE* stream = fopen(path, "w");
+
+ if(!stream)
+ {
+ perror("stream");
+ return false;
+ }
+
+ if(!devtool_export_json_all_edges_state(mesh[0], stream))
+ {
+ fclose(stream);
+ fprintf(stderr, "could not export graph\n");
+ return false;
+ }
+
+ fclose(stream);
+ return true;
+}
+
static void parse_command(char *buf) {
char *arg = strchr(buf, ' ');
if(arg)
}
} else if(!strcasecmp(buf, "link")) {
linkmesh();
+ } else if(!strcasecmp(buf, "eg")) {
+ exportmeshgraph(arg);
} else if(!strcasecmp(buf, "test")) {
testmesh();
} else if(!strcasecmp(buf, "quit")) {
"/kick <name> Blacklist the given node.\n"
"/who [<name>] List all nodes or show information about the given node.\n"
"/link Link all nodes together.\n"
+ "/eg <path> Export graph as json file.\n"
"/test Test functionality sending some data to all nodes\n"
"/quit Exit this program.\n"
);
mesh = calloc(n, sizeof *mesh);
- meshlink_set_log_cb(NULL, MESHLINK_DEBUG, log_message);
+ meshlink_set_log_cb(NULL, MESHLINK_INFO, log_message);
mkdir(basebase, 0750);
char filename[PATH_MAX];
snprintf(nodename, sizeof nodename, "%snode%d", namesprefix,i);
snprintf(filename, sizeof filename, "%s/%s", basebase, nodename);
bool itsnew = access(filename, R_OK);
- mesh[i] = meshlink_open(filename, nodename, "manynodes", STATIONARY);
+ mesh[i] = meshlink_open(filename, nodename, "manynodes", i%_DEV_CLASS_MAX);
meshlink_set_log_cb(mesh[i], MESHLINK_INFO, log_message);
if(itsnew)
meshlink_add_address(mesh[i], "localhost");