The inviter sends us its own host config file, which should be populated
with its known addresses. However, if a symbolic hostname is in the
invitation URL and it can resolve to multiple IP addresses, or if the IP
address associated with it is currently different from when the invitation
was generated, the address used to connect to the inviter might not be
present in its host config file. This could cause the invitation to succeed,
but then the nodes would fail to make a regular MeshLink connection.
}
// Write host config files
}
// Write host config files
+ for(uint32_t i = 0; i < count; i++) {
const void *data;
uint32_t len = packmsg_get_bin_raw(&in, &data);
const void *data;
uint32_t len = packmsg_get_bin_raw(&in, &data);
+ 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);
}
/* Ensure the configuration directory metadata is on disk */
}
/* Ensure the configuration directory metadata is on disk */