diff options
Diffstat (limited to 'server/alarm-manager-dbus.c')
-rw-r--r-- | server/alarm-manager-dbus.c | 109 |
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); |