]> git.meshlink.io Git - meshlink/blobdiff - src/graph.c
Fix reachability queries for blacklisted nodes.
[meshlink] / src / graph.c
index e6212116528a64d17bb0b03d5e209ace106158fe..431a72a559f068d34fa0a61002e26602b884950e 100644 (file)
@@ -173,17 +173,22 @@ static void check_reachability(meshlink_handle_t *mesh) {
                        n->status.reachable = !n->status.reachable;
                        n->status.dirty = true;
 
-                       if(n->status.reachable) {
-                               logger(mesh, MESHLINK_DEBUG, "Node %s became reachable", n->name);
-                               bool first_time_reachable = !n->last_reachable;
-                               n->last_reachable = mesh->loop.now.tv_sec;
-
-                               if(first_time_reachable) {
-                                       node_write_config(mesh, n);
+                       if(!n->status.blacklisted) {
+                               if(n->status.reachable) {
+                                       logger(mesh, MESHLINK_DEBUG, "Node %s became reachable", n->name);
+                                       bool first_time_reachable = !n->last_reachable;
+                                       n->last_reachable = mesh->loop.now.tv_sec;
+
+                                       if(first_time_reachable) {
+                                               if(!node_write_config(mesh, n)) {
+                                                       logger(mesh, MESHLINK_WARNING, "Could not write host config file for node %s!\n", n->name);
+
+                                               }
+                                       }
+                               } else {
+                                       logger(mesh, MESHLINK_DEBUG, "Node %s became unreachable", n->name);
+                                       n->last_unreachable = mesh->loop.now.tv_sec;
                                }
-                       } else {
-                               logger(mesh, MESHLINK_DEBUG, "Node %s became unreachable", n->name);
-                               n->last_unreachable = mesh->loop.now.tv_sec;
                        }
 
                        /* TODO: only clear status.validkey if node is unreachable? */