summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2006-08-22 01:48:13 +0000
committerLennart Poettering <lennart@poettering.net>2006-08-22 01:48:13 +0000
commitc1e5b725e8e769c8ac1f5df97aac53896b05af43 (patch)
tree07937edf6ef0f66a11f53d7ff9925e4b1a20a885
parent7addead62ad76bfad74d1970cea2b73450f98973 (diff)
fix logic of AVAHI_SERVER_REGISTERING state handling. Many clients assumed that
this state would follow only on a AVAHI_SERVER_COLLISION state. However, this is not true, hence we need to handle this state transition, too. Mostly the same as we already handle AVAHI_SERVER_COLLISION. git-svn-id: file:///home/lennart/svn/public/avahi/trunk@1258 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe
-rw-r--r--avahi-compat-howl/compat.c2
-rw-r--r--avahi-compat-libdns_sd/compat.c2
-rw-r--r--avahi-utils/avahi-publish.c6
-rw-r--r--examples/client-publish-service.c24
-rw-r--r--examples/core-publish-service.c12
5 files changed, 33 insertions, 13 deletions
diff --git a/avahi-compat-howl/compat.c b/avahi-compat-howl/compat.c
index a7e2809..e436208 100644
--- a/avahi-compat-howl/compat.c
+++ b/avahi-compat-howl/compat.c
@@ -711,13 +711,13 @@ static void reg_client_callback(oid_data *data, AvahiClientState state) {
}
case AVAHI_CLIENT_S_COLLISION:
+ case AVAHI_CLIENT_S_REGISTERING:
/* Remove our entry */
avahi_entry_group_reset(data->object);
break;
case AVAHI_CLIENT_CONNECTING:
- case AVAHI_CLIENT_S_REGISTERING:
/* Ignore */
break;
}
diff --git a/avahi-compat-libdns_sd/compat.c b/avahi-compat-libdns_sd/compat.c
index b4f2fc6..e5692bb 100644
--- a/avahi-compat-libdns_sd/compat.c
+++ b/avahi-compat-libdns_sd/compat.c
@@ -897,6 +897,7 @@ static void reg_client_callback(AvahiClient *s, AvahiClientState state, void* us
}
case AVAHI_CLIENT_S_COLLISION:
+ case AVAHI_CLIENT_S_REGISTERING:
/* Remove our entry */
avahi_entry_group_reset(sdref->entry_group);
@@ -904,7 +905,6 @@ static void reg_client_callback(AvahiClient *s, AvahiClientState state, void* us
break;
case AVAHI_CLIENT_CONNECTING:
- case AVAHI_CLIENT_S_REGISTERING:
/* Ignore */
break;
}
diff --git a/avahi-utils/avahi-publish.c b/avahi-utils/avahi-publish.c
index 9ca2df2..77dc422 100644
--- a/avahi-utils/avahi-publish.c
+++ b/avahi-utils/avahi-publish.c
@@ -189,7 +189,11 @@ static void client_callback(AvahiClient *c, AvahiClientState state, AVAHI_GCC_UN
if (config->verbose)
fprintf(stderr, "Host name conflict\n");
+
+ /* Fall through */
+ case AVAHI_CLIENT_S_REGISTERING:
+
if (entry_group) {
avahi_entry_group_free(entry_group);
entry_group = NULL;
@@ -200,9 +204,9 @@ static void client_callback(AvahiClient *c, AvahiClientState state, AVAHI_GCC_UN
if (config->verbose)
fprintf(stderr, "Waiting for daemon ...\n");
+
break;
- case AVAHI_CLIENT_S_REGISTERING:
;
}
}
diff --git a/examples/client-publish-service.c b/examples/client-publish-service.c
index 96afaf3..66a59de 100644
--- a/examples/client-publish-service.c
+++ b/examples/client-publish-service.c
@@ -71,6 +71,8 @@ static void entry_group_callback(AvahiEntryGroup *g, AvahiEntryGroupState state,
case AVAHI_ENTRY_GROUP_FAILURE :
+ fprintf(stderr, "Entry group failure: %s\n", avahi_strerror(avahi_client_errno(avahi_entry_group_get_client(g))));
+
/* Some kind of failure happened while we were registering our services */
avahi_simple_poll_quit(simple_poll);
break;
@@ -142,24 +144,32 @@ static void client_callback(AvahiClient *c, AvahiClientState state, AVAHI_GCC_UN
create_services(c);
break;
+ case AVAHI_CLIENT_FAILURE:
+
+ fprintf(stderr, "Client failure: %s\n", avahi_strerror(avahi_client_errno(c)));
+ avahi_simple_poll_quit(simple_poll);
+
+ break;
+
case AVAHI_CLIENT_S_COLLISION:
/* Let's drop our registered services. When the server is back
* in AVAHI_SERVER_RUNNING state we will register them
* again with the new host name. */
- if (group)
- avahi_entry_group_reset(group);
- break;
- case AVAHI_CLIENT_FAILURE:
+ case AVAHI_CLIENT_S_REGISTERING:
+
+ /* The server records are now being established. This
+ * might be caused by a host name change. We need to wait
+ * for our own records to register until the host name is
+ * properly esatblished. */
- fprintf(stderr, "Client failure: %s\n", avahi_strerror(avahi_client_errno(c)));
- avahi_simple_poll_quit(simple_poll);
+ if (group)
+ avahi_entry_group_reset(group);
break;
case AVAHI_CLIENT_CONNECTING:
- case AVAHI_CLIENT_S_REGISTERING:
;
}
}
diff --git a/examples/core-publish-service.c b/examples/core-publish-service.c
index 65dfe5d..6370383 100644
--- a/examples/core-publish-service.c
+++ b/examples/core-publish-service.c
@@ -72,6 +72,8 @@ static void entry_group_callback(AvahiServer *s, AvahiSEntryGroup *g, AvahiEntry
case AVAHI_ENTRY_GROUP_FAILURE :
+ fprintf(stderr, "Entry group failure: %s\n", avahi_strerror(avahi_server_errno(s)));
+
/* Some kind of failure happened while we were registering our services */
avahi_simple_poll_quit(simple_poll);
break;
@@ -162,14 +164,19 @@ static void server_callback(AvahiServer *s, AvahiServerState state, AVAHI_GCC_UN
return;
}
- /* Let's drop our registered services. When the server is back
+ }
+
+ /* Fall through */
+
+ case AVAHI_SERVER_REGISTERING:
+
+ /* Let's drop our registered services. When the server is back
* in AVAHI_SERVER_RUNNING state we will register them
* again with the new host name. */
if (group)
avahi_s_entry_group_reset(group);
break;
- }
case AVAHI_SERVER_FAILURE:
@@ -180,7 +187,6 @@ static void server_callback(AvahiServer *s, AvahiServerState state, AVAHI_GCC_UN
break;
case AVAHI_SERVER_INVALID:
- case AVAHI_SERVER_REGISTERING:
;
}
}