-static void discovery_resolve_callback(
- AvahiSServiceResolver *resolver,
- AVAHI_GCC_UNUSED AvahiIfIndex interface,
- AVAHI_GCC_UNUSED AvahiProtocol protocol,
- AvahiResolverEvent event,
- const char *name,
- const char *type,
- const char *domain,
- const char *host_name,
- const AvahiAddress *address,
- uint16_t port,
- AvahiStringList *txt,
- AvahiLookupResultFlags flags,
- AVAHI_GCC_UNUSED void* userdata)
-{
-
- meshlink_handle_t *mesh = userdata;
-
- /* Called whenever a service has been resolved successfully or timed out */
-
- switch (event)
- {
- case AVAHI_RESOLVER_FAILURE:
- fprintf(stderr, "(Resolver) Failed to resolve service '%s' of type '%s' in domain '%s': %s\n", name, type, domain, avahi_strerror(avahi_server_errno(mesh->avahi_server)));
- break;
-
- case AVAHI_RESOLVER_FOUND:
- {
- char straddr[AVAHI_ADDRESS_STR_MAX], *strtxt;
-
- fprintf(stderr, "(Resolver) Service '%s' of type '%s' in domain '%s':\n", name, type, domain);
-
- avahi_address_snprint(straddr, sizeof(straddr), address);
- strtxt = avahi_string_list_to_string(txt);
- fprintf(stderr,
- "\t%s:%u (%s)\n"
- "\tTXT=%s\n"
- "\tcookie is %u\n"
- "\tis_local: %i\n"
- "\twide_area: %i\n"
- "\tmulticast: %i\n"
- "\tcached: %i\n",
- host_name, port, straddr,
- strtxt,
- avahi_string_list_get_service_cookie(txt),
- !!(flags & AVAHI_LOOKUP_RESULT_LOCAL),
- !!(flags & AVAHI_LOOKUP_RESULT_WIDE_AREA),
- !!(flags & AVAHI_LOOKUP_RESULT_MULTICAST),
- !!(flags & AVAHI_LOOKUP_RESULT_CACHED));
- avahi_free(strtxt);
-
- // retrieve fingerprint
- AvahiStringList *fgli = avahi_string_list_find(txt, MESHLINK_MDNS_FINGERPRINT_KEY);
- meshlink_node_t *node = meshlink_get_node(mesh, name);
-
- fprintf(stderr, "%p, %p, %s, %s\n", fgli, node, avahi_string_list_get_text(fgli), meshlink_get_fingerprint(mesh, node));
-
- if( node && fgli && strcmp(avahi_string_list_get_text(fgli)+strlen(MESHLINK_MDNS_FINGERPRINT_KEY)+1, meshlink_get_fingerprint(mesh, node)) == 0 )
- {
- fprintf(stderr, "Node %s is part of the mesh network - updating ip address.\n", node->name);
- }
- else
- {
- fprintf(stderr, "Node %s is not part of the mesh network - ignoring ip address.\n", node->name);
- }
- }
- }
-
- avahi_s_service_resolver_free(resolver);