]> git.meshlink.io Git - catta/blobdiff - examples/core-publish-service.c
fix logic of AVAHI_SERVER_REGISTERING state handling. Many clients assumed that
[catta] / examples / core-publish-service.c
index dc5170b773dc06984f42ba52d5fb6ed1ea108909..6370383488462bdee0f1d848ccaced33cde72e02 100644 (file)
@@ -41,7 +41,7 @@ static char *name = NULL;
 
 static void create_services(AvahiServer *s);
 
-static void entry_group_callback(AvahiServer *s, AvahiSEntryGroup *g, AvahiEntryGroupState state, void *userdata) {
+static void entry_group_callback(AvahiServer *s, AvahiSEntryGroup *g, AvahiEntryGroupState state, AVAHI_GCC_UNUSED void *userdata) {
     assert(s);
     assert(g == group);
 
@@ -72,6 +72,8 @@ static void entry_group_callback(AvahiServer *s, AvahiSEntryGroup *g, AvahiEntry
             
         case AVAHI_ENTRY_GROUP_FAILURE :
 
+            fprintf(stderr, "Entry group failure: %s\n", avahi_strerror(avahi_server_errno(s)));
+            
             /* Some kind of failure happened while we were registering our services */
             avahi_simple_poll_quit(simple_poll);
             break;
@@ -129,7 +131,7 @@ fail:
     avahi_simple_poll_quit(simple_poll);
 }
 
-static void server_callback(AvahiServer *s, AvahiServerState state, void * userdata) {
+static void server_callback(AvahiServer *s, AvahiServerState state, AVAHI_GCC_UNUSED void * userdata) {
     assert(s);
 
     /* Called whenever the server state changes */
@@ -140,7 +142,7 @@ static void server_callback(AvahiServer *s, AvahiServerState state, void * userd
             /* The serve has startup successfully and registered its host
              * name on the network, so it's time to create our services */
             
-            if (group)
+            if (!group)
                 create_services(s);
 
             break;
@@ -162,14 +164,19 @@ static void server_callback(AvahiServer *s, AvahiServerState state, void * userd
                 return;
             }
 
-            /* Let's drop our registered services. When the server is back
+        }
+
+            /* Fall through */
+
+        case AVAHI_SERVER_REGISTERING:
+            
+           /* 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_s_entry_group_reset(group);
 
             break;
-        }
 
         case AVAHI_SERVER_FAILURE:
             
@@ -180,12 +187,11 @@ static void server_callback(AvahiServer *s, AvahiServerState state, void * userd
             break;
 
         case AVAHI_SERVER_INVALID:
-        case AVAHI_SERVER_REGISTERING:
             ;
     }
 }
 
-int main(int argc, char*argv[]) {
+int main(AVAHI_GCC_UNUSED int argc, AVAHI_GCC_UNUSED char*argv[]) {
     AvahiServerConfig config;
     AvahiServer *server = NULL;
     int error;