diff options
| author | Lennart Poettering <lennart@poettering.net> | 2005-09-25 20:16:15 +0000 | 
|---|---|---|
| committer | Lennart Poettering <lennart@poettering.net> | 2005-09-25 20:16:15 +0000 | 
| commit | bf7f48d6f58f28681b81915ddc4723950b947346 (patch) | |
| tree | b45f87587ac6e2b591ee05d8c89cdf1c7f295e8a | |
| parent | c202afe723757ecd3a21a508eaa2eccf2d72b45d (diff) | |
update examples to reflect recent API changes (wide area)
git-svn-id: file:///home/lennart/svn/public/avahi/trunk@612 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe
| -rw-r--r-- | examples/client-browse-services.c | 106 | ||||
| -rw-r--r-- | examples/core-browse-services.c | 110 | ||||
| -rw-r--r-- | examples/core-publish-service.c | 1 | 
3 files changed, 141 insertions, 76 deletions
diff --git a/examples/client-browse-services.c b/examples/client-browse-services.c index 7537940..d03fa31 100644 --- a/examples/client-browse-services.c +++ b/examples/client-browse-services.c @@ -47,33 +47,46 @@ static void resolve_callback(      const AvahiAddress *address,      uint16_t port,      AvahiStringList *txt, +    AvahiLookupResultFlags flags,      void* userdata) {      assert(r);      /* Called whenever a service has been resolved successfully or timed out */ -    if (event == AVAHI_RESOLVER_TIMEOUT) -        fprintf(stderr, "Failed to resolve service '%s' of type '%s' in domain '%s'.\n", name, type, domain); -    else { -        char a[128], *t; - -        assert(event == AVAHI_RESOLVER_FOUND); -         -        fprintf(stderr, "Service '%s' of type '%s' in domain '%s':\n", name, type, domain); - -        avahi_address_snprint(a, sizeof(a), address); -        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", -                host_name, port, a, -                t, -                avahi_string_list_get_service_cookie(txt), -                avahi_client_is_service_local(avahi_service_resolver_get_client(r), interface, protocol, name, type, domain)); -        avahi_free(t); +    switch (event) { +        case AVAHI_RESOLVER_TIMEOUT: +        case AVAHI_RESOLVER_NOT_FOUND: +        case AVAHI_RESOLVER_FAILURE: +            fprintf(stderr, "(Resolver) Failed to resolve service '%s' of type '%s' in domain '%s': %s\n", name, type, domain, +                    event == AVAHI_RESOLVER_TIMEOUT ? "TIMEOUT" : (event == AVAHI_RESOLVER_NOT_FOUND ? "NOT_FOUND" : "FAILURE")); + + +        case AVAHI_RESOLVER_FOUND: { +            char a[128], *t; +             +            fprintf(stderr, "Service '%s' of type '%s' in domain '%s':\n", name, type, domain); +             +            avahi_address_snprint(a, sizeof(a), address); +            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" +                    "\twide_area: %i\n" +                    "\tmulticast: %i\n" +                    "\tcached: %i\n", +                    host_name, port, a, +                    t, +                    avahi_string_list_get_service_cookie(txt), +                    avahi_client_is_service_local(avahi_service_resolver_get_client(r), interface, protocol, name, type, domain), +                    !!(flags & AVAHI_LOOKUP_CALLBACK_WIDE_AREA), +                    !!(flags & AVAHI_LOOKUP_CALLBACK_MULTICAST), +                    !!(flags & AVAHI_LOOKUP_CALLBACK_CACHED)); +                 +            avahi_free(t); +        }      }      avahi_service_resolver_free(r); @@ -87,6 +100,7 @@ static void browse_callback(      const char *name,      const char *type,      const char *domain, +    AvahiLookupResultFlags flags,      void* userdata) {      AvahiClient *c = userdata; @@ -94,21 +108,37 @@ static void browse_callback(      /* Called whenever a new services becomes available on the LAN or is removed from the LAN */ -    fprintf(stderr, "%s: service '%s' of type '%s' in domain '%s'\n", -            event == AVAHI_BROWSER_NEW ? "NEW" : "REMOVED", -            name, -            type, -            domain); -     -    /* If it's new, let's resolve it */ -    if (event == AVAHI_BROWSER_NEW) -         -        /* We ignore the returned resolver object. In the callback function -        we free it. If the server is terminated before the callback -        function is called the server will free the resolver for us. */ - -        if (!(avahi_service_resolver_new(c, interface, protocol, name, type, domain, AVAHI_PROTO_UNSPEC, resolve_callback, c))) -            fprintf(stderr, "Failed to resolve service '%s': %s\n", name, avahi_strerror(avahi_client_errno(c))); +    switch (event) { +        case AVAHI_BROWSER_FAILURE: +        case AVAHI_BROWSER_NOT_FOUND: +             +            fprintf(stderr, "(Browser) %s\n", event == AVAHI_BROWSER_FAILURE ? "FAILURE" : "NOT_FOUND"); +            avahi_simple_poll_quit(simple_poll); +            return; + +        case AVAHI_BROWSER_NEW: +            fprintf(stderr, "(Browser) NEW: service '%s' of type '%s' in domain '%s'\n", name, type, domain); + +            /* We ignore the returned resolver object. In the callback +               function we free it. If the server is terminated before +               the callback function is called the server will free +               the resolver for us. */ + +            if (!(avahi_service_resolver_new(c, interface, protocol, name, type, domain, AVAHI_PROTO_UNSPEC, 0, resolve_callback, c))) +                fprintf(stderr, "Failed to resolve service '%s': %s\n", name, avahi_strerror(avahi_client_errno(c))); +             +            break; + +        case AVAHI_BROWSER_REMOVE: +            fprintf(stderr, "(Browser) REMOVE: service '%s' of type '%s' in domain '%s'\n", name, type, domain); +            break; + +        case AVAHI_BROWSER_ALL_FOR_NOW: +        case AVAHI_BROWSER_CACHE_EXHAUSTED: +            fprintf(stderr, "(Browser) %s\n", event == AVAHI_BROWSER_CACHE_EXHAUSTED ? "CACHE_EXHAUSTED" : "ALL_FOR_NOW"); +            break; + +    }  }  static void client_callback(AvahiClient *c, AvahiClientState state, void * userdata) { @@ -124,7 +154,7 @@ static void client_callback(AvahiClient *c, AvahiClientState state, void * userd  int main(int argc, char*argv[]) {      AvahiClient *client = NULL; -    AvahiServiceBrowser *sb; +    AvahiServiceBrowser *sb = NULL;      int error;      int ret = 1; @@ -144,7 +174,7 @@ int main(int argc, char*argv[]) {      }      /* Create the service browser */ -    if (!(sb = avahi_service_browser_new(client, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, "_http._tcp", NULL, browse_callback, client))) { +    if (!(sb = avahi_service_browser_new(client, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, "_http._tcp", NULL, 0, browse_callback, client))) {          fprintf(stderr, "Failed to create service browser: %s\n", avahi_strerror(avahi_client_errno(client)));          goto fail;      } diff --git a/examples/core-browse-services.c b/examples/core-browse-services.c index f3bf782..86b18a0 100644 --- a/examples/core-browse-services.c +++ b/examples/core-browse-services.c @@ -40,6 +40,7 @@  #include <time.h>  #include <avahi-core/core.h> +#include <avahi-core/lookup.h>  #include <avahi-common/simple-watch.h>  #include <avahi-common/malloc.h>  #include <avahi-common/error.h> @@ -59,35 +60,46 @@ static void resolve_callback(      const AvahiAddress *address,      uint16_t port,      AvahiStringList *txt, +    AvahiLookupResultFlags flags,      void* userdata) {      assert(r);      /* Called whenever a service has been resolved successfully or timed out */ -    if (event == AVAHI_RESOLVER_TIMEOUT) -        fprintf(stderr, "Failed to resolve service '%s' of type '%s' in domain '%s'.\n", name, type, domain); -    else { -        char a[128], *t; - -        assert(event == AVAHI_RESOLVER_FOUND); -         -        fprintf(stderr, "Service '%s' of type '%s' in domain '%s':\n", name, type, domain); - -        avahi_address_snprint(a, sizeof(a), address); -        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", -                host_name, port, a, -                t, -                avahi_string_list_get_service_cookie(txt), -                avahi_server_is_service_local(server, interface, protocol, name, type, domain)); -        avahi_free(t); +    switch (event) { +        case AVAHI_RESOLVER_TIMEOUT: +        case AVAHI_RESOLVER_NOT_FOUND: +        case AVAHI_RESOLVER_FAILURE: +            fprintf(stderr, "Failed to resolve service '%s' of type '%s' in domain '%s': %s\n", name, type, domain, +                    event == AVAHI_RESOLVER_TIMEOUT ? "TIMEOUT" : (event == AVAHI_RESOLVER_NOT_FOUND ? "NOT_FOUND" : "FAILURE")); + +        case AVAHI_RESOLVER_FOUND: { +            char a[128], *t; +             +            fprintf(stderr, "Service '%s' of type '%s' in domain '%s':\n", name, type, domain); +             +            avahi_address_snprint(a, sizeof(a), address); +            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" +                    "\twide_area: %i\n" +                    "\tmulticast: %i\n" +                    "\tcached: %i\n", +                    host_name, port, a, +                    t, +                    avahi_string_list_get_service_cookie(txt), +                    avahi_server_is_service_local(server, interface, protocol, name, type, domain), +                    !!(flags & AVAHI_LOOKUP_CALLBACK_WIDE_AREA), +                    !!(flags & AVAHI_LOOKUP_CALLBACK_MULTICAST), +                    !!(flags & AVAHI_LOOKUP_CALLBACK_CACHED)); +            avahi_free(t); +        }      } - +          avahi_s_service_resolver_free(r);  } @@ -99,6 +111,7 @@ static void browse_callback(      const char *name,      const char *type,      const char *domain, +    AvahiLookupResultFlags flags,      void* userdata) {      AvahiServer *s = userdata; @@ -106,21 +119,37 @@ static void browse_callback(      /* Called whenever a new services becomes available on the LAN or is removed from the LAN */ -    fprintf(stderr, "%s: service '%s' of type '%s' in domain '%s'\n", -            event == AVAHI_BROWSER_NEW ? "NEW" : "REMOVED", -            name, -            type, -            domain); -     -    /* If it's new, let's resolve it */ -    if (event == AVAHI_BROWSER_NEW) -         -        /* We ignore the returned resolver object. In the callback function -        we free it. If the server is terminated before the callback -        function is called the server will free the resolver for us. */ - -        if (!(avahi_s_service_resolver_new(s, interface, protocol, name, type, domain, AVAHI_PROTO_UNSPEC, resolve_callback, s))) -            fprintf(stderr, "Failed to resolve service '%s': %s\n", name, avahi_strerror(avahi_server_errno(s))); +    switch (event) { + +        case AVAHI_BROWSER_FAILURE: +        case AVAHI_BROWSER_NOT_FOUND: +             +            fprintf(stderr, "(Browser) %s\n", event == AVAHI_BROWSER_FAILURE ? "FAILURE" : "NOT_FOUND"); +            avahi_simple_poll_quit(simple_poll); +            return; + +        case AVAHI_BROWSER_NEW: +            fprintf(stderr, "(Browser) NEW: service '%s' of type '%s' in domain '%s'\n", name, type, domain); + +            /* We ignore the returned resolver object. In the callback +               function we free it. If the server is terminated before +               the callback function is called the server will free +               the resolver for us. */ +             +            if (!(avahi_s_service_resolver_new(s, interface, protocol, name, type, domain, AVAHI_PROTO_UNSPEC, 0, resolve_callback, s))) +                fprintf(stderr, "Failed to resolve service '%s': %s\n", name, avahi_strerror(avahi_server_errno(s))); +             +            break; + +        case AVAHI_BROWSER_REMOVE: +            fprintf(stderr, "(Browser) REMOVE: service '%s' of type '%s' in domain '%s'\n", name, type, domain); +            break; + +        case AVAHI_BROWSER_ALL_FOR_NOW: +        case AVAHI_BROWSER_CACHE_EXHAUSTED: +            fprintf(stderr, "(Browser) %s\n", event == AVAHI_BROWSER_CACHE_EXHAUSTED ? "CACHE_EXHAUSTED" : "ALL_FOR_NOW"); +            break; +    }  }  int main(int argc, char*argv[]) { @@ -144,6 +173,11 @@ int main(int argc, char*argv[]) {      config.publish_addresses = 0;      config.publish_workstation = 0;      config.publish_domain = 0; + +    /* Set a unicast DNS server for wide area DNS-SD */ +    avahi_address_parse("192.168.50.1", AVAHI_PROTO_UNSPEC, &config.wide_area_servers[0]); +    config.n_wide_area_servers = 1; +    config.enable_wide_area = 1;      /* Allocate a new server */      server = avahi_server_new(avahi_simple_poll_get(simple_poll), &config, NULL, NULL, &error); @@ -158,7 +192,7 @@ int main(int argc, char*argv[]) {      }      /* Create the service browser */ -    if (!(sb = avahi_s_service_browser_new(server, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, "_http._tcp", NULL, browse_callback, server))) { +    if (!(sb = avahi_s_service_browser_new(server, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, "_http._tcp", NULL, 0, browse_callback, server))) {          fprintf(stderr, "Failed to create service browser: %s\n", avahi_strerror(avahi_server_errno(server)));          goto fail;      } diff --git a/examples/core-publish-service.c b/examples/core-publish-service.c index 3021094..67f88db 100644 --- a/examples/core-publish-service.c +++ b/examples/core-publish-service.c @@ -29,6 +29,7 @@  #include <assert.h>  #include <avahi-core/core.h> +#include <avahi-core/publish.h>  #include <avahi-common/simple-watch.h>  #include <avahi-common/malloc.h>  #include <avahi-common/alternative.h>  | 
