summaryrefslogtreecommitdiff
path: root/server/alarm-manager-dbus.c
diff options
context:
space:
mode:
Diffstat (limited to 'server/alarm-manager-dbus.c')
-rw-r--r--server/alarm-manager-dbus.c109
1 files changed, 59 insertions, 50 deletions
diff --git a/server/alarm-manager-dbus.c b/server/alarm-manager-dbus.c
index 927ae04..43ff36f 100644
--- a/server/alarm-manager-dbus.c
+++ b/server/alarm-manager-dbus.c
@@ -142,7 +142,7 @@ static const gchar introspection_xml[] =
" </method>"
" <method name='alarm_get_list_of_ids'>"
" <arg type='i' name='max_number_of_ids' direction='in' />"
-" <arg type='ai' name='alarm_id' direction='out' />"
+" <arg type='a(i)' name='alarm_id' direction='out' />"
" <arg type='i' name='number_of_ids' direction='out' />"
" <arg type='i' name='return_code' direction='out' />"
" </method>"
@@ -228,7 +228,7 @@ static gboolean __send_noti_to_session_bus(char *service_name,
{
int fd;
int ret;
- int len;
+ size_t len;
struct sockaddr_un saddr;
uint8_t *data;
GVariant *gv;
@@ -270,18 +270,18 @@ static gboolean __send_noti_to_session_bus(char *service_name,
g_variant_store(gv, gv_data);
g_variant_unref(gv);
- data = (uint8_t *)malloc(len + 4);
+ data = (uint8_t *)malloc(len + sizeof(len));
if (!data) {
close(fd);
free(gv_data);
return FALSE;
}
- memcpy(data, &len, 4);
- memcpy(data + 4, gv_data, len);
+ memcpy(data, &len, sizeof(len));
+ memcpy(data + sizeof(len), gv_data, len);
free(gv_data);
- if (send(fd, data, len + 4, 0) == -1) {
+ if (send(fd, data, len + sizeof(len), 0) == -1) {
LOGE("sendto() failed (errno %d)", errno);
free(data);
close(fd);
@@ -634,38 +634,40 @@ static void handle_method_call(GDBusConnection *connection,
pid_t pid = __get_caller_pid(name);
if (g_strcmp0(method_name, "alarm_create_periodic") == 0) {
- ret = alarm_manager_alarm_create_periodic(parameters, uid, pid, &alarm_id);
+ ret = alarm_manager_alarm_create_periodic(parameters, uid, pid, sender, &alarm_id);
g_dbus_method_invocation_return_value(invoc, g_variant_new("(ii)", alarm_id, ret));
} else if (g_strcmp0(method_name, "alarm_create") == 0) {
- ret = alarm_manager_alarm_create(parameters, uid, pid, &alarm_id);
+ ret = alarm_manager_alarm_create(parameters, uid, pid, sender, &alarm_id);
g_dbus_method_invocation_return_value(invoc, g_variant_new("(ii)", alarm_id, ret));
} else if (g_strcmp0(method_name, "alarm_create_appsvc") == 0) {
- ret = alarm_manager_alarm_create_appsvc(parameters, uid, pid, &alarm_id);
+ ret = alarm_manager_alarm_create_appsvc(parameters, uid, pid, sender, &alarm_id);
g_dbus_method_invocation_return_value(invoc, g_variant_new("(ii)", alarm_id, ret));
} else if (g_strcmp0(method_name, "alarm_create_noti") == 0) {
const char *notification_priv = "http://tizen.org/privilege/notification";
ret = _cynara_check(invoc, notification_priv, pid);
if (ret == ALARMMGR_RESULT_SUCCESS) {
- ret = alarm_manager_alarm_create_noti(parameters, uid, pid, &alarm_id);
+ ret = alarm_manager_alarm_create_noti(parameters, uid, pid, sender, &alarm_id);
}
g_dbus_method_invocation_return_value(invoc, g_variant_new("(ii)", alarm_id, ret));
} else if (g_strcmp0(method_name, "alarm_delete") == 0) {
- ret = alarm_manager_alarm_delete(parameters, uid, pid);
+ ret = alarm_manager_alarm_delete(parameters, uid, pid, sender);
g_dbus_method_invocation_return_value(invoc, g_variant_new("(i)", ret));
} else if (g_strcmp0(method_name, "alarm_delete_all") == 0) {
- ret = alarm_manager_alarm_delete_all(parameters, uid, pid);
+ ret = alarm_manager_alarm_delete_all(parameters, uid, pid, sender);
g_dbus_method_invocation_return_value(invoc, g_variant_new("(i)", ret));
} else if (g_strcmp0(method_name, "alarm_update") == 0) {
- ret = alarm_manager_alarm_update(parameters, uid, pid);
+ ret = alarm_manager_alarm_update(parameters, uid, pid, sender);
g_dbus_method_invocation_return_value(invoc, g_variant_new("(i)", ret));
} else if (g_strcmp0(method_name, "alarm_get_number_of_ids") == 0) {
- ret = alarm_manager_alarm_get_number_of_ids(uid, pid, &num_of_alarm);
+ ret = alarm_manager_alarm_get_number_of_ids(uid, pid, sender, &num_of_alarm);
g_dbus_method_invocation_return_value(invoc, g_variant_new("(ii)", num_of_alarm, ret));
} else if (g_strcmp0(method_name, "alarm_get_list_of_ids") == 0) {
- GVariant *arr = NULL;
+ GVariantBuilder *arr = g_variant_builder_new(G_VARIANT_TYPE("a(i)"));
- ret = alarm_manager_alarm_get_list_of_ids(parameters, uid, pid, &arr, &num_of_alarm);
- g_dbus_method_invocation_return_value(invoc, g_variant_new("(@aiii)", arr, num_of_alarm, ret));
+ ret = alarm_manager_alarm_get_list_of_ids(parameters, uid, pid, sender, arr, &num_of_alarm);
+ g_dbus_method_invocation_return_value(invoc, g_variant_new("(a(i)ii)", arr, num_of_alarm, ret));
+
+ g_variant_builder_unref(arr);
} else if (g_strcmp0(method_name, "alarm_get_appsvc_info") == 0) {
gchar *b_data = NULL;
@@ -682,19 +684,19 @@ static void handle_method_call(GDBusConnection *connection,
if (noti_data)
free(noti_data);
} else if (g_strcmp0(method_name, "alarm_get_info") == 0) {
- alarm_info_t alarm_info = { 0, };
+ base_info_t base_info = { 0, };
- ret = alarm_manager_alarm_get_info(parameters, uid, &alarm_info);
+ ret = alarm_manager_alarm_get_info(parameters, uid, &base_info);
g_dbus_method_invocation_return_value(
invoc, g_variant_new("(iiiiiiiiiiiixi)",
- alarm_info.start.year, alarm_info.start.month,
- alarm_info.start.day, alarm_info.start.hour,
- alarm_info.start.min, alarm_info.start.sec,
- alarm_info.end.year, alarm_info.end.month,
- alarm_info.end.day, alarm_info.mode.u_interval.day_of_week,
- alarm_info.mode.repeat, alarm_info.alarm_type,
- (gint64)alarm_info.reserved_info, ret));
+ base_info.start.year, base_info.start.month,
+ base_info.start.day, base_info.start.hour,
+ base_info.start.min, base_info.start.sec,
+ base_info.end.year, base_info.end.month,
+ base_info.end.day, base_info.mode.u_interval.day_of_week,
+ base_info.mode.repeat, base_info.alarm_type,
+ (gint64)base_info.reserved_info, ret));
} else if (g_strcmp0(method_name, "alarm_get_next_duetime") == 0) {
time_t duetime;
ret = alarm_manager_alarm_get_next_duetime(parameters, uid, &duetime);
@@ -715,12 +717,12 @@ static void handle_method_call(GDBusConnection *connection,
_display_unlock_state(DEVICED_LCD_OFF, DEVICED_SLEEP_MARGIN);
} else if (g_strcmp0(method_name, "alarm_set_time") == 0) {
_display_lock_state(DEVICED_LCD_OFF, DEVICED_STAY_CUR_STATE, 0);
- ret = alarm_manager_alarm_set_time(parameters, pid);
+ ret = alarm_manager_alarm_set_time(parameters, pid, sender);
g_dbus_method_invocation_return_value(invoc, g_variant_new("(i)", ret));
_display_unlock_state(DEVICED_LCD_OFF, DEVICED_SLEEP_MARGIN);
} else if (g_strcmp0(method_name, "alarm_set_time_with_propagation_delay") == 0) {
_display_lock_state(DEVICED_LCD_OFF, DEVICED_STAY_CUR_STATE, 0);
- ret = alarm_manager_alarm_set_time_with_propagation_delay(parameters, pid);
+ ret = alarm_manager_alarm_set_time_with_propagation_delay(parameters, pid, sender);
g_dbus_method_invocation_return_value(invoc, g_variant_new("(i)", ret));
_display_unlock_state(DEVICED_LCD_OFF, DEVICED_SLEEP_MARGIN);
} else if (g_strcmp0(method_name, "alarm_set_timezone") == 0) {
@@ -750,19 +752,6 @@ static void __on_bus_name_acquired(GDBusConnection *connection,
gpointer user_data)
{
LOGD("bus acquired(%s)", name);
-
- guint reg_id = 0;
- GError *error = NULL;
-
- reg_id = g_dbus_connection_register_object(connection,
- ALARM_MGR_DBUS_PATH,
- introspection_data->interfaces[0],
- &interface_vtable,
- NULL, NULL, &error);
- if (reg_id == 0) {
- LOGE("g_dbus_connection_register_object error(%s)", error->message);
- g_error_free(error);
- }
}
static void __on_bus_name_owner_changed(GDBusConnection *connection,
@@ -782,9 +771,11 @@ static void __on_bus_name_owner_changed(GDBusConnection *connection,
if (signal_name && strcmp(signal_name, "NameOwnerChanged") == 0) {
g_variant_get(parameters, "(&sss)", &service_name, NULL, NULL);
- for (entry = g_expired_alarm_list; entry; entry = entry->next) {
- if (entry->data) {
- expire_info = (__expired_alarm_t *) entry->data;
+ for (entry = g_expired_alarm_list; entry;) {
+ expire_info = (__expired_alarm_t *) entry->data;
+ entry = entry->next;
+
+ if (expire_info) {
SECURE_LOGD("expired service(%s), owner changed service(%s)",
expire_info->service_name, service_name);
@@ -797,7 +788,7 @@ static void __on_bus_name_owner_changed(GDBusConnection *connection,
0,
expire_info->uid);
g_expired_alarm_list =
- g_slist_remove(g_expired_alarm_list, entry->data);
+ g_slist_remove(g_expired_alarm_list, (gpointer)expire_info);
g_free(expire_info);
}
}
@@ -811,6 +802,8 @@ bool _initialize_dbus(void)
GError *error = NULL;
guint subsc_id;
guint owner_id;
+ guint reg_id;
+
LOGD("__initialize_dbus Enter");
connection = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error);
@@ -826,25 +819,41 @@ bool _initialize_dbus(void)
subsc_id = g_dbus_connection_signal_subscribe(connection,
"org.freedesktop.DBus", "org.freedesktop.DBus",
"NameOwnerChanged", "/org/freedesktop/DBus", NULL,
- G_DBUS_SIGNAL_FLAGS_NONE, __on_bus_name_owner_changed, NULL, NULL);
+ G_DBUS_SIGNAL_FLAGS_NONE, __on_bus_name_owner_changed,
+ NULL, NULL);
if (subsc_id == 0) {
LOGE("Subscribing to signal for invoking callback is failed.");
g_object_unref(connection);
return false;
}
- introspection_data = g_dbus_node_info_new_for_xml(introspection_xml, &error);
+ introspection_data = g_dbus_node_info_new_for_xml(introspection_xml,
+ &error);
if (!introspection_data) {
- LOGE("g_dbus_node_info_new_for_xml error(%s)", error->message);
+ LOGE("g_dbus_node_info_new_for_xml error(%s)",
+ error ? error->message : "");
g_object_unref(connection);
- g_error_free(error);
+ g_clear_error(&error);
+ return false;
+ }
+
+ reg_id = g_dbus_connection_register_object(connection,
+ ALARM_MGR_DBUS_PATH,
+ introspection_data->interfaces[0],
+ &interface_vtable,
+ NULL, NULL, &error);
+ if (reg_id == 0) {
+ LOGE("g_dbus_connection_register_object error(%s)",
+ error ? error->message : "");
+ g_dbus_node_info_unref(introspection_data);
+ g_object_unref(connection);
+ g_clear_error(&error);
return false;
}
owner_id = g_bus_own_name_on_connection(connection,
ALARM_MGR_DBUS_NAME, G_BUS_NAME_OWNER_FLAGS_NONE,
__on_bus_name_acquired, NULL, NULL, NULL);
-
if (owner_id == 0) {
LOGE("Acquiring the own name is failed.");
g_dbus_node_info_unref(introspection_data);