method = dbus_address_entry_get_method (entry);
- if (strcmp (method, "nonce-tcp") == 0)
- {
- const char *host;
- const char *port;
- const char *bind;
- const char *family;
-
- host = dbus_address_entry_get_value (entry, "host");
- bind = dbus_address_entry_get_value (entry, "bind");
- port = dbus_address_entry_get_value (entry, "port");
- family = dbus_address_entry_get_value (entry, "family");
-
- *server_p = _dbus_server_new_for_tcp_socket (host, bind, port,
- family, error, TRUE);
-
- if (*server_p)
- {
- _DBUS_ASSERT_ERROR_IS_CLEAR(error);
- return DBUS_SERVER_LISTEN_OK;
- }
- else
- {
- _DBUS_ASSERT_ERROR_IS_SET(error);
- return DBUS_SERVER_LISTEN_DID_NOT_CONNECT;
- }
- }
- else if (strcmp (method, "autolaunch") == 0)
+ if (strcmp (method, "autolaunch") == 0)
{
const char *host = "localhost";
const char *bind = "localhost";
const char *family = "ipv4";
const char *scope = dbus_address_entry_get_value (entry, "scope");
+ if (_dbus_daemon_is_session_bus_address_published (scope))
+ return DBUS_SERVER_LISTEN_ADDRESS_ALREADY_USED;
+
*server_p = _dbus_server_new_for_tcp_socket (host, bind, port,
family, error, FALSE);
if (*server_p)
{
_DBUS_ASSERT_ERROR_IS_CLEAR(error);
- /// @todo should we return an error when address could not be published ?
(*server_p)->published_address =
_dbus_daemon_publish_session_bus_address ((*server_p)->address, scope);
return DBUS_SERVER_LISTEN_OK;
}
else
{
+ // make sure no handle is open
+ _dbus_daemon_unpublish_session_bus_address ();
_DBUS_ASSERT_ERROR_IS_SET(error);
return DBUS_SERVER_LISTEN_DID_NOT_CONNECT;
}