+ return -1;
+}
+
+static void dbus_disconnect(void) {
+ assert(server);
+
+ while (server->clients)
+ client_free(server->clients);
+
+ assert(server->n_clients == 0);
+
+ if (server->bus) {
+ dbus_connection_disconnect(server->bus);
+ dbus_connection_unref(server->bus);
+ server->bus = NULL;
+ }
+}
+
+int dbus_protocol_setup(const AvahiPoll *poll_api, int _disable_user_service_publishing, int force) {
+
+ disable_user_service_publishing = _disable_user_service_publishing;
+
+ server = avahi_new(Server, 1);
+ AVAHI_LLIST_HEAD_INIT(Clients, server->clients);
+ server->current_id = 0;
+ server->n_clients = 0;
+ server->bus = NULL;
+ server->poll_api = poll_api;
+ server->reconnect_timeout = NULL;
+ server->reconnect = force;
+
+ if (dbus_connect() < 0) {
+ struct timeval tv;
+
+ if (!force)
+ goto fail;
+
+ avahi_log_warn("WARNING: Failed to contact D-BUS daemon, retrying in %ims.", RECONNECT_MSEC);