]> git.meshlink.io Git - catta/blobdiff - examples/client-publish-service.c
update example to include some code to show how to modify an existing service
[catta] / examples / client-publish-service.c
index 2f126c173090e33b5d9dde77658e28b48f3bcd04..96afaf33810de89827143126ffbb4b8073395931 100644 (file)
@@ -35,6 +35,7 @@
 #include <avahi-common/simple-watch.h>
 #include <avahi-common/malloc.h>
 #include <avahi-common/error.h>
+#include <avahi-common/timeval.h>
 
 static AvahiEntryGroup *group = NULL;
 static AvahiSimplePoll *simple_poll = NULL;
@@ -150,13 +151,6 @@ static void client_callback(AvahiClient *c, AvahiClientState state, AVAHI_GCC_UN
                 avahi_entry_group_reset(group);
             break;
             
-        case AVAHI_CLIENT_DISCONNECTED:
-
-            fprintf(stderr, "Server connection terminated.\n");
-            avahi_simple_poll_quit(simple_poll);
-
-            break;
-
         case AVAHI_CLIENT_FAILURE:
             
             fprintf(stderr, "Client failure: %s\n", avahi_strerror(avahi_client_errno(c)));
@@ -164,15 +158,38 @@ static void client_callback(AvahiClient *c, AvahiClientState state, AVAHI_GCC_UN
             
             break;
 
+        case AVAHI_CLIENT_CONNECTING:
         case AVAHI_CLIENT_S_REGISTERING:
             ;
     }
 }
 
+static void modify_callback(AVAHI_GCC_UNUSED AvahiTimeout *e, void *userdata) {
+    AvahiClient *client = userdata;
+
+    fprintf(stderr, "Doing some weird modification\n");
+
+    avahi_free(name); 
+    name = avahi_strdup("Modified MegaPrinter"); 
+
+    /* If the server is currently running, we need to remove our
+     * service and create it anew */
+    if (avahi_client_get_state(client) == AVAHI_CLIENT_S_RUNNING) {
+
+        /* Remove the old services */
+        if (group)
+            avahi_entry_group_reset(group);
+
+        /* And create them again with the new name */
+        create_services(client);
+    }
+}
+
 int main(AVAHI_GCC_UNUSED int argc, AVAHI_GCC_UNUSED char*argv[]) {
     AvahiClient *client = NULL;
     int error;
     int ret = 1;
+    struct timeval tv;
     
     /* Allocate main loop object */
     if (!(simple_poll = avahi_simple_poll_new())) {
@@ -183,7 +200,7 @@ int main(AVAHI_GCC_UNUSED int argc, AVAHI_GCC_UNUSED char*argv[]) {
     name = avahi_strdup("MegaPrinter");
 
     /* Allocate a new client */
-    client = avahi_client_new(avahi_simple_poll_get(simple_poll), client_callback, NULL, &error);
+    client = avahi_client_new(avahi_simple_poll_get(simple_poll), 0, client_callback, NULL, &error);
 
     /* Check wether creating the client object succeeded */
     if (!client) {
@@ -191,6 +208,13 @@ int main(AVAHI_GCC_UNUSED int argc, AVAHI_GCC_UNUSED char*argv[]) {
         goto fail;
     }
 
+    /* After 20s do some weird modification to the service */
+    avahi_simple_poll_get(simple_poll)->timeout_new(
+        avahi_simple_poll_get(simple_poll),
+        avahi_elapse_time(&tv, 1000*10, 0),
+        modify_callback,
+        client);
+    
     /* Run the main loop */
     avahi_simple_poll_loop(simple_poll);