- if (strcmp (name, AVAHI_DBUS_NAME) == 0) {
- if (old == NULL && new != NULL) {
- fprintf(stderr, "Avahi Daemon connected\n");
- } else if (old != NULL && new == NULL) {
- fprintf(stderr, "Avahi Daemon disconnected\n");
+ if (strcmp(name, AVAHI_DBUS_NAME) == 0)
+
+ /* Regardless if the server lost or acquired its name or
+ * if the name was transfered: our services are no longer
+ * available, so we disconnect ourselves */
+
+ client_set_state(client, AVAHI_CLIENT_DISCONNECTED);
+
+ } else if (dbus_message_is_signal (message, AVAHI_DBUS_INTERFACE_SERVER, "StateChanged")) {
+ int32_t state;
+
+ if (!(dbus_message_get_args(
+ message, &error,
+ DBUS_TYPE_INT32, &state,
+ DBUS_TYPE_INVALID) || dbus_error_is_set (&error))) {
+ fprintf(stderr, "WARNING: Failed to parse Server.StateChanged signal: %s\n", error.message);
+ goto fail;
+ }
+
+ client_set_state(client, (AvahiClientState) state);
+
+ } else if (dbus_message_is_signal (message, AVAHI_DBUS_INTERFACE_ENTRY_GROUP, "StateChanged")) {
+ const char *path;
+ AvahiEntryGroup *g;
+ path = dbus_message_get_path(message);
+
+ for (g = client->groups; g; g = g->groups_next)
+ if (strcmp(g->path, path) == 0)
+ break;
+
+ if (g) {
+ int32_t state;
+ if (!(dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &state, DBUS_TYPE_INVALID)) ||
+ dbus_error_is_set(&error)) {
+ fprintf(stderr, "WARNING: Failed to parse EntryGroup.StateChanged signal: %s\n", error.message);
+ goto fail;