]> git.meshlink.io Git - catta/commitdiff
* avahi-client/
authorTrent Lloyd <lathiat@bur.st>
Tue, 23 Aug 2005 21:50:39 +0000 (21:50 +0000)
committerTrent Lloyd <lathiat@bur.st>
Tue, 23 Aug 2005 21:50:39 +0000 (21:50 +0000)
   - Create a new function avahi_dbus_bus_get which acts like
     dbus_bus_get but instead gets a private connection, this solves
     the bug where you can't have more than one AvahiClient at once
     because each successive AvahiClient stepped on the DBusWatch
     handling of the previous due to libdbus liking to recycle
     its connections.

     Introduced a new configure option --with-dbus-system-address=
     if you set this, you likely want it set to
     unix:path=/some/socket/here

     The default is /var/run/dbus/system_socket_address, because
     this path is hard coded into D-BUS itself, and the
     DBUS_SYSTEM_BUS_ADDRESS environment variable is now supported
     to change this at runtime which is inline with libdbus.

git-svn-id: file:///home/lennart/svn/public/avahi/trunk@432 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe

avahi-client/Makefile.am
avahi-client/client.c
configure.ac

index cdc44422db212dba05fdc6914b13dfe210f90cf4..75e18a29e9e32612173f905b3dbe57cfa804d000 100644 (file)
@@ -39,7 +39,7 @@ libavahi_client_la_SOURCES = \
        browser.c \
        resolver.c
 
-libavahi_client_la_CFLAGS = $(AM_CFLAGS) $(DBUS_CFLAGS)
+libavahi_client_la_CFLAGS = $(AM_CFLAGS) $(DBUS_CFLAGS) -DDBUS_SYSTEM_BUS_DEFAULT_ADDRESS=\"$(DBUS_SYSTEM_BUS_DEFAULT_ADDRESS)\"
 libavahi_client_la_LIBADD = $(AM_LDADD) $(DBUS_LIBS) ../avahi-common/libavahi-common.la ../avahi-common/libdbus-common-pic.la
 libavahi_client_la_LDFLAGS = $(AM_LDFLAGS) -export-dynamic -version-info 1:0:1
 
index bb623c04a8c597d87a3bdef1f1a150ab12c3b125..27f746206670a13fe28722d94ef91d6aa810e7e1 100644 (file)
@@ -232,6 +232,43 @@ fail:
     return e;
 }
 
