- if (dbus_message_is_signal(message, DBUS_INTERFACE_DBUS, "NameOwnerChanged")) {
- gchar *name, *old, *new;
- dbus_message_get_args(message, &error, DBUS_TYPE_STRING, &name, DBUS_TYPE_STRING, &old, DBUS_TYPE_STRING, &new, DBUS_TYPE_INVALID);
+/* fprintf(stderr, "dbus: interface=%s, path=%s, member=%s\n", */
+/* dbus_message_get_interface (message), */
+/* dbus_message_get_path (message), */
+/* dbus_message_get_member (message)); */
+
+ if (client->state == AVAHI_CLIENT_DISCONNECTED)
+ goto fail;
+
+ if (dbus_message_is_signal(message, DBUS_INTERFACE_LOCAL, "Disconnected")) {
+
+ /* The DBUS server died or kicked us */
+ client_set_state(client, AVAHI_CLIENT_DISCONNECTED);
+
+ } if (dbus_message_is_signal(message, DBUS_INTERFACE_DBUS, "NameOwnerChanged")) {
+ char *name, *old, *new;
+
+ if (!(dbus_message_get_args(
+ message, &error,
+ DBUS_TYPE_STRING, &name,
+ DBUS_TYPE_STRING, &old,
+ DBUS_TYPE_STRING, &new,
+ DBUS_TYPE_INVALID) || dbus_error_is_set (&error))) {
+
+ fprintf(stderr, "WARNING: Failed to parse NameOwnerChanged signal: %s\n", error.message);
+ goto fail;
+ }
+
+ 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;