X-Git-Url: http://git.meshlink.io/?p=meshlink;a=blobdiff_plain;f=src%2Fmeshlink.c;h=c4613a7019e6182929804a30a7963dc0e9602557;hp=fdc6fed874460271a5fe810722871238a8352cc3;hb=2bf1a40fa455564a4aac52349d70e9fedb163721;hpb=560c1f1e838e78ba9e95b8b86f0a2dbcd0506efb diff --git a/src/meshlink.c b/src/meshlink.c index fdc6fed8..c4613a70 100644 --- a/src/meshlink.c +++ b/src/meshlink.c @@ -612,7 +612,7 @@ static bool finalize_join(meshlink_handle_t *mesh, const void *buf, uint16_t len } // Write host config files - while(count--) { + for(uint32_t i = 0; i < count; i++) { const void *data; uint32_t len = packmsg_get_bin_raw(&in, &data); @@ -655,11 +655,24 @@ static bool finalize_join(meshlink_handle_t *mesh, const void *buf, uint16_t len return false; } - node_add(mesh, n); + if(i == 0) { + /* The first host config file is of the inviter itself; + * remember the address we are currently using for the invitation connection. + */ + sockaddr_t sa; + socklen_t salen = sizeof(sa); - if(!config_write(mesh, "current", n->name, &config, mesh->config_key)) { + if(getpeername(mesh->sock, &sa.sa, &salen) == 0) { + node_add_recent_address(mesh, n, &sa); + } + } + + if(!node_write_config(mesh, n)) { + free_node(n); return false; } + + node_add(mesh, n); } /* Ensure the configuration directory metadata is on disk */