+ // Add public/canonical addresses if requested
+ if(flags & MESHLINK_INVITE_PUBLIC) {
+ // Try the CanonicalAddress first
+ char filename[PATH_MAX] = "";
+ snprintf(filename, sizeof(filename), "%s" SLASH "hosts" SLASH "%s", mesh->confbase, mesh->self->name);
+ scan_for_canonical_address(filename, &hostname[2], &port[2]);
+
+ if(!hostname[2]) {
+ if(flags & MESHLINK_INVITE_IPV4) {
+ hostname[2] = meshlink_get_external_address_for_family(mesh, AF_INET);
+ }
+
+ if(flags & MESHLINK_INVITE_IPV6) {
+ hostname[3] = meshlink_get_external_address_for_family(mesh, AF_INET6);
+ }
+ }
+ }
+
+ for(int i = 0; i < 4; i++) {
+ // Ensure we always have a port number
+ if(hostname[i] && !port[i]) {
+ port[i] = xstrdup(mesh->myport);
+ }