#include <app_manager.h>
#include <types_internal.h>
-#include <dbus_listener_iface.h>
#include "server.h"
#include "client_request.h"
#include "access_control/peer_creds.h"
static bool name_acquired = false;
static ctx::dbus_server_impl *_instance = NULL;
static GDBusConnection *dbus_conn_session = NULL;
-static GDBusConnection *dbus_conn_system = NULL;
static guint dbus_owner_id = 0;
static GDBusNodeInfo *dbus_node_info = NULL;
g_dbus_node_info_unref(dbus_node_info);
dbus_node_info = NULL;
}
-
- if (dbus_conn_system) {
- g_dbus_connection_close_sync(dbus_conn_system, NULL, NULL);
- g_object_unref(dbus_conn_system);
- dbus_conn_system = NULL;
- }
}
void ctx::dbus_server_impl::publish(const char* dest, int req_id, const char* subject, int error, const char* data)
G_DBUS_CALL_FLAGS_NONE, DBUS_TIMEOUT, NULL, handle_call_result, &call_count);
}
-static void handle_signal_received(GDBusConnection *conn, const gchar *sender,
- const gchar *obj_path, const gchar *iface, const gchar *signal_name,
- GVariant *param, gpointer user_data)
-{
- IF_FAIL_VOID_TAG(user_data, _W, "user_data cannot be null");
- ctx::dbus_listener_iface *listener = static_cast<ctx::dbus_listener_iface*>(user_data);
- listener->on_signal_received(sender, obj_path, iface, signal_name, param);
-}
-
-int64_t ctx::dbus_server_impl::subscribe_system_signal(const char* sender, const char* path, const char* iface, const char* name, ctx::dbus_listener_iface* listener)
-{
- IF_FAIL_RETURN_TAG(connect_system(), -1, _E, "Dbus not connected");
- guint sid = g_dbus_connection_signal_subscribe(dbus_conn_system,
- sender, iface, name, path, NULL, G_DBUS_SIGNAL_FLAGS_NONE,
- handle_signal_received, listener, NULL);
- return static_cast<int64_t>(sid);
-}
-
-int64_t ctx::dbus_server_impl::subscribe_session_signal(const char* sender, const char* path, const char* iface, const char* name, ctx::dbus_listener_iface* listener)
-{
- IF_FAIL_RETURN_TAG(dbus_conn_session, -1, _E, "Dbus not connected");
- guint sid = g_dbus_connection_signal_subscribe(dbus_conn_session,
- sender, iface, name, path, NULL, G_DBUS_SIGNAL_FLAGS_NONE,
- handle_signal_received, listener, NULL);
- return static_cast<int64_t>(sid);
-}
-
-void ctx::dbus_server_impl::unsubscribe_system_signal(int64_t subscription_id)
-{
- IF_FAIL_VOID_TAG(subscription_id >= 0, _W, "Invalid parameter");
- g_dbus_connection_signal_unsubscribe(dbus_conn_system, static_cast<guint>(subscription_id));
-}
-
-void ctx::dbus_server_impl::unsubscribe_session_signal(int64_t subscription_id)
-{
- IF_FAIL_VOID_TAG(dbus_conn_session, _E, "Dbus not connected");
- IF_FAIL_VOID_TAG(subscription_id >= 0, _W, "Invalid parameter");
- g_dbus_connection_signal_unsubscribe(dbus_conn_session, static_cast<guint>(subscription_id));
-}
-
-bool ctx::dbus_server_impl::connect_system()
-{
- IF_FAIL_RETURN(dbus_conn_system == NULL, true);
-
- GError *gerr = NULL;
- gchar *addr = g_dbus_address_get_for_bus_sync(G_BUS_TYPE_SYSTEM, NULL, &gerr);
- HANDLE_GERROR(gerr);
- IF_FAIL_RETURN(addr, false);
-
- dbus_conn_system = g_dbus_connection_new_for_address_sync(addr,
- (GDBusConnectionFlags)(G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT | G_DBUS_CONNECTION_FLAGS_MESSAGE_BUS_CONNECTION),
- NULL, NULL, &gerr);
- g_free(addr);
- HANDLE_GERROR(gerr);
- IF_FAIL_RETURN(dbus_conn_system, false);
-
- _D("System Dbus Connected: %s", g_dbus_connection_get_unique_name(dbus_conn_system));
- return true;
-}
-
void ctx::dbus_server::publish(const char* dest, int req_id, const char* subject, int error, const char* data)
{
_instance->publish(dest, req_id, subject, error, data);
#include <sys/types.h>
#include <string>
-#include <dbus_server_iface.h>
namespace ctx {
- class dbus_server_impl : public dbus_server_iface {
+ class dbus_server_impl {
public:
dbus_server_impl();
~dbus_server_impl();
void publish(const char *dest, int req_id, const char *subject, int error, const char *data);
void call(const char *dest, const char *obj, const char *iface, const char *method, GVariant *param);
- int64_t subscribe_system_signal(const char *sender, const char *path, const char *iface, const char *name, dbus_listener_iface *listener);
- int64_t subscribe_session_signal(const char *sender, const char *path, const char *iface, const char *name, dbus_listener_iface *listener);
- void unsubscribe_system_signal(int64_t subscription_id);
- void unsubscribe_session_signal(int64_t subscription_id);
-
- private:
- bool connect_system();
}; /* class ctx::dbus_server */