#define FOREACH_ERROR(ERROR) \
ERROR(UAM_ERROR_NONE, TIZEN_ERROR_NONE) \
ERROR(UAM_ERROR_INVALID_PARAM, TIZEN_ERROR_INVALID_PARAMETER) \
+ ERROR(UAM_ERROR_PERMISSION_DENIED,TIZEN_ERROR_PERMISSION_DENIED) \
ERROR(UAM_ERROR_TIMEOUT, TIZEN_ERROR_TIMED_OUT) \
ERROR(UAM_ERROR_NOW_IN_PROGRESS, TIZEN_ERROR_NOW_IN_PROGRESS) \
ERROR(UAM_ERROR_NOT_SUPPORTED, TIZEN_ERROR_NOT_SUPPORTED) \
--- /dev/null
+[D-BUS Service]
+Name=net.uamd.enabler
+
+Exec=/bin/false
+User=network_fw
+Group=network_fw
+SystemdService=ua-manager.service
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
- <policy user="network_fw">
- <allow own="net.uamd"/>
- </policy>
+ <policy user="root">
+ <allow own="net.uamd"/>
+ <allow own="net.uamd.enabler"/>
+ <allow send_destination="net.uamd"/>
+ <allow send_destination="net.uamd.enabler"/>
+ <allow receive_sender="net.uamd"/>
+ </policy>
+ <policy user="network_fw">
+ <allow own="net.uamd"/>
+ <allow own="net.uamd.enabler"/>
+ <allow send_destination="net.uamd"/>
+ <allow send_destination="net.uamd.enabler"/>
+ <allow receive_sender="net.uamd"/>
+ </policy>
<policy context="default">
<deny own="net.uamd"/>
+ <deny own="net.uamd.enabler"/>
<allow send_destination="net.uamd"/>
</policy>
</busconfig>
[Unit]
Description=User Awareness Frwk Manager
-After=dbus.socket dbus.service
Requires=dbus.socket
+After=dbus.socket
[Service]
-SmackProcessLabel=System
Type=dbus
-BusName=net.uamd
User=network_fw
Group=network_fw
+BusName=net.uamd.enabler
+SmackProcessLabel=System
+ExecStart=/usr/bin/ua-manager
Capabilities=cap_net_admin,cap_net_raw,cap_sys_rawio=eip
SecureBits=keep-caps
-ExecStart=/usr/bin/ua-manager
-KillMode=process
-
-[Install]
-WantedBy=multi-user.target
Release: 1
License: Apache-2.0
Source0: %{name}-%{version}.tar.gz
+Source1: ua-manager.conf
+Source2: net.uamd.service
+Source3: ua-manager.service
Source1001: ua-manager.manifest
%define database_full_path /opt/usr/dbspace/.ua-manager-data.db
BuildRequires: pkgconfig(libtzplatform-config)
BuildRequires: pkgconfig(sqlite3)
BuildRequires: pkgconfig(json-c)
-
-%if 0%{?vd_req:1}
BuildRequires: pkgconfig(vconf)
BuildRequires: pkgconfig(deviced)
-%endif
Requires(post): /sbin/ldconfig
Requires(postun): /sbin/ldconfig
%prep
%setup -q
+cp -a %{SOURCE1} .
+cp -a %{SOURCE2} .
+cp -a %{SOURCE3} .
cp %{SOURCE1001} .
%build
mkdir -p %{buildroot}/opt/usr/data/ua
install -m 0644 config/uam-config.json %{buildroot}%{config_file_path}/uam-config.json
-mkdir -p %{buildroot}%{_unitdir}/multi-user.target.wants
-install -m 0644 packaging/ua-manager.service %{buildroot}%{_unitdir}/ua-manager.service
-ln -s ../ua-manager.service %{buildroot}%{_unitdir}/multi-user.target.wants/ua-manager.service
-
-mkdir -p %{buildroot}/etc/dbus-1/system.d/
-cp -af %{_builddir}/%{name}-%{version}/packaging/ua-manager.conf %{buildroot}/etc/dbus-1/system.d/
+mkdir -p %{buildroot}%{_sysconfdir}/dbus-1/system.d
+cp ua-manager.conf %{buildroot}%{_sysconfdir}/dbus-1/system.d/ua-manager.conf
+mkdir -p %{buildroot}%{_datadir}/dbus-1/system-services/
+cp net.uamd.service %{buildroot}%{_datadir}/dbus-1/system-services/net.uamd.service
+mkdir -p %{buildroot}%{_unitdir}
+cp ua-manager.service %{buildroot}%{_unitdir}/ua-manager.service
%post -p /sbin/ldconfig
%defattr(-, root, root)
%attr(644,-,-) %{_libdir}/libua-api.so.*
%attr(755,network_fw,network_fw) %{_bindir}/ua-manager
-%{_sysconfdir}/dbus-1/system.d/ua-manager.conf
-%{_unitdir}/multi-user.target.wants/ua-manager.service
-%{_unitdir}/ua-manager.service
-%{_datadir}/dbus-1/system-services/net.uamd.service
-%attr(644,root,root) %{_sysconfdir}/dbus-1/system.d/ua-manager.conf
+%config %{_sysconfdir}/dbus-1/system.d/ua-manager.conf
+%attr(644,root,root) %{_datadir}/dbus-1/system-services/*
+%attr(644,root,root) %{_unitdir}/ua-manager.service
%{config_file_path}/uam-config.json
%config %attr(660, network_fw, network_fw) %{database_full_path}
%config %attr(660, network_fw, network_fw) %{database_full_path}-journal
%files plugins
%defattr(-, root, root)
%{_includedir}/ua-manager/ua-plugin.h
-%if 0%{?vd_req:1}
%{_includedir}/ua-manager/ua-power-plugin.h
-%endif
%{_libdir}/pkgconfig/ua-plugins.pc
void _uam_gdbuam_deinit_proxy(void);
+int _uam_sync_enable(int enable);
+
int _uam_sync_request(
int req_func, GArray *in_param1,
GArray *in_param2, GArray *in_param3,
FUNC_ENTRY;
int ret;
+ ret = _uam_sync_enable(TRUE);
+ if (UAM_ERROR_NONE != ret) {
+ return ret;
+ }
+
ret = _uam_register_event_handler(cb, user_data);
if (UAM_ERROR_NONE == ret) {
cb_info.callback = cb;
FUNC_ENTRY;
int ret;
+ ret = _uam_sync_enable(FALSE);
+ if (UAM_ERROR_NONE != ret) {
+ return ret;
+ }
+
ret = _uam_unregister_event_handler();
FUNC_EXIT;
FUNC_EXIT;
}
+int _uam_sync_enable(int enable)
+{
+ FUNC_ENTRY;
+
+ gint timeout = 10000;
+ int result = UAM_ERROR_NONE;
+
+ GError *error = NULL;
+ GVariant *variant = NULL;
+ GDBusConnection *conn = NULL;
+
+ conn = _uam_get_gdbuam_conn();
+ retv_if(NULL == conn, UAM_ERROR_INTERNAL);
+
+ variant = g_dbus_connection_call_sync(conn,
+ UAM_DBUS_NAME".enabler",
+ UAM_DAEMON_PATH"/enabler",
+ UAM_DBUS_NAME".enabler",
+ "enable",
+ g_variant_new("(i)", enable), NULL,
+ G_DBUS_CALL_FLAGS_NONE,
+ timeout, NULL, &error);
+ if (variant) {
+ g_variant_get(variant, "(i)", &result);
+ UAM_DBG("%s status [0x%x] %s",
+ (enable) ? "enable" : "disable", result,
+ _uam_error_to_str(result));
+ g_variant_unref(variant);
+ } else if (error) {
+ UAM_ERR("D-Bus API failure: errCode[%x], message[%s]",
+ error->code, error->message);
+ if (strstr(error->message, "AccessDenied"))
+ result = UAM_ERROR_PERMISSION_DENIED;
+ else
+ result = UAM_ERROR_INTERNAL;
+ g_error_free(error);
+ return result ;
+ }
+
+ return result;
+}
+
int _uam_sync_request(
int req_func,
GArray *in_param1,
#include "ua-manager-common.h"
#include "ua-plugin-manager.h"
-static GMainLoop *main_loop;
+GMainLoop *main_loop;
static gboolean is_initialized = FALSE;
static void __uam_signal_handler(
#include "ua-manager-common.h"
#include "ua-manager-core.h"
+extern GMainLoop *main_loop;
+
/* For maintaining Application Sync API call requests */
GSList *request_list = NULL;
static GDBusConnection *uam_manager_conn;
static guint g_dbus_object_id = 0;
static guint owner_id = 0;
+static guint g_dbus_enabler_object_id = 0;
+static guint enabler_dbus_id = 0;
static guint owner_sig_id = 0;
+static const gchar uam_enabler_introspection_xml[] =
+"<node name='/net/uamd'>"
+" <interface name='net.uamd.enabler'>"
+" <method name='enable'>"
+" <arg type='i' name='enable' direction='in' />"
+" <arg type='i' name='result' direction='out' />"
+" </method>"
+" </interface>"
+"</node>";
+
+
static const gchar uam_manager_introspection_xml[] =
"<node name='/net/uamd'>"
" <interface name='net.uamd'>"
{0}
};
+static void __uam_enabler_method(
+ GDBusConnection *connection,
+ const gchar *sender,
+ const gchar *object_path,
+ const gchar *interface_name,
+ const gchar *method_name,
+ GVariant *parameters,
+ GDBusMethodInvocation *invocation,
+ gpointer user_data)
+{
+ FUNC_ENTRY;
+ int enable = FALSE;
+ int result = UAM_ERROR_NONE;
+
+ UAM_DBG("Method[%s] Path[%s] Interface[%s]",
+ method_name, object_path, interface_name);
+
+ if (0 == g_strcmp0(method_name, "enable")) {
+ g_variant_get(parameters, "(i)", &enable);
+ if (TRUE == enable) {
+ /* To-Do : We should add user to list
+ * and Enabler ua-manager */
+ UAM_DBG("Enable ua-manager");
+ } else {
+ /* To-Do : If only one user is activated,
+ * we should terminite daemon */
+ UAM_DBG("Disable ua-manager");
+ g_main_loop_quit(main_loop);
+ }
+ g_dbus_method_invocation_return_value(invocation,
+ g_variant_new("(i)", result));
+ }
+ FUNC_EXIT;
+ return;
+}
+
+
+static const GDBusInterfaceVTable uam_enaber_method_table = {
+ __uam_enabler_method,
+ NULL,
+ NULL,
+ {0}
+};
+
static GDBusNodeInfo *__uam_manager_create_method_node_info(
const gchar *introspection_data)
{
return node_info;
}
+static int __uam_enabler_register_object(
+ GDBusConnection *conn, GDBusNodeInfo *node_info)
+{
+ FUNC_ENTRY;
+ GError *error = NULL;
+
+ retv_if(NULL == node_info, UAM_ERROR_INTERNAL);
+
+ g_dbus_enabler_object_id = g_dbus_connection_register_object(conn,
+ UAM_DAEMON_PATH"/enabler",
+ node_info->interfaces[0],
+ &uam_enaber_method_table,
+ NULL, NULL, &error);
+ retv_if(0 == g_dbus_enabler_object_id, UAM_ERROR_INTERNAL);
+
+ FUNC_EXIT;
+ return UAM_ERROR_NONE;
+}
+
static int __uam_manager_register_object(
GDBusConnection *conn, GDBusNodeInfo *node_info)
{
g_dbus_object_id = 0;
}
+ if (g_dbus_enabler_object_id > 0) {
+ g_dbus_connection_unregister_object(
+ conn, g_dbus_enabler_object_id);
+ g_dbus_enabler_object_id = 0;
+ }
+
FUNC_EXIT;
return UAM_ERROR_NONE;
}
GDBusConnection *connection, const gchar *name, gpointer user_data)
{
FUNC_ENTRY;
+
+ UAM_INFO("DBus %s bus acquired", name);
+
GDBusNodeInfo *node_info = NULL;
UAM_INFO("DBus bus acquired");
UAM_DBG("owner_sig_id: [%d]", owner_sig_id);
uam_manager_conn = connection;
+
FUNC_EXIT;
}
+static void __uam_enabler_bus_acquired(
+ GDBusConnection *connection, const gchar *name, gpointer user_data)
+{
+ GDBusNodeInfo *node_info = NULL;
+
+ UAM_INFO("DBus bus acquired");
+
+ ret_if(connection == NULL);
+
+ node_info = __uam_manager_create_method_node_info(
+ uam_enabler_introspection_xml);
+ ret_if(node_info == NULL);
+
+ __uam_enabler_register_object(connection, node_info);
+ g_dbus_node_info_unref(node_info);
+}
+
int _uam_manager_register(void)
{
FUNC_ENTRY;
owner_id = g_bus_own_name(G_BUS_TYPE_SYSTEM,
UAM_DBUS_NAME,
- G_BUS_NAME_OWNER_FLAGS_NONE,
+ G_BUS_NAME_OWNER_FLAGS_REPLACE,
__uam_manager_bus_acquired_cb,
__uam_manager_name_acquired_cb,
__uam_manager_name_lost_cb,
UAM_DBG("owner_id is [%d]", owner_id);
+ /* Get D-Bus owner to activate mesh service daemon */
+ enabler_dbus_id = g_bus_own_name(G_BUS_TYPE_SYSTEM,
+ UAM_DBUS_NAME".enabler",
+ G_BUS_NAME_OWNER_FLAGS_REPLACE,
+ __uam_enabler_bus_acquired,
+ NULL,
+ NULL,
+ NULL, NULL);
+
+ retv_if(0 == enabler_dbus_id, UAM_ERROR_INTERNAL);
+
FUNC_EXIT;
return UAM_ERROR_NONE;
}
}
if (owner_id > 0) {
- //g_bus_unown_name(owner_id);
+ g_bus_unown_name(owner_id);
owner_id = 0;
}
+
+ if (enabler_dbus_id > 0) {
+ g_bus_unown_name(enabler_dbus_id);
+ enabler_dbus_id = 0;
+ }
}
FUNC_EXIT;
SET(HEADERS
ua-plugin.h
+ ua-power-plugin.h
)
-IF("$ENV{CFLAGS}" MATCHES "-DVD_REQ")
- LIST(APPEND HEADERS ua-power-plugin.h)
-ENDIF()
-
FOREACH(hfile ${HEADERS})
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/${hfile} DESTINATION include/ua-manager)
ENDFOREACH(hfile)