]> git.meshlink.io Git - meshlink/commitdiff
Fix discovering node addresses from edges.
authorGuus Sliepen <guus@meshlink.io>
Tue, 20 Nov 2018 15:10:17 +0000 (16:10 +0100)
committerGuus Sliepen <guus@meshlink.io>
Tue, 20 Nov 2018 15:10:17 +0000 (16:10 +0100)
The logic always skipped the first unique address found via edges, and since
in most cases there is only one such address, this would skip them altogether.

src/net_socket.c

index 6d1d8fb386952f1e49ea12fc0d9e7ca5740efe30..d1a5df99a05f2e42b4ea9eaea335e1b3cf0dc3d4 100644 (file)
@@ -481,14 +481,18 @@ static bool get_next_outgoing_address(meshlink_handle_t *mesh, outgoing_t *outgo
        }
 
        if(outgoing->state == OUTGOING_KNOWN) {
-               if(outgoing->aip || get_recent(mesh, outgoing)) {
-                       if(get_next_ai(mesh, outgoing)) {
-                               return true;
-                       } else {
-                               free_known_addresses(outgoing->ai);
-                               outgoing->ai = NULL;
-                               outgoing->aip = NULL;
-                       }
+               if(!outgoing->aip) {
+                       get_recent(mesh, outgoing);
+               } else {
+                       outgoing->aip = outgoing->aip->ai_next;
+               }
+
+               if(outgoing->aip) {
+                       return true;
+               } else {
+                       free_known_addresses(outgoing->ai);
+                       outgoing->ai = NULL;
+                       outgoing->aip = NULL;
                }
 
                outgoing->state = OUTGOING_END;