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

Reply via email to