diff options
Diffstat (limited to 'avahi-client')
-rw-r--r-- | avahi-client/client.c | 25 | ||||
-rw-r--r-- | avahi-client/client.h | 1 |
2 files changed, 22 insertions, 4 deletions
diff --git a/avahi-client/client.c b/avahi-client/client.c index 8bc515e..915ba31 100644 --- a/avahi-client/client.c +++ b/avahi-client/client.c @@ -67,11 +67,12 @@ static void client_set_state (AvahiClient *client, AvahiServerState state) { dbus_connection_unref(client->bus); client->bus = NULL; } - + /* Fall through */ - + case AVAHI_CLIENT_S_COLLISION: case AVAHI_CLIENT_S_REGISTERING: + case AVAHI_CLIENT_S_FAILURE: /* Clear cached strings */ avahi_free(client->host_name); @@ -139,15 +140,21 @@ static DBusHandlerResult filter_func(DBusConnection *bus, DBusMessage *message, } else if (dbus_message_is_signal (message, AVAHI_DBUS_INTERFACE_SERVER, "StateChanged")) { int32_t state; + char *e; + int c; if (!(dbus_message_get_args( message, &error, DBUS_TYPE_INT32, &state, + DBUS_TYPE_STRING, &e, DBUS_TYPE_INVALID) || dbus_error_is_set (&error))) { fprintf(stderr, "WARNING: Failed to parse Server.StateChanged signal: %s\n", error.message); goto fail; } - + + if ((c = avahi_error_dbus_to_number(e)) != AVAHI_OK) + avahi_client_set_errno(client, c); + client_set_state(client, (AvahiClientState) state); } else if (dbus_message_is_signal (message, AVAHI_DBUS_INTERFACE_ENTRY_GROUP, "StateChanged")) { @@ -161,11 +168,21 @@ static DBusHandlerResult filter_func(DBusConnection *bus, DBusMessage *message, if (g) { int32_t state; - if (!(dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &state, DBUS_TYPE_INVALID)) || + char *e; + int c; + + if (!(dbus_message_get_args( + message, &error, + DBUS_TYPE_INT32, &state, + DBUS_TYPE_STRING, &e, + DBUS_TYPE_INVALID)) || dbus_error_is_set(&error)) { fprintf(stderr, "WARNING: Failed to parse EntryGroup.StateChanged signal: %s\n", error.message); goto fail; } + + if ((c = avahi_error_dbus_to_number(e)) != AVAHI_OK) + avahi_client_set_errno(client, c); avahi_entry_group_set_state(g, state); } diff --git a/avahi-client/client.h b/avahi-client/client.h index d00cc8b..ffcc8d7 100644 --- a/avahi-client/client.h +++ b/avahi-client/client.h @@ -49,6 +49,7 @@ typedef enum { AVAHI_CLIENT_S_REGISTERING = AVAHI_SERVER_REGISTERING, AVAHI_CLIENT_S_RUNNING = AVAHI_SERVER_RUNNING, AVAHI_CLIENT_S_COLLISION = AVAHI_SERVER_COLLISION, + AVAHI_CLIENT_S_FAILURE = AVAHI_SERVER_FAILURE, AVAHI_CLIENT_DISCONNECTED = 100 /**< Lost DBUS connection to the Avahi daemon */ } AvahiClientState; |