#include <dbus/dbus-hash.h>
#include <dbus/dbus-credentials.h>
#include <dbus/dbus-internals.h>
+#include <kdbus-d.h>
#ifdef DBUS_CYGWIN
#include <signal.h>
unsigned int keep_umask : 1;
unsigned int allow_anonymous : 1;
unsigned int systemd_activation : 1;
+ unsigned int is_kdbus : 1;
+ DBusConnection *myConnection;
};
static dbus_int32_t server_data_slot = -1;
if (address)
{
- DBusServer *server;
+ if(!strcmp(_dbus_string_get_const_data(address), "kdbus"))
+ {
+ DBusBusType type;
- server = dbus_server_listen (_dbus_string_get_const_data(address), error);
- if (server == NULL)
- {
- _DBUS_ASSERT_ERROR_IS_SET (error);
- goto failed;
- }
- else if (!setup_server (context, server, auth_mechanisms, error))
- {
- _DBUS_ASSERT_ERROR_IS_SET (error);
- goto failed;
- }
+ context->is_kdbus = TRUE;
- if (!_dbus_list_append (&context->servers, server))
- goto oom;
+ if(!strcmp (context->type, "system"))
+ type = DBUS_BUS_SYSTEM;
+ else if(!strcmp (context->type, "session"))
+ type = DBUS_BUS_SESSION;
+ else
+ type = DBUS_BUS_STARTER;
+
+ if(!make_kdbus_bus(type, error))
+ goto failed;
+
+ context->myConnection = daemon_as_client(type, error);
+ if(context->myConnection == NULL)
+ goto failed;
+ }
+ else
+ {
+ DBusServer *server;
+
+ server = dbus_server_listen (_dbus_string_get_const_data(address), error);
+ if (server == NULL)
+ {
+ _DBUS_ASSERT_ERROR_IS_SET (error);
+ goto failed;
+ }
+ else if (!setup_server (context, server, auth_mechanisms, error))
+ {
+ _DBUS_ASSERT_ERROR_IS_SET (error);
+ goto failed;
+ }
+
+ if (!_dbus_list_append (&context->servers, server))
+ goto oom;
+ }
}
else
{
return context->loop;
}
+DBusConnection* bus_context_get_myConnection(BusContext *context)
+{
+ return context->myConnection;
+}
+
dbus_bool_t
bus_context_allow_unix_user (BusContext *context,
unsigned long uid)
BusActivation* bus_context_get_activation (BusContext *context);
BusMatchmaker* bus_context_get_matchmaker (BusContext *context);
DBusLoop* bus_context_get_loop (BusContext *context);
+DBusConnection* bus_context_get_myConnection (BusContext *context);
dbus_bool_t bus_context_allow_unix_user (BusContext *context,
unsigned long uid);
dbus_bool_t bus_context_allow_windows_user (BusContext *context,
--- /dev/null
+/*
+ * kdbus-d.c
+ *
+ * Created on: Sep 4, 2013
+ * Author: r.pajak
+ *
+ * kdbus add-on to dbus daemon
+ *
+ */
+
+#include <kdbus-d.h>
+#include <dbus/dbus-connection-internal.h>
+
+dbus_bool_t make_kdbus_bus(DBusBusType type, DBusError *error)
+{
+
+ return TRUE;
+}
+
+DBusConnection* daemon_as_client(DBusBusType type, DBusError *error)
+{
+ DBusConnection* connection;
+
+ connection = dbus_bus_get(type, error);
+ if(connection == NULL)
+ return NULL;
+
+ if(dbus_bus_request_name(connection, DBUS_SERVICE_DBUS, 0, error) != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER)
+ goto failed;
+
+ 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;
+
+ return connection;
+
+failed:
+ _dbus_connection_close_possibly_shared (connection);
+ dbus_connection_unref (connection);
+ connection = NULL;
+ return NULL;
+}
--- /dev/null
+/*
+ * kdbus-d.h
+ *
+ * Created on: Sep 4, 2013
+ * Author: r.pajak
+ *
+ * kdbus add-on to dbus daemon
+ *
+ */
+
+#ifndef KDBUS_D_H_
+#define KDBUS_D_H_
+
+#include <dbus/dbus-bus.h>
+#include <bus.h>
+
+dbus_bool_t make_kdbus_bus(DBusBusType type, DBusError *error);
+DBusConnection* daemon_as_client(DBusBusType type, DBusError *error);
+
+
+#endif /* KDBUS_H_ */