FILE *fh = fopen(filename, "w");
if(!fh) {
fprintf(stderr, "Could not create file %s: %s\n", filename, strerror(errno));
+ fclose(f);
return false;
}
sptps_send_record(&(mesh->sptps), 1, b64key, strlen(b64key));
free(b64key);
+ free(mesh->self->name);
+ free(mesh->self->connection->name);
+ mesh->self->name = xstrdup(name);
+ mesh->self->connection->name = xstrdup(name);
+
fprintf(stderr, "Configuration stored in: %s\n", mesh->confbase);
+ load_all_nodes(mesh);
+
return true;
}
-static bool invitation_send(void *handle, uint8_t type, const char *data, size_t len) {
+static bool invitation_send(void *handle, uint8_t type, const void *data, size_t len) {
meshlink_handle_t* mesh = handle;
while(len) {
int result = send(mesh->sock, data, len, 0);
return true;
}
-static bool invitation_receive(void *handle, uint8_t type, const char *msg, uint16_t len) {
+static bool invitation_receive(void *handle, uint8_t type, const void *msg, uint16_t len) {
meshlink_handle_t* mesh = handle;
switch(type) {
case SPTPS_HANDSHAKE:
}
void meshlink_stop(meshlink_handle_t *mesh) {
- // TODO: close the listening sockets to signal the main thread to shut down
+ // Shut down the listening sockets to signal the main thread to shut down
+
+ for(int i = 0; i < mesh->listen_sockets; i++) {
+ shutdown(mesh->listen_socket[i].tcp.fd, SHUT_RDWR);
+ shutdown(mesh->listen_socket[i].udp.fd, SHUT_RDWR);
+ }
// Wait for the main thread to finish
}
size_t meshlink_get_all_nodes(meshlink_handle_t *mesh, meshlink_node_t **nodes, size_t nmemb) {
- return 0;
+ size_t i = 0;
+
+ for splay_each(node_t, n, mesh->nodes) {
+ if(i < nmemb)
+ nodes[i] = (meshlink_node_t *)n;
+ i++;
+ }
+
+ return i;
}
char *meshlink_sign(meshlink_handle_t *mesh, const char *data, size_t len) {
}
void meshlink_blacklist(meshlink_handle_t *mesh, meshlink_node_t *node) {
+ node_t *n;
+ n = (node_t*)node;
+ n->status.blacklisted=true;
+ fprintf(stderr, "Blacklisted %s.\n",node->name);
+
+ //Make blacklisting persistent in the config file
+ append_config_file(mesh, n->name, "blacklisted", "1");
+ return;
+
}
static void __attribute__((constructor)) meshlink_init(void) {