n->devclass = DEV_CLASS_UNKNOWN;
n->ecdsa = ecdsa_set_public_key(data);
n->submesh = c->submesh;
+
+ if(!node_write_config(mesh, n)) {
+ logger(mesh, MESHLINK_ERROR, "Error writing configuration file for invited node %s!\n", c->name);
+ free_node(n);
+ return false;
+
+ }
+
node_add(mesh, n);
- node_write_config(mesh, n);
logger(mesh, MESHLINK_INFO, "Key successfully received from %s", c->name);
}
bool id_h(meshlink_handle_t *mesh, connection_t *c, const char *request) {
+ assert(request);
+ assert(*request);
+
char name[MAX_STRING_SIZE];
if(sscanf(request, "%*d " MAX_STRING " %d.%d", name, &c->protocol_major, &c->protocol_minor) < 2) {
}
if(n->status.blacklisted) {
- logger(mesh, MESHLINK_EPEER, "Peer %s is blacklisted", c->name);
+ logger(mesh, MESHLINK_WARNING, "Peer %s is blacklisted", c->name);
return false;
}
}
bool ack_h(meshlink_handle_t *mesh, connection_t *c, const char *request) {
+ assert(request);
+ assert(*request);
+
char hisport[MAX_STRING_SIZE];
int devclass;
uint32_t options;
n->connection->outgoing = NULL;
}
+ /* Remove the edge before terminating the connection, to prevent a graph update. */
+ edge_del(mesh, n->connection->edge);
+ n->connection->edge = NULL;
+
terminate_connection(mesh, n->connection, false);
- /* Run graph algorithm to keep things in sync */
- graph(mesh);
}
}