X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=examples%2Fclient-publish-service.c;h=facc965e0501296ea9bf22024188ebaf8857980a;hb=2bd272c14ac1be48324a0ec66bf3e519824fc74f;hp=536c9f08bccf86f1c6dfab307d53bae154c05075;hpb=328d192ae37f91d3e19c22eb8f97bf830bfc3933;p=catta diff --git a/examples/client-publish-service.c b/examples/client-publish-service.c index 536c9f0..facc965 100644 --- a/examples/client-publish-service.c +++ b/examples/client-publish-service.c @@ -1,5 +1,3 @@ -/* $Id$ */ - /*** This file is part of avahi. @@ -86,7 +84,7 @@ static void entry_group_callback(AvahiEntryGroup *g, AvahiEntryGroupState state, } static void create_services(AvahiClient *c) { - char r[128]; + char *n, r[128]; int ret; assert(c); @@ -108,23 +106,16 @@ static void create_services(AvahiClient *c) { /* Create some random TXT data */ snprintf(r, sizeof(r), "random=%i", rand()); + /* We will now add two services and one subtype to the entry + * group. The two services have the same name, but differ in + * the service type (IPP vs. BSD LPR). Only services with the + * same name should be put in the same entry group. */ + /* Add the service for IPP */ if ((ret = avahi_entry_group_add_service(group, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, name, "_ipp._tcp", NULL, NULL, 651, "test=blah", r, NULL)) < 0) { - if (ret == AVAHI_ERR_COLLISION) { - char *n; - - /* A service name collision with a local service - * happened. Let's pick a new name */ - n = avahi_alternative_service_name(name); - avahi_free(name); - name = n; - - fprintf(stderr, "Service name collision, renaming service to '%s'\n", name); - - create_services(c); - return; - } + if (ret == AVAHI_ERR_COLLISION) + goto collision; fprintf(stderr, "Failed to add _ipp._tcp service: %s\n", avahi_strerror(ret)); goto fail; @@ -132,6 +123,10 @@ static void create_services(AvahiClient *c) { /* Add the same service for BSD LPR */ if ((ret = avahi_entry_group_add_service(group, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, name, "_printer._tcp", NULL, NULL, 515, NULL)) < 0) { + + if (ret == AVAHI_ERR_COLLISION) + goto collision; + fprintf(stderr, "Failed to add _printer._tcp service: %s\n", avahi_strerror(ret)); goto fail; } @@ -151,6 +146,21 @@ static void create_services(AvahiClient *c) { return; +collision: + + /* A service name collision with a local service happened. Let's + * pick a new name */ + n = avahi_alternative_service_name(name); + avahi_free(name); + name = n; + + fprintf(stderr, "Service name collision, renaming service to '%s'\n", name); + + avahi_entry_group_reset(group); + + create_services(c); + return; + fail: avahi_simple_poll_quit(simple_poll); }