#include <dbus/dbus-hash.h>
#include <dbus/dbus-credentials.h>
#include <dbus/dbus-internals.h>
-#include <kdbus-d.h>
+#include "kdbus-d.h"
+#include <stdlib.h>
#ifdef DBUS_CYGWIN
#include <signal.h>
if(!strcmp(_dbus_string_get_const_data(address), "kdbus"))
{
DBusBusType type;
+ DBusServer* server;
+ char* bus_address;
context->is_kdbus = TRUE;
else
type = DBUS_BUS_STARTER;
- if(!make_kdbus_bus(type, error))
+ bus_address = make_kdbus_bus(type, error);
+ if(bus_address == NULL)
goto failed;
- context->myConnection = daemon_as_client(type, error);
+ server = fake_server(bus_address);
+ if(server == NULL)
+ {
+ free(bus_address);
+ goto failed;
+ }
+
+ if (!_dbus_list_append (&context->servers, server))
+ {
+ free(bus_address);
+ goto oom;
+ }
+
+ context->myConnection = daemon_as_client(type, bus_address, error);
if(context->myConnection == NULL)
goto failed;
+
}
else
{
*
*/
-#include <kdbus-d.h>
+#include "kdbus-d.h"
#include <dbus/kdbus.h>
#include <dbus/dbus-connection-internal.h>
+#include <dbus/dbus-bus.h>
#include <utils.h>
#include <stdlib.h>
return bus;
}
-DBusConnection* daemon_as_client(DBusBusType type, DBusError *error)
+DBusServer* fake_server(char* address)
+{
+ return dbus_server_init_mini(address);
+}
+
+DBusConnection* daemon_as_client(DBusBusType type, char* address, DBusError *error)
{
DBusConnection* connection;
+ dbus_bus_set_bus_connection_address(type, address);
+
connection = dbus_bus_get(type, error);
if(connection == NULL)
return NULL;
dbus_bus_add_match(connection, "type='signal', member='NameAcquired'", error);
dbus_bus_add_match(connection, "type='signal', member='NameLost'", error);
if(dbus_error_is_set(error))
- goto failed;
+ {
+failed:
+ _dbus_connection_close_possibly_shared (connection);
+ dbus_connection_unref (connection);
+ connection = NULL;
+ }
+ else
+ _dbus_verbose ("Daemon connected as kdbus client.\n");
return connection;
-
-failed:
- _dbus_connection_close_possibly_shared (connection);
- dbus_connection_unref (connection);
- connection = NULL;
- return NULL;
}
#include <dbus/dbus-bus.h>
-#include <bus.h>
-
+#include "bus.h"
+#include <dbus/dbus-server.h>
char* make_kdbus_bus(DBusBusType type, DBusError *error);
-DBusConnection* daemon_as_client(DBusBusType type, DBusError *error);
+DBusServer* fake_server(char* address);
+DBusConnection* daemon_as_client(DBusBusType type, char* address, DBusError *error);
#endif /* KDBUS_H_ */
}
}
+void dbus_bus_set_bus_connection_address(DBusBusType address_type, char* address)
+{
+ if(bus_connection_addresses[address_type] != NULL)
+ free(bus_connection_addresses[address_type]);
+ bus_connection_addresses[address_type] = address;
+}
+
static dbus_bool_t
init_session_address (void)
{
goto out;
}
- _dbus_verbose (" !!! dbus_connection_open finished successfully !!!! \n"); //todo RP to be removed
-
if (!dbus_bus_register (connection, error))
{
_dbus_connection_close_possibly_shared (connection);
*/
DBUS_EXPORT
+void dbus_bus_set_bus_connection_address(DBusBusType address_type, char* address);
+
+DBUS_EXPORT
DBusConnection *dbus_bus_get (DBusBusType type,
DBusError *error);
DBUS_EXPORT
return FALSE;
}
+DBusServer*
+dbus_server_init_mini (char* address)
+{
+ DBusServer *server;
+
+ server = dbus_new0(struct DBusServer, 1);
+ if(server == NULL)
+ return NULL;
+
+ memset(server, 0, sizeof(struct DBusServer));
+ _dbus_rmutex_new_at_location (&server->mutex);
+ if (server->mutex == NULL)
+ goto failed;
+ server->address = address;
+
+ return server;
+
+failed:
+ dbus_free(server);
+ return NULL;
+}
+
+
/**
* Finalizes the members of the DBusServer base class.
* Chained up to by subclass finalizers.
typedef void (* DBusNewConnectionFunction) (DBusServer *server,
DBusConnection *new_connection,
void *data);
+DBUS_EXPORT
+DBusServer* dbus_server_init_mini (char* address);
DBUS_EXPORT
DBusServer* dbus_server_listen (const char *address,
const DBusString *body;
int size;
+ dbus_message_set_serial(message, 1);
dbus_message_lock (message);
_dbus_message_get_network_data (message, &header, &body);
ret_size = _dbus_string_get_length(header);
size = _dbus_string_get_length(body);
memcpy(data, _dbus_string_get_const_data(body), size);
ret_size += size;
- dbus_message_unref(message);
return ret_size;
}