]> git.meshlink.io Git - catta/blobdiff - examples/client-publish-service.c
Apply fedora init script fix from http://cvs.fedora.redhat.com/viewcvs/devel/avahi...
[catta] / examples / client-publish-service.c
index 96afaf33810de89827143126ffbb4b8073395931..94dcd1e9b060cb5bad69fd522af494666eeea6c3 100644 (file)
@@ -44,7 +44,7 @@ static char *name = NULL;
 static void create_services(AvahiClient *c);
 
 static void entry_group_callback(AvahiEntryGroup *g, AvahiEntryGroupState state, AVAHI_GCC_UNUSED void *userdata) {
-    assert(g == group);
+    assert(g == group || group == NULL);
 
     /* Called whenever the entry group state changes */
 
@@ -71,6 +71,8 @@ static void entry_group_callback(AvahiEntryGroup *g, AvahiEntryGroupState state,
 
         case AVAHI_ENTRY_GROUP_FAILURE :
 
+            fprintf(stderr, "Entry group failure: %s\n", avahi_strerror(avahi_client_errno(avahi_entry_group_get_client(g))));
+
             /* Some kind of failure happened while we were registering our services */
             avahi_simple_poll_quit(simple_poll);
             break;
@@ -142,24 +144,32 @@ static void client_callback(AvahiClient *c, AvahiClientState state, AVAHI_GCC_UN
                 create_services(c);
             break;
 
+        case AVAHI_CLIENT_FAILURE:
+            
+            fprintf(stderr, "Client failure: %s\n", avahi_strerror(avahi_client_errno(c)));
+            avahi_simple_poll_quit(simple_poll);
+            
+            break;
+
         case AVAHI_CLIENT_S_COLLISION:
         
             /* Let's drop our registered services. When the server is back
              * in AVAHI_SERVER_RUNNING state we will register them
              * again with the new host name. */
-            if (group)
-                avahi_entry_group_reset(group);
-            break;
             
-        case AVAHI_CLIENT_FAILURE:
+        case AVAHI_CLIENT_S_REGISTERING:
+
+            /* The server records are now being established. This
+             * might be caused by a host name change. We need to wait
+             * for our own records to register until the host name is
+             * properly esatblished. */
             
-            fprintf(stderr, "Client failure: %s\n", avahi_strerror(avahi_client_errno(c)));
-            avahi_simple_poll_quit(simple_poll);
+            if (group)
+                avahi_entry_group_reset(group);
             
             break;
 
         case AVAHI_CLIENT_CONNECTING:
-        case AVAHI_CLIENT_S_REGISTERING:
             ;
     }
 }