+/* This function acts like dbus_bus_get but creates a private
+ * connection instead */
+static DBusConnection*
+avahi_dbus_bus_get (DBusBusType type, DBusError *error)
+{
+    DBusConnection *conn;
+    char *env_addr;
+
+    env_addr = getenv ("DBUS_SYSTEM_BUS_ADDRESS");
+
+    if (env_addr == NULL || (strcmp (env_addr, "") == 0))
+    {
+        env_addr = DBUS_SYSTEM_BUS_DEFAULT_ADDRESS;
+    }
+
+    conn = dbus_connection_open_private (env_addr, error);
+
+    if (!conn)
+    {
+        printf ("Failed to open private connection: %s\n", error->message);
+        return NULL;
+    }
+
+    dbus_connection_set_exit_on_disconnect (conn, TRUE);
+
+    if (!dbus_bus_register (conn, error))
+    {
+        printf ("Failed to register connection\n");
+        dbus_connection_close (conn);
+        dbus_connection_unref (conn);
+
+        return NULL;
+    }
+
+    return conn;
+}
+
 AvahiClient *avahi_client_new(const AvahiPoll *poll_api, AvahiClientCallback callback, void *userdata, int *ret_error) {
     AvahiClient *client = NULL;
     DBusError error;
@@ -261,7 +298,7 @@ AvahiClient *avahi_client_new(const AvahiPoll *poll_api, AvahiClientCallback cal
     AVAHI_LLIST_HEAD_INIT(AvahiServiceTypeBrowser, client->service_type_browsers);
     AVAHI_LLIST_HEAD_INIT(AvahiServiceResolver, client->service_resolvers);
 
-    if (!(client->bus = dbus_bus_get(DBUS_BUS_SYSTEM, &error)) ||
+    if (!(client->bus = avahi_dbus_bus_get(DBUS_BUS_SYSTEM, &error)) ||
         dbus_error_is_set (&error))
         goto fail;
 
index 2eca925570c7afa4ed27e608b99b1dbec4a682dc..d53dc76d217bc2743566142e439465c6d31184c0 100644 (file)
@@ -184,8 +184,8 @@ if test "x$HAVE_GTK" = "xyes" ; then
         AC_SUBST(GLADE20_CFLAGS)
         AC_SUBST(GLADE20_LIBS)
 
-           interfacesdir="${datadir}/${PACKAGE}/interfaces/"
-           AC_SUBST(interfacesdir)
+        interfacesdir="${datadir}/${PACKAGE}/interfaces/"
+        AC_SUBST(interfacesdir)
 fi
 AM_CONDITIONAL(HAVE_GTK, test "x$HAVE_GTK" = "xyes")
 
@@ -202,21 +202,31 @@ AC_ARG_ENABLE(dbus,
         [HAVE_DBUS=yes]) 
 
 AC_ARG_WITH(dbus-sys, AS_HELP_STRING([--with-dbus-sys=<dir>], [where D-BUS system.d directory is]))
+AC_ARG_WITH(dbus-system-socket, AS_HELP_STRING([--with-dbus-system-address=<address>], [where the dbus system socket is, you probably want to put unix:path= at the start]))
 
 if test "x$HAVE_DBUS" = "xyes" ; then
-       AC_DEFINE(HAVE_DBUS, 1, [Whether we have D-BUS or not])
+    AC_DEFINE(HAVE_DBUS, 1, [Whether we have D-BUS or not])
 
     PKG_CHECK_MODULES(DBUS, [ dbus-1 >= 0.30 ])
     DBUS_CFLAGS="$DBUS_CFLAGS -DDBUS_API_SUBJECT_TO_CHANGE"
     AC_SUBST(DBUS_CFLAGS)
-       AC_SUBST(DBUS_LIBS)
-
-       if ! test -z "$with_dbus_sys" ; then
-          DBUS_SYS_DIR="$with_dbus_sys"
-       else
-              DBUS_SYS_DIR="${sysconfdir}/dbus-1/system.d"
-       fi
-       AC_SUBST(DBUS_SYS_DIR)
+    AC_SUBST(DBUS_LIBS)
+
+    if ! test -z "$with_dbus_sys" ; then
+        DBUS_SYS_DIR="$with_dbus_sys"
+    else
+        DBUS_SYS_DIR="${sysconfdir}/dbus-1/system.d"
+    fi
+    AC_SUBST(DBUS_SYS_DIR)
+
+    if ! test -z "$with_dbus_system_address" ; then
+        DBUS_SYSTEM_BUS_DEFAULT_ADDRESS="$with_dbus_system_address"
+    else
+        # Note this default path is hardcoded in D-BUS and should
+        # not use $localstatedir
+        DBUS_SYSTEM_BUS_DEFAULT_ADDRESS="unix:path=/var/run/dbus/system_bus_socket"
+    fi
+    AC_SUBST(DBUS_SYSTEM_BUS_DEFAULT_ADDRESS)
     
 fi
 AM_CONDITIONAL(HAVE_DBUS, test "x$HAVE_DBUS" = "xyes")
@@ -265,12 +275,12 @@ AM_CONDITIONAL(HAVE_LIBDAEMON, test "x$HAVE_LIBDAEMON" = "xyes")
 # Python stuff
 #
 AC_ARG_ENABLE(python,
-       AS_HELP_STRING([--disable-python], [Disable scripts that depends on python]),
-       [case "${enableval}" in
-             yes) HAVE_PYTHON=yes ;;
-             no)  HAVE_PYTHON=no ;;
-             *) AC_MSG_ERROR([bad value ${enableval} for --enable-python]) ;;
-       esac],[HAVE_PYTHON=yes])
+    AS_HELP_STRING([--disable-python], [Disable scripts that depends on python]),
+    [case "${enableval}" in
+          yes) HAVE_PYTHON=yes ;;
+          no)  HAVE_PYTHON=no ;;
+          *) AC_MSG_ERROR([bad value ${enableval} for --enable-python]) ;;
+    esac],[HAVE_PYTHON=yes])
 
 if test "x$HAVE_PYTHON" = "xyes" ; then
     AM_PATH_PYTHON([2.4])
@@ -380,6 +390,7 @@ echo "
     sysconfdir:             ${sysconfdir}
     dbus-1 system.d dir:    ${DBUS_SYS_DIR}
     dbus-1 version:         `pkg-config dbus-1 --modversion`
+    dbus-1 system socket    ${DBUS_SYSTEM_BUS_DEFAULT_ADDRESS}
     compiler:               ${CC}
     cflags:                 ${CFLAGS}
     Enable GLIB:            ${HAVE_GLIB}