From f17d2832301b0f2fcd50fdcc6fec77666178158f Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 24 Oct 2005 22:41:39 +0000 Subject: * add new entry group state AVAHI_ENTRY_GROUP_FAILURE * pass error code alongside entry gorup state changes over DBUS * add new server state AVAHI_SERVER_FAILURE * pass error code alongside server state changes over DBUS * fix client-publish-service * rename error code AVAHI_ERR_LOCAL_COLLISION to AVAHI_ERR_COLLISION * update TODO git-svn-id: file:///home/lennart/svn/public/avahi/trunk@854 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe --- avahi-client/client.c | 25 +++++++++++++++++++++---- avahi-client/client.h | 1 + 2 files changed, 22 insertions(+), 4 deletions(-) (limited to 'avahi-client') 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; -- cgit