X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=src%2Fgraph.c;h=caf33f5e064921ad66f87e1f2bd0e55b0be244f7;hb=76c7550c8ab0e9c0ee14a9c396baa008cfb9bc42;hp=2453d6f1c21f52414be0f0d849f54b5130300354;hpb=ae1d95cee66f3e5c6475f03b441d455e436e9ee8;p=meshlink diff --git a/src/graph.c b/src/graph.c index 2453d6f1..caf33f5e 100644 --- a/src/graph.c +++ b/src/graph.c @@ -150,11 +150,11 @@ static void sssp_bfs(meshlink_handle_t *mesh) { /* Situation: - / - / + / + / ----->(n)---e-->(e->to) - \ - \ + \ + \ Where e is an edge, (n) and (e->to) are nodes. n->address is set to the e->address of the edge left of n to n. @@ -168,8 +168,8 @@ static void sssp_bfs(meshlink_handle_t *mesh) { bool indirect = n->status.indirect || e->options & OPTION_INDIRECT; if(e->to->status.visited - && (!e->to->status.indirect || indirect) - && (e->to->distance != n->distance + 1 || e->weight >= e->to->prevedge->weight)) + && (!e->to->status.indirect || indirect) + && (e->to->distance != n->distance + 1 || e->weight >= e->to->prevedge->weight)) continue; e->to->status.visited = true; @@ -203,10 +203,10 @@ static void check_reachability(meshlink_handle_t *mesh) { if(n->status.reachable) { logger(mesh, MESHLINK_DEBUG, "Node %s (%s) became reachable", - n->name, n->hostname); + n->name, n->hostname); } else { logger(mesh, MESHLINK_DEBUG, "Node %s (%s) became unreachable", - n->name, n->hostname); + n->name, n->hostname); } /* TODO: only clear status.validkey if node is unreachable? */ @@ -223,12 +223,11 @@ static void check_reachability(meshlink_handle_t *mesh) { timeout_del(&mesh->loop, &n->mtutimeout); - if(mesh->node_status_cb) - mesh->node_status_cb(mesh, (meshlink_node_t *)n, n->status.reachable); + update_node_status(mesh, n); if(!n->status.reachable) { update_node_udp(mesh, n, NULL); - memset(&n->status, 0, sizeof n->status); + memset(&n->status, 0, sizeof(n)->status); n->options = 0; } else if(n->connection) { if(n->connection->outgoing)