" </node>";
/* ---------------------------------------------------------------------------------------------------- */
+#define _FREEDESKTOP_BUS_NAME "org.freedesktop.DBus"
+#define _FREEDESKTOP_OBJECT_PATH "/org/freedesktop/DBus"
+#define _FREEDESKTOP_INTERFACE "org.freedesktop.DBus"
+#define _FREEDESKTOP_GETPROCESSID_METHOD "GetConnectionUnixProcessID"
+
+int get_pid_with_connection(const gchar* sender) {
+ int origin_client_pid;
+ GError *error = NULL;
+ GVariant * connection;
+
+ connection = g_variant_new ("(s)", sender);
+
+ GVariant *result =
+ g_dbus_connection_call_sync (_gdbus_conn,
+ _FREEDESKTOP_BUS_NAME,
+ _FREEDESKTOP_OBJECT_PATH,
+ _FREEDESKTOP_INTERFACE,
+ _FREEDESKTOP_GETPROCESSID_METHOD,
+ connection,
+ NULL,
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ NULL,
+ &error);
+
+ g_variant_get(result, "(u)", &origin_client_pid);
+ DEBUG("origin_client_pid: %d\n", origin_client_pid);
+
+ if (result)
+ g_variant_unref (result);
+
+ if (error) {
+ DEBUG("Failed to call remote method - %i : %s\n", error->code, error->message);
+ g_error_free (error);
+ error = NULL;
+ g_object_unref (_gdbus_conn);
+ return -1;
+ }
+
+ return origin_client_pid;
+}
+
void set_default_dbus_interface(void)
{
_gdbus.get_sync = g_bus_get_sync;
_gdbus.invocation_return_value = g_dbus_method_invocation_return_value;
}
-static int _request_service(GVariant *parameters)
+static int _request_service(GVariant *parameters, int origin_client_pid)
{
int result = ORCH_ERROR_NONE;
if (g_strcmp0(app_name, "") == 0)
return ORCH_ERROR_INVALID_PARAMETER;
- result = _request_service_cb(app_name, self_select, service_info, count, client_pid);
+ if (origin_client_pid != client_pid)
+ DEBUG("not matched clinet_pid from client and dbus, origin_client_pid(%d), client_pid(%d)\n", origin_client_pid, client_pid);
+
+ result = _request_service_cb(app_name, self_select, service_info, count, origin_client_pid);
return result;
}
gpointer user_data)
{
int ret = ORCH_ERROR_NONE;
+ int origin_client_pid;
+
+ origin_client_pid = get_pid_with_connection(sender);
+ if (origin_client_pid < 0) {
+ DEBUG("get_pid_with_connection error!!\n");
+ }
if (g_strcmp0(method_name, "request_service") == 0)
{
- ret = _request_service(parameters);
+ ret = _request_service(parameters, origin_client_pid);
}
if (ret == ORCH_ERROR_NONE)