static void resolve_callback(
    AvahiServiceResolver *r,
    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) {

    assert(r);

    /* Called whenever a service has been resolved successfully or timed out */

    switch (event) {
        case AVAHI_RESOLVER_FAILURE:
            debug(2, "(Resolver) Failed to resolve service '%s' of type '%s' in domain '%s': %s\n", name, type, domain, avahi_strerror(avahi_client_errno(avahi_service_resolver_get_client(r))));
            break;

        case AVAHI_RESOLVER_FOUND: {
            if (flags & AVAHI_LOOKUP_RESULT_OUR_OWN) {
              char a[AVAHI_ADDRESS_STR_MAX], *t;

//              debug(1, "avahi: service '%s' of type '%s' in domain '%s' added.", name, type, domain);
              avahi_address_snprint(a, sizeof(a), address);
              debug(1,"avahi: address advertised is: \"%s\".",a);
              /*
              t = avahi_string_list_to_string(txt);
              debug(1,
                      "\t%s:%u (%s)\n"
                      "\tTXT=%s\n"
                      "\tcookie is %u\n"
                      "\tis_local: %i\n"
                      "\tour_own: %i\n"
                      "\twide_area: %i\n"
                      "\tmulticast: %i\n"
                      "\tcached: %i\n",
                      host_name, port, a,
                      t,
                      avahi_string_list_get_service_cookie(txt),
                      !!(flags & AVAHI_LOOKUP_RESULT_LOCAL),
                      !!(flags & AVAHI_LOOKUP_RESULT_OUR_OWN),
                      !!(flags & AVAHI_LOOKUP_RESULT_WIDE_AREA),
                      !!(flags & AVAHI_LOOKUP_RESULT_MULTICAST),
                      !!(flags & AVAHI_LOOKUP_RESULT_CACHED));

              avahi_free(t);
              */
            }
        }
    }

    avahi_service_resolver_free(r);
}
Esempio n. 2
0
void BrowseAvahi::resolve_callback(
    AvahiServiceResolver *r,
    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) {

    BrowseAvahi* browseAvahi = static_cast<BrowseAvahi*>(userdata);
    assert(r);

    /* Called whenever a service has been resolved successfully or timed out */

    switch (event) {
        case AVAHI_RESOLVER_FAILURE:
            logE << "(Resolver) Failed to resolve service '" << name << "' of type '" << type << "' in domain '" << domain << "': " << avahi_strerror(avahi_client_errno(avahi_service_resolver_get_client(r))) << "\n";
            break;

        case AVAHI_RESOLVER_FOUND: {
            char a[AVAHI_ADDRESS_STR_MAX], *t;

            logO << "Service '" << name << "' of type '" << type << "' in domain '" << domain << "':\n";
	
            avahi_address_snprint(a, sizeof(a), address);
			browseAvahi->result_.host_ = host_name;
			browseAvahi->result_.ip_ = a;
			browseAvahi->result_.port_ = port;
			browseAvahi->result_.proto_ = protocol;
			browseAvahi->result_.valid_ = true;
	
            t = avahi_string_list_to_string(txt);
            logO
				<< "\t" << host_name << ":" << port << "(" << a << ")\n"
				<< "\tTXT=" << t << "\n"
				<< "\tProto=" << (int)protocol << "\n"
				<< "\tcookie is " << avahi_string_list_get_service_cookie(txt) << "\n"
				<< "\tis_local: " << !!(flags & AVAHI_LOOKUP_RESULT_LOCAL) << "\n"
				<< "\tour_own: " << !!(flags & AVAHI_LOOKUP_RESULT_OUR_OWN) << "\n"
				<< "\twide_area: " << !!(flags & AVAHI_LOOKUP_RESULT_WIDE_AREA) << "\n"
				<< "\tmulticast: " << !!(flags & AVAHI_LOOKUP_RESULT_MULTICAST) << "\n"
				<< "\tcached: " << !!(flags & AVAHI_LOOKUP_RESULT_CACHED) << "\n";
            avahi_free(t);
        }
    }

    avahi_service_resolver_free(r);
}
Esempio n. 3
0
static void resolve_callback(
    AvahiServiceResolver *r,
    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) {

    assert(r);

    /* 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_client_errno(avahi_service_resolver_get_client(r))));
            break;

        case AVAHI_RESOLVER_FOUND: {
            char a[AVAHI_ADDRESS_STR_MAX], *t;

            fprintf(stderr, "Service '%s' of type '%s' in domain '%s':\n", name, type, domain);

            avahi_address_snprint(a, sizeof(a), address);

            /* Copy hostname and port to global variables, ready to be returned later */
            if (tvh_hostname == NULL) {
              tvh_hostname = strdup(host_name);
              tvh_ip = strdup(a);
              tvh_port = port;
            }

            t = avahi_string_list_to_string(txt);
            fprintf(stderr,
                    "\t%s:%u (%s)\n"
                    "\tTXT=%s\n"
                    "\tcookie is %u\n"
                    "\tis_local: %i\n"
                    "\tour_own: %i\n"
                    "\twide_area: %i\n"
                    "\tmulticast: %i\n"
                    "\tcached: %i\n",
                    host_name, port, a,
                    t,
                    avahi_string_list_get_service_cookie(txt),
                    !!(flags & AVAHI_LOOKUP_RESULT_LOCAL),
                    !!(flags & AVAHI_LOOKUP_RESULT_OUR_OWN),
                    !!(flags & AVAHI_LOOKUP_RESULT_WIDE_AREA),
                    !!(flags & AVAHI_LOOKUP_RESULT_MULTICAST),
                    !!(flags & AVAHI_LOOKUP_RESULT_CACHED));

            avahi_free(t);

        }
    }

    avahi_service_resolver_free(r);
}