My test is according to this:
+ create a Avahi client (with flag AVAHI_CLIENT_NO_FAIL)
+ create a service browser
+ get browser callback
+ restart avahi daemon
+ upon connection lost client callback free the client and create a new
Avahi client
+ upon client in state AVAHI_CLIENT_S_RUNNING: I create a new service
browser.
+ then I get a assertion "AvahiTest: browser.c:583:
avahi_service_browser_new: Assertion `client' failed."
Could somebody tell me how I register for new services after the daemon was
down and coming up again?
Here are the details:
I create a client
glib_poll = avahi_glib_poll_new (NULL, G_PRIORITY_DEFAULT);
// Create the GLIB Adaptor
poll_api = avahi_glib_poll_get (glib_poll);
// Create a new AvahiClient instance
gClient = avahi_client_new ( poll_api,
AVAHI_CLIENT_NO_FAIL,
avahi_client_callback,
NULL,
&error);
** Message: Avahi Client State Change: 2
** Message: Client running; connected to the Avahi Daemon
Then I create a service browser
gSb = avahi_service_browser_new(gClient, AVAHI_IF_UNSPEC,
AVAHI_PROTO_UNSPEC, "_printer._tcp", NULL, 0, browse_callback, gClient );
Now I get browse callbacks for services of type _printer._tcp which I can
resolve.
Now I restart the avahi daemon and I get client callbacks from the different
states:
** Message: Avahi Client State Change: 100
** Message: Disconnected from the Avahi Daemon: Daemon connection failed
** Message: Avahi Client State Change: 101
** Message: Client is connecting to the Avahi Daemon
** Message: Avahi Client State Change: 1
** Message: Client registering
** Message: Avahi Client State Change: 2
** Message: Client running; connected to the Avahi Daemon
I release the client upon disconnection and then I start a new one.
glib_poll = avahi_glib_poll_new (NULL, G_PRIORITY_DEFAULT);
// Create the GLIB Adaptor
poll_api = avahi_glib_poll_get (glib_poll);
// Create a new AvahiClient instance
gClient = avahi_client_new ( poll_api,
AVAHI_CLIENT_NO_FAIL,
avahi_client_callback,
NULL,
&error);
When the client is again in state AVAHI_CLIENT_S_RUNNING, I start a new browser
for the _printer._tcp service when we are connected to the daemon
Then I get the following assertion:
AvahiTest: browser.c:583: avahi_service_browser_new: Assertion `client' failed.
This is my client callback:
switch (state) {
case AVAHI_CLIENT_FAILURE:
{
g_message ("Disconnected from the Avahi Daemon: %s",
avahi_strerror(avahi_client_errno(client)));
avahi_client_free (gClient);
lResult = AvahiLibStartClient();
break;
}
case AVAHI_CLIENT_CONNECTING:
{
g_message ("Client is connecting to the Avahi Daemon");
break;
}
case AVAHI_CLIENT_S_RUNNING:
{
g_message ("Client running; connected to the Avahi
Daemon");
gSb = avahi_service_browser_new(gClient,
AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, "_printer._tcp", NULL, 0, browse_callback,
gClient );
break;
}
case AVAHI_CLIENT_S_REGISTERING:
{
g_message ("Client registering");
break;
}
case AVAHI_CLIENT_S_COLLISION:
{
g_message ("Client collision");
break;
}
default:
{
g_message ("Client to an undefined state?");
// no action
}
}
_______________________________________________
avahi mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/avahi