+static void service_resolver_callback(
+ AvahiServiceResolver *r,
+ AvahiIfIndex interface,
+ AvahiProtocol protocol,
+ AvahiResolverEvent event,
+ const char *name,
+ const char *type,
+ const char *domain,
+ const char *host_name,
+ const AvahiAddress *a,
+ uint16_t port,
+ AvahiStringList *txt,
+ AvahiLookupResultFlags flags,
+ void *userdata) {
+
+ oid_data* data = userdata;
+ sw_discovery_resolve_reply reply;
+
+ assert(r);
+ assert(data);
+
+ reply = (sw_discovery_resolve_reply) data->reply;
+
+ switch (event) {
+ case AVAHI_RESOLVER_FOUND: {
+
+ char host_name_fixed[AVAHI_DOMAIN_NAME_MAX];
+ uint8_t *p = NULL;
+ size_t l = 0;
+ sw_ipv4_address addr;
+
+ sw_ipv4_address_init_from_saddr(&addr, a->data.ipv4.address);
+
+ host_name = add_trailing_dot(host_name, host_name_fixed, sizeof(host_name_fixed));
+
+ if ((p = avahi_new0(uint8_t, (l = avahi_string_list_serialize(txt, NULL, 0))+1)))
+ avahi_string_list_serialize(txt, p, l);
+
+ reply(data->discovery, OID_GET_INDEX(data), interface, name, type, domain, addr, port, p, l, data->extra);
+
+ avahi_free(p);
+ break;
+ }
+
+ case AVAHI_RESOLVER_FAILURE:
+
+ /* Apparently there is no way in HOWL to inform about failed resolving ... */
+
+ break;
+ }
+}
+