From 9bcc45a35fc31622a727a56e390ef7251fea40c4 Mon Sep 17 00:00:00 2001 From: "seungha.son" Date: Thu, 5 Jan 2017 22:19:24 +0900 Subject: [PATCH 01/16] Implements some function for check busname is existed - Before sending an event to the notification caller using the notification_send_event() API, check if the busname exists. - By using hashtable data-structure, the priv_id of notification_h and the busname are managed. - Check by watching the busname of the app that posted the notification. related with patch : https://review.tizen.org/gerrit/#/c/108771/ API : notification_check_event_sender() Signed-off-by: seungha.son Change-Id: Ie92a1c5e7ac46cc4d2aa2902f35043861f65c814 --- include/notification_service.h | 2 + include/service_common.h | 1 + src/notification_service.c | 254 ++++++++++++++++++++++++++++++----------- src/service_common.c | 4 +- 4 files changed, 191 insertions(+), 70 deletions(-) diff --git a/include/notification_service.h b/include/notification_service.h index 1e9c77d..d7bb89b 100755 --- a/include/notification_service.h +++ b/include/notification_service.h @@ -43,6 +43,8 @@ int notification_get_block_state(GVariant *parameters, GVariant **reply_body, ui int notification_load_dnd_allow_exception(GVariant *parameters, GVariant **reply_body, uid_t uid); int notification_update_dnd_allow_exception(GVariant *parameters, GVariant **reply_body, uid_t uid); int notification_send_noti_event(GVariant *parameters, GVariant **reply_body); +int notification_check_event_receiver(GVariant *parameters, GVariant **reply_body); +int notification_reset_event_receiver(GVariant *parameters, GVariant **reply_body, const char *sender); int notification_register_dbus_interface(); int notification_delete_noti_by_appid(const char *appid, uid_t uid); diff --git a/include/service_common.h b/include/service_common.h index a44d8c1..629b67b 100755 --- a/include/service_common.h +++ b/include/service_common.h @@ -50,6 +50,7 @@ typedef struct monitoring_info { void print_noti(notification_h noti); int send_notify(GVariant *body, char *cmd, GHashTable **monitoring_hash, char *interface_name, uid_t uid); +bool is_existed_busname(const char *sender_name); int send_event_notify_by_busname(GVariant *body, char *cmd, char *busname, char *interface_name); int service_register(GVariant *parameters, GVariant **reply_body, const gchar *sender, GBusNameAppearedCallback name_appeared_handler, diff --git a/src/notification_service.c b/src/notification_service.c index 2eb857e..dec37e3 100755 --- a/src/notification_service.c +++ b/src/notification_service.c @@ -55,11 +55,12 @@ typedef struct _dnd_alarm_id { alarm_id_t dnd_end_id; } dnd_alarm_id_s; -static GHashTable *__event_sender_hash; +static GList *__event_list = NULL; typedef struct _event_sender_info { int priv_id; char *busname; + guint watcher_id; } event_sender_info_s; /*! @@ -158,6 +159,10 @@ static void _noti_dbus_method_call_handler(GDBusConnection *conn, ret = notification_update_dnd_allow_exception(parameters, &reply_body, uid); else if (g_strcmp0(method_name, "send_noti_event") == 0) ret = notification_send_noti_event(parameters, &reply_body); + else if (g_strcmp0(method_name, "check_event_receiver") == 0) + ret = notification_check_event_receiver(parameters, &reply_body); + else if (g_strcmp0(method_name, "reset_event_handler") == 0) + ret = notification_reset_event_receiver(parameters, &reply_body, sender); if (ret == NOTIFICATION_ERROR_NONE) { DbgPrint("notification service success : %d", ret); @@ -335,6 +340,15 @@ int notification_register_dbus_interface() " " " " + " " + " " + " " + " " + + " " + " " + " " + " " " " " " @@ -343,7 +357,7 @@ int notification_register_dbus_interface() return service_common_register_dbus_interface(introspection_xml, _noti_interface_vtable); } -static void __free_event_list(gpointer data) +static void __free_event_info(gpointer data) { event_sender_info_s *info = (event_sender_info_s *)data; @@ -468,51 +482,103 @@ static int _validate_and_set_param_uid_with_uid(uid_t uid, uid_t *param_uid) return ret; } -static int __add_sender_info(int priv_id, const char *busname, uid_t uid) +static void __sender_name_appeared_cb(GDBusConnection *connection, + const gchar *name, + const gchar *name_owner, + gpointer user_data) +{ + DbgPrint("sender name appeared name: %s, name_owner : %s", name, name_owner); +} + +static void __sender_name_vanished_cb(GDBusConnection *connection, + const gchar *name, + gpointer user_data) +{ + GList *delete_list = NULL; + event_sender_info_s *info; + + if (!user_data) + return; + + info = (event_sender_info_s *)user_data; + + DbgPrint("sender name vanished name : %s, priv_id : %d, watcher_id : %d", + name, info->priv_id, info->watcher_id); + + delete_list = g_list_find_custom(__event_list, GUINT_TO_POINTER(info->priv_id), + (GCompareFunc)__priv_id_compare); + if (delete_list) { + __event_list = g_list_remove(__event_list, info); + g_bus_unwatch_name(info->watcher_id); + __free_event_info(info); + } +} + +static guint __insert_sender_watcher_id(event_sender_info_s *sender_info) +{ + guint watcher_id = 0; + watcher_id = g_bus_watch_name(G_BUS_TYPE_SYSTEM, + sender_info->busname, + G_BUS_NAME_WATCHER_FLAGS_NONE, + __sender_name_appeared_cb, + __sender_name_vanished_cb, + sender_info, + NULL); + if (!watcher_id) { + ErrPrint("fail to watch sender name"); + return 0; + } + + DbgPrint("watch on %s success - watcher_id : %d", sender_info->busname, watcher_id); + return watcher_id; +} + +static void __add_sender_info(int priv_id, const char *busname) { - GList *event_list = NULL; GList *find_list = NULL; event_sender_info_s *sender_info; event_sender_info_s *tmp_info = NULL; - if (__event_sender_hash == NULL) - __event_sender_hash = g_hash_table_new(g_direct_hash, g_direct_equal); - - event_list = g_hash_table_lookup(__event_sender_hash, GUINT_TO_POINTER(uid)); + if (busname == NULL) + return; sender_info = (event_sender_info_s *)malloc(sizeof(event_sender_info_s)); if (sender_info == NULL) { - DbgPrint("malloc failed"); - return NOTIFICATION_ERROR_OUT_OF_MEMORY; + ErrPrint("malloc failed"); + return; } sender_info->priv_id = priv_id; sender_info->busname = strdup(busname); - if (event_list == NULL) { - event_list = g_list_append(event_list, sender_info); - g_hash_table_insert(__event_sender_hash, GUINT_TO_POINTER(uid), event_list); + if (__event_list == NULL) { + sender_info->watcher_id = __insert_sender_watcher_id(sender_info); + __event_list = g_list_append(__event_list, sender_info); } else { - event_list = g_list_first(event_list); - find_list = g_list_find_custom(event_list, GUINT_TO_POINTER(priv_id), + __event_list = g_list_first(__event_list); + find_list = g_list_find_custom(__event_list, GUINT_TO_POINTER(priv_id), (GCompareFunc)__priv_id_compare); if (find_list == NULL) { - event_list = g_list_append(event_list, sender_info); + sender_info->watcher_id = __insert_sender_watcher_id(sender_info); + __event_list = g_list_append(__event_list, sender_info); } else { tmp_info = (event_sender_info_s *)g_list_nth_data(find_list, 0); - if (tmp_info->busname) - free(tmp_info->busname); - tmp_info->busname = strdup(busname); - - if (sender_info) { - if (sender_info->busname) - free(sender_info->busname); - free(sender_info); + if (tmp_info->busname) { + if (strcmp(tmp_info->busname, busname)) { + free(tmp_info->busname); + tmp_info->busname = strdup(busname); + g_bus_unwatch_name(tmp_info->watcher_id); + tmp_info->watcher_id = __insert_sender_watcher_id(sender_info); + } + } else { + tmp_info->busname = strdup(busname); + if (!tmp_info->watcher_id) + g_bus_unwatch_name(tmp_info->watcher_id); + tmp_info->watcher_id = __insert_sender_watcher_id(tmp_info); } + __free_event_info(sender_info); } } - - return NOTIFICATION_ERROR_NONE; } int notification_add_noti(GVariant *parameters, GVariant **reply_body, const char *sender, uid_t uid) @@ -549,7 +615,7 @@ int notification_add_noti(GVariant *parameters, GVariant **reply_body, const cha if (ret != NOTIFICATION_ERROR_NONE) return ret; - __add_sender_info(priv_id, sender, noti_uid); + __add_sender_info(priv_id, sender); } notification_free(noti); } else { @@ -947,22 +1013,16 @@ int notification_refresh_noti(GVariant *parameters, GVariant **reply_body, uid_t return ret; } -static int __delete_sender_info(int priv_id, uid_t uid) +static int __delete_sender_info(int priv_id) { int ret = NOTIFICATION_ERROR_NONE; event_sender_info_s *info; - GList *event_list = NULL; GList *delete_list = NULL; GVariant *body = NULL; - if (__event_sender_hash == NULL) - return NOTIFICATION_ERROR_NONE; - - event_list = g_hash_table_lookup(__event_sender_hash, GUINT_TO_POINTER(uid)); - - if (event_list != NULL) { - event_list = g_list_first(event_list); - delete_list = g_list_find_custom(event_list, GUINT_TO_POINTER(priv_id), + if (__event_list != NULL) { + __event_list = g_list_first(__event_list); + delete_list = g_list_find_custom(__event_list, GUINT_TO_POINTER(priv_id), (GCompareFunc)__priv_id_compare); if (delete_list != NULL) { info = (event_sender_info_s *)g_list_nth_data(delete_list, 0); @@ -973,9 +1033,11 @@ static int __delete_sender_info(int priv_id, uid_t uid) ErrPrint("failed to send event notify:%d\n", ret); return ret; } - event_list = g_list_remove(g_list_first(event_list), info); - __free_event_list(info); - g_hash_table_replace(__event_sender_hash, GUINT_TO_POINTER(uid), event_list); + __event_list = g_list_remove(g_list_first(__event_list), info); + g_bus_unwatch_name(info->watcher_id); + __free_event_info(info); + if (g_list_length(__event_list) == 0) + __event_list = NULL; } } @@ -1016,7 +1078,7 @@ int notification_del_noti_single(GVariant *parameters, GVariant **reply_body, ui return ret; } - ret = __delete_sender_info(priv_id, uid); + ret = __delete_sender_info(priv_id); if (ret != NOTIFICATION_ERROR_NONE) return ret; } @@ -1076,7 +1138,7 @@ int notification_del_noti_multiple(GVariant *parameters, GVariant **reply_body, } for (i = 0; i < num_deleted; i++) { - ret = __delete_sender_info(*(list_deleted + i), param_uid); + ret = __delete_sender_info(*(list_deleted + i)); if (ret != NOTIFICATION_ERROR_NONE) return ret; } @@ -1733,32 +1795,24 @@ int notification_update_dnd_allow_exception(GVariant *parameters, GVariant **rep return ret; } -static char *__find_busname_by_priv_id(int priv_id, uid_t uid) +static event_sender_info_s *__find_sender_info_by_priv_id(int priv_id) { - char *busname = NULL; event_sender_info_s *event_info; - GList *event_list; GList *find_list; - if (__event_sender_hash == NULL) + if (__event_list == NULL) return NULL; - event_list = g_hash_table_lookup(__event_sender_hash, GUINT_TO_POINTER(uid)); - if (event_list == NULL) - return NULL; - - event_list = g_list_first(event_list); - find_list = g_list_find_custom(event_list, GUINT_TO_POINTER(priv_id), + __event_list = g_list_first(__event_list); + find_list = g_list_find_custom(__event_list, GUINT_TO_POINTER(priv_id), (GCompareFunc)__priv_id_compare); - if (find_list) { + if (find_list) event_info = g_list_nth_data(find_list, 0); - busname = strdup(event_info->busname); - } else { + else return NULL; - } - return busname; + return event_info; } int notification_send_noti_event(GVariant *parameters, GVariant **reply_body) @@ -1766,11 +1820,10 @@ int notification_send_noti_event(GVariant *parameters, GVariant **reply_body) int ret; int event_type; int priv_id; - char *busname = NULL; + event_sender_info_s *info; GVariant *coupled_body = NULL; GVariant *body = NULL; notification_h noti; - uid_t noti_uid; noti = notification_create(NOTIFICATION_TYPE_NOTI); @@ -1791,17 +1844,23 @@ int notification_send_noti_event(GVariant *parameters, GVariant **reply_body) if (ret != NOTIFICATION_ERROR_NONE) return ret; - ret = notification_get_uid(noti, ¬i_uid); - if (ret != NOTIFICATION_ERROR_NONE) - return ret; - - busname = __find_busname_by_priv_id(priv_id, noti_uid); - if (busname == NULL) + info = __find_sender_info_by_priv_id(priv_id); + if (info == NULL || info->busname == NULL) return NOTIFICATION_ERROR_INVALID_PARAMETER; - ret = send_event_notify_by_busname(parameters, "send_event", busname, PROVIDER_NOTI_EVENT_INTERFACE_NAME); + if (!info->watcher_id) { + if (!is_existed_busname(info->busname)) { + __event_list = g_list_remove(g_list_first(__event_list), info); + __free_event_info(info); + return NOTIFICATION_ERROR_IO_ERROR; + } else { + info->watcher_id = __insert_sender_watcher_id(info); + } + } + + ret = send_event_notify_by_busname(parameters, "send_event", info->busname, PROVIDER_NOTI_EVENT_INTERFACE_NAME); notification_free(noti); - free(busname); + } else { ret = NOTIFICATION_ERROR_OUT_OF_MEMORY; } @@ -1811,9 +1870,68 @@ int notification_send_noti_event(GVariant *parameters, GVariant **reply_body) ErrPrint("cannot make reply body"); return NOTIFICATION_ERROR_OUT_OF_MEMORY; } + + DbgPrint("notification_send_noti_event done !! %d", ret); + return ret; } +int notification_check_event_receiver(GVariant *parameters, GVariant **reply_body) +{ + int priv_id; + bool available = false; + GList *find_list = NULL; + event_sender_info_s *info = NULL; + + g_variant_get(parameters, "(i)", &priv_id); + DbgPrint("check event sender - priv_id : %d", priv_id); + + __event_list = g_list_first(__event_list); + find_list = g_list_find_custom(__event_list, GUINT_TO_POINTER(priv_id), + (GCompareFunc)__priv_id_compare); + if (find_list) { + info = g_list_nth_data(find_list, 0); + if (!info->watcher_id) { + if (!is_existed_busname(info->busname)) { + __event_list = g_list_remove(g_list_first(__event_list), info); + __free_event_info(info); + } else { + available = true; + info->watcher_id = __insert_sender_watcher_id(info); + } + } else { + available = true; + } + } + + *reply_body = g_variant_new("(i)", (int)available); + if (*reply_body == NULL) { + ErrPrint("cannot make gvariant to noti"); + return NOTIFICATION_ERROR_OUT_OF_MEMORY; + } + + DbgPrint("notification check event receiver - available[%d]", available); + return NOTIFICATION_ERROR_NONE; +} + +int notification_reset_event_receiver(GVariant *parameters, GVariant **reply_body, const char *sender) +{ + int priv_id; + + g_variant_get(parameters, "(i)", &priv_id); + DbgPrint("reset event sender - priv_id : %d", priv_id); + + __add_sender_info(priv_id, sender); + + *reply_body = g_variant_new("()"); + if (*reply_body == NULL) { + ErrPrint("cannot make gvariant to noti"); + return NOTIFICATION_ERROR_OUT_OF_MEMORY; + } + + return NOTIFICATION_ERROR_NONE; +} + HAPI int notification_delete_noti_by_appid(const char *appid, uid_t uid) { GVariant *deleted_noti_list; @@ -1847,7 +1965,7 @@ HAPI int notification_delete_noti_by_appid(const char *appid, uid_t uid) } for (i = 0; i < num_deleted; i++) { - ret = __delete_sender_info(*(list_deleted + i), uid); + ret = __delete_sender_info(*(list_deleted + i)); if (ret != NOTIFICATION_ERROR_NONE) return ret; } diff --git a/src/service_common.c b/src/service_common.c index 79a15e9..8535d21 100755 --- a/src/service_common.c +++ b/src/service_common.c @@ -141,7 +141,7 @@ out: return pid; } -static bool _is_existed_busname(const char *sender_name) +bool is_existed_busname(const char *sender_name) { GDBusMessage *msg = NULL; GDBusMessage *reply = NULL; @@ -216,7 +216,7 @@ int send_notify(GVariant *body, char *cmd, GHashTable **monitoring_hash, char *i err->message); g_error_free(err); } - is_existed = _is_existed_busname(target_bus_name); + is_existed = is_existed_busname(target_bus_name); if (is_existed == false) delete_monitoring_list(monitoring_hash, target_bus_name, uid); ErrPrint("failed to emit signal: %s", target_bus_name); -- 2.7.4 From bebbd41e8d8fabfc21e69bded631f705203a9822 Mon Sep 17 00:00:00 2001 From: "seungha.son" Date: Wed, 11 Jan 2017 16:11:25 +0900 Subject: [PATCH 02/16] Changes type conversion macro - Match declared data type and conversion macros. - variable 'priv_id' is declared to int. Signed-off-by: seungha.son Change-Id: I3faa84df37cea94a6bfa3573eec975c1fb2c5b6b --- src/notification_service.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/notification_service.c b/src/notification_service.c index dec37e3..1a2228b 100755 --- a/src/notification_service.c +++ b/src/notification_service.c @@ -377,7 +377,7 @@ static gint __priv_id_compare(gconstpointer a, gconstpointer b) info = (event_sender_info_s *)a; - if (info->priv_id == GPOINTER_TO_UINT(b)) + if (info->priv_id == GPOINTER_TO_INT(b)) return 0; return 1; @@ -505,7 +505,7 @@ static void __sender_name_vanished_cb(GDBusConnection *connection, DbgPrint("sender name vanished name : %s, priv_id : %d, watcher_id : %d", name, info->priv_id, info->watcher_id); - delete_list = g_list_find_custom(__event_list, GUINT_TO_POINTER(info->priv_id), + delete_list = g_list_find_custom(__event_list, GINT_TO_POINTER(info->priv_id), (GCompareFunc)__priv_id_compare); if (delete_list) { __event_list = g_list_remove(__event_list, info); @@ -556,7 +556,7 @@ static void __add_sender_info(int priv_id, const char *busname) __event_list = g_list_append(__event_list, sender_info); } else { __event_list = g_list_first(__event_list); - find_list = g_list_find_custom(__event_list, GUINT_TO_POINTER(priv_id), + find_list = g_list_find_custom(__event_list, GINT_TO_POINTER(priv_id), (GCompareFunc)__priv_id_compare); if (find_list == NULL) { sender_info->watcher_id = __insert_sender_watcher_id(sender_info); @@ -1022,7 +1022,7 @@ static int __delete_sender_info(int priv_id) if (__event_list != NULL) { __event_list = g_list_first(__event_list); - delete_list = g_list_find_custom(__event_list, GUINT_TO_POINTER(priv_id), + delete_list = g_list_find_custom(__event_list, GINT_TO_POINTER(priv_id), (GCompareFunc)__priv_id_compare); if (delete_list != NULL) { info = (event_sender_info_s *)g_list_nth_data(delete_list, 0); @@ -1804,7 +1804,7 @@ static event_sender_info_s *__find_sender_info_by_priv_id(int priv_id) return NULL; __event_list = g_list_first(__event_list); - find_list = g_list_find_custom(__event_list, GUINT_TO_POINTER(priv_id), + find_list = g_list_find_custom(__event_list, GINT_TO_POINTER(priv_id), (GCompareFunc)__priv_id_compare); if (find_list) @@ -1887,7 +1887,7 @@ int notification_check_event_receiver(GVariant *parameters, GVariant **reply_bod DbgPrint("check event sender - priv_id : %d", priv_id); __event_list = g_list_first(__event_list); - find_list = g_list_find_custom(__event_list, GUINT_TO_POINTER(priv_id), + find_list = g_list_find_custom(__event_list, GINT_TO_POINTER(priv_id), (GCompareFunc)__priv_id_compare); if (find_list) { info = g_list_nth_data(find_list, 0); -- 2.7.4 From 66ea2612e049b1b8ec54ae58a7f7203801ea40c7 Mon Sep 17 00:00:00 2001 From: MyungJoo Ham Date: Wed, 2 Nov 2016 16:36:54 +0900 Subject: [PATCH 03/16] Code Clean: spec files has unnedded code. Before committing a large spec update for Tizen 4.0 Configurability, here goes a minor code-clean commit. Change-Id: I76dfd886d8c0011eee35ff464f1e4ea0fbb99697 Signed-off-by: MyungJoo Ham --- packaging/data-provider-master.spec | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packaging/data-provider-master.spec b/packaging/data-provider-master.spec index 56276be..df0a0e2 100755 --- a/packaging/data-provider-master.spec +++ b/packaging/data-provider-master.spec @@ -68,8 +68,7 @@ mkdir -p %{buildroot}%{_prefix}/lib/systemd/system/multi-user.target.wants install -m 0644 %SOURCE1 %{buildroot}%{_unitdir}/data-provider-master.service ln -sf ../%{name}.service %{buildroot}%{_prefix}/lib/systemd/system/multi-user.target.wants/%{name}.service -%post -%files -n %{name} +%files %manifest %{name}.manifest %defattr(-,root,root,-) -- 2.7.4 From ad352de6cf842eb66ae83bf0b794b0fafde81ed6 Mon Sep 17 00:00:00 2001 From: "seungha.son" Date: Fri, 13 Jan 2017 14:48:28 +0900 Subject: [PATCH 04/16] Fix notification dnd alarm setting - If end time is earlier than start time notification_register_system_setting_dnd_changed_cb() function should call callback, and dnd must be disabled automatically. - This patch include that if end time is earlier than start, day of end day set next-day. Signed-off-by: seungha.son Change-Id: I75724a46376847d28c4c0571406d582dac3d13a2 --- src/notification_service.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/notification_service.c b/src/notification_service.c index 1a2228b..2ba3b65 100755 --- a/src/notification_service.c +++ b/src/notification_service.c @@ -1427,6 +1427,14 @@ static int _add_alarm(int dnd_schedule_day, int dnd_start_hour, int dnd_start_mi return ret; } + if (dnd_end_hour < dnd_start_hour || + (dnd_end_hour == dnd_start_hour && dnd_end_min <= dnd_start_min)) { + dnd_schedule_day = (dnd_schedule_day << 1); + if (dnd_schedule_day & DND_SCHEDULE_WEEK_FLAG_MAX) + dnd_schedule_day = (dnd_schedule_day & DND_SCHEDULE_WEEK_FLAG_ALL) + | DND_SCHEDULE_WEEK_FLAG_SUNDAY; + } + ret = _noti_system_setting_set_alarm(dnd_schedule_day, dnd_end_hour, dnd_end_min, _dnd_schedule_alarm_cb, -- 2.7.4 From fb8e009f1b32034a4778c878a6beebc95191db87 Mon Sep 17 00:00:00 2001 From: "seungha.son" Date: Tue, 17 Jan 2017 19:31:18 +0900 Subject: [PATCH 05/16] Remove profile-specific dependency code - Include shortcut package in wearable profile. - We plan to remove profile dependencies using plug-in next. Signed-off-by: seungha.son Change-Id: I6e8b6ed18c36fa9db50260a5980b79838fba2ddc --- CMakeLists.txt | 100 ++++++++++++------------------------ include/service_common.h | 4 +- packaging/data-provider-master.spec | 2 - src/main.c | 12 ++--- src/service_common.c | 2 - 5 files changed, 38 insertions(+), 82 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 600f0ca..946d2da 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,52 +6,28 @@ SET(EXEC_PREFIX "\${prefix}") SET(LIBDIR ${LIB_INSTALL_DIR}) SET(INCLUDEDIR "\${prefix}/include") -IF (WEARABLE) - INCLUDE(FindPkgConfig) - pkg_check_modules(pkg REQUIRED - dlog - aul - vconf - sqlite3 - db-util - glib-2.0 - gio-2.0 - bundle - ecore - eina - pkgmgr - notification - badge - libsmack - pkgmgr-info - libsystemd-daemon - capi-appfw-app-manager - alarm-service - ) -ELSE (WEARABLE) - INCLUDE(FindPkgConfig) - pkg_check_modules(pkg REQUIRED - dlog - aul - vconf - sqlite3 - db-util - glib-2.0 - gio-2.0 - bundle - ecore - eina - pkgmgr - notification - badge - shortcut - libsmack - pkgmgr-info - libsystemd-daemon - capi-appfw-app-manager - alarm-service - ) -ENDIF (WEARABLE) +INCLUDE(FindPkgConfig) +pkg_check_modules(pkg REQUIRED + dlog + aul + vconf + sqlite3 + db-util + glib-2.0 + gio-2.0 + bundle + ecore + eina + pkgmgr + notification + badge + libsmack + shortcut + pkgmgr-info + libsystemd-daemon + capi-appfw-app-manager + alarm-service +) SET(PACKAGE "${PROJECT_NAME}") SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Winline -Werror -fno-builtin-malloc -fno-omit-frame-pointer -g -fPIE") @@ -82,28 +58,16 @@ ELSEIF (WEARABLE) ADD_DEFINITIONS("-DWEARABLE") ENDIF (MOBILE) -IF (WEARABLE) - SET(BUILD_SOURCE - src/main.c - src/util.c - src/pkgmgr.c - src/badge_service.c - src/notification_service.c - src/service_common.c - src/critical_log.c - ) -ELSE (WEARABLE) - SET(BUILD_SOURCE - src/main.c - src/util.c - src/pkgmgr.c - src/badge_service.c - src/notification_service.c - src/service_common.c - src/shortcut_service.c - src/critical_log.c - ) -ENDIF (WEARABLE) +SET(BUILD_SOURCE + src/main.c + src/util.c + src/pkgmgr.c + src/shortcut_service.c + src/badge_service.c + src/notification_service.c + src/service_common.c + src/critical_log.c +) STRING(REPLACE "-L-l" "-l" pkg_fixed_LDFLAGS ${pkg_LDFLAGS}) STRING(REPLACE "-l" " -l" pkg_LDFLAGS ${pkg_fixed_LDFLAGS}) diff --git a/include/service_common.h b/include/service_common.h index 629b67b..b24a1a6 100755 --- a/include/service_common.h +++ b/include/service_common.h @@ -17,10 +17,8 @@ #include #include #include -#include -#ifndef WEARABLE #include -#endif +#include #define NORMAL_UID_BASE 5000 diff --git a/packaging/data-provider-master.spec b/packaging/data-provider-master.spec index df0a0e2..21f59fe 100755 --- a/packaging/data-provider-master.spec +++ b/packaging/data-provider-master.spec @@ -27,9 +27,7 @@ BuildRequires: pkgconfig(pkgmgr) BuildRequires: pkgconfig(pkgmgr-info) BuildRequires: pkgconfig(notification) BuildRequires: pkgconfig(badge) -%if "%{profile}" != "wearable" BuildRequires: pkgconfig(shortcut) -%endif BuildRequires: pkgconfig(libsystemd-daemon) BuildRequires: pkgconfig(alarm-service) diff --git a/src/main.c b/src/main.c index 4abec56..7329b74 100755 --- a/src/main.c +++ b/src/main.c @@ -36,11 +36,9 @@ #include "util.h" #include "critical_log.h" #include "service_common.h" +#include "shortcut_service.h" #include "notification_service.h" #include "badge_service.h" -#ifndef WEARABLE -#include "shortcut_service.h" -#endif static void lang_key_changed_cb(keynode_t *node EINA_UNUSED, void *first) { @@ -71,11 +69,11 @@ static inline int app_create(void) DbgPrint("VCONFKEY_LANGSET notify key chenaged: %d\n", ret); lang_key_changed_cb(NULL, NULL); -#ifndef WEARABLE + ret = shortcut_service_init(); if (ret < 0) DbgPrint("shortcut: %d\n", ret); -#endif + ret = notification_service_init(); if (ret < 0) DbgPrint("noti: %d\n", ret); @@ -100,11 +98,11 @@ static inline int app_terminate(void) ret = notification_service_fini(); if (ret < 0) DbgPrint("noti: %d\n", ret); -#ifndef WEARABLE + ret = shortcut_service_fini(); if (ret < 0) DbgPrint("shortcut: %d\n", ret); -#endif + DbgPrint("Terminated\n"); return 0; } diff --git a/src/service_common.c b/src/service_common.c index 8535d21..0fbb084 100755 --- a/src/service_common.c +++ b/src/service_common.c @@ -32,9 +32,7 @@ #include "service_common.h" #include "notification_service.h" #include "badge_service.h" -#ifndef WEARABLE #include "shortcut_service.h" -#endif #define PROVIDER_BUS_NAME "org.tizen.data_provider_service" #define PROVIDER_OBJECT_PATH "/org/tizen/data_provider_service" -- 2.7.4 From e09d1319147b6365653f8290d84eb99aacf0ccfa Mon Sep 17 00:00:00 2001 From: "seungha.son" Date: Wed, 18 Jan 2017 14:50:53 +0900 Subject: [PATCH 06/16] Fix versioning Signed-off-by: seungha.son Change-Id: Iec19155cec4cdab11a84c1b619232b33e8ee3dd0 --- packaging/data-provider-master.spec | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/packaging/data-provider-master.spec b/packaging/data-provider-master.spec index 21f59fe..23ba711 100755 --- a/packaging/data-provider-master.spec +++ b/packaging/data-provider-master.spec @@ -40,6 +40,7 @@ Requires(post): dbus cp %{SOURCE1001} . %build +MAJORVER=`echo %{version} | awk 'BEGIN {FS="."}{print $1}'` %if "%{profile}" == "wearable" export MOBILE=Off export WEARABLE=On @@ -54,7 +55,13 @@ export TARGET=emulator export TARGET=device %endif -%cmake . -DNAME=%{name} -DMOBILE=${MOBILE} -DWEARABLE=${WEARABLE} -DTARGET=${TARGET} +%cmake . \ + -DNAME=%{name} \ + -DMOBILE=${MOBILE} \ + -DWEARABLE=${WEARABLE} \ + -DTARGET=${TARGET} \ + -DMAJORVER=${MAJORVER} \ + -DFULLVER=%{version} CFLAGS="${CFLAGS} -Wall -Winline -Werror" LDFLAGS="${LDFLAGS}" make %{?jobs:-j%jobs} -- 2.7.4 From c70cdc45ab2f3b0a8b35a0d1de7f412b70001b67 Mon Sep 17 00:00:00 2001 From: MyungJoo Ham Date: Wed, 18 Jan 2017 15:19:36 +0900 Subject: [PATCH 07/16] Remove unused macros/defines that breaks Tizen:Unified You are not using profile, MOBILE, WEARABLE in the code. Signed-off-by: MyungJoo Ham Change-Id: Ib07bde05ee010d9b44234c3d7a3e097750e8ef95 --- CMakeLists.txt | 6 ------ packaging/data-provider-master.spec | 9 --------- 2 files changed, 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 946d2da..a2e5130 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,12 +52,6 @@ ADD_DEFINITIONS("-DNDEBUG") ADD_DEFINITIONS("-D_USE_ECORE_TIME_GET") -IF (MOBILE) - ADD_DEFINITIONS("-DMOBILE") -ELSEIF (WEARABLE) - ADD_DEFINITIONS("-DWEARABLE") -ENDIF (MOBILE) - SET(BUILD_SOURCE src/main.c src/util.c diff --git a/packaging/data-provider-master.spec b/packaging/data-provider-master.spec index 23ba711..4da18d1 100755 --- a/packaging/data-provider-master.spec +++ b/packaging/data-provider-master.spec @@ -41,13 +41,6 @@ cp %{SOURCE1001} . %build MAJORVER=`echo %{version} | awk 'BEGIN {FS="."}{print $1}'` -%if "%{profile}" == "wearable" -export MOBILE=Off -export WEARABLE=On -%else -export MOBILE=On -export WEARABLE=Off -%endif %ifarch %ix86 export TARGET=emulator @@ -57,8 +50,6 @@ export TARGET=device %cmake . \ -DNAME=%{name} \ - -DMOBILE=${MOBILE} \ - -DWEARABLE=${WEARABLE} \ -DTARGET=${TARGET} \ -DMAJORVER=${MAJORVER} \ -DFULLVER=%{version} -- 2.7.4 From 061b30bdcb71e4dbe23cd5aa4039a04703964eb4 Mon Sep 17 00:00:00 2001 From: "seungha.son" Date: Thu, 19 Jan 2017 16:18:18 +0900 Subject: [PATCH 08/16] Release version 1.4.0 - Support function for notification, badge, shortcut - Fix some bug Signed-off-by: seungha.son Change-Id: I4c2fba7ed0ac180a9b9612be7f32326c94bf2c00 --- packaging/data-provider-master.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/data-provider-master.spec b/packaging/data-provider-master.spec index 4da18d1..a22d077 100755 --- a/packaging/data-provider-master.spec +++ b/packaging/data-provider-master.spec @@ -2,7 +2,7 @@ Name: data-provider-master Summary: Master service provider for badge, shortcut, notification -Version: 1.3.0 +Version: 1.4.0 Release: 1 Group: Applications/Core Applications License: Apache-2.0 -- 2.7.4 From f34dfd8cbdef8a5933ceacdb7ed0b51f642ea872 Mon Sep 17 00:00:00 2001 From: "seungha.son" Date: Fri, 10 Feb 2017 12:26:04 +0900 Subject: [PATCH 09/16] Fix wrong behavior about return value of shortcut request - Currently, It is a structure in which the caller can not get a proper return value when there is a request such as shortcut add or remove. - The handling for gdbus invocation has been modified so that caller can get proper return value. - related patch : https://review.tizen.org/gerrit/#/c/114090/ Signed-off-by: seungha.son Change-Id: I24a94d5d0d137e738ecc0fd332f2c2fa5f8e0fbf --- include/shortcut_service.h | 7 +- src/shortcut_service.c | 164 +++++++++++++++++++++++++++++++++------------ 2 files changed, 126 insertions(+), 45 deletions(-) diff --git a/include/shortcut_service.h b/include/shortcut_service.h index c42295e..35cb758 100755 --- a/include/shortcut_service.h +++ b/include/shortcut_service.h @@ -19,10 +19,11 @@ extern int shortcut_service_init(void); extern int shortcut_service_fini(void); -int shortcut_add(GVariant *parameters, GVariant **reply_body, uid_t uid); -int shortcut_add_widget(GVariant *parameters, GVariant **reply_body, uid_t uid); -int shortcut_remove(GVariant *parameters, GVariant **reply_body, uid_t uid); +void shortcut_add(GVariant *parameters, GDBusMethodInvocation *invocation, uid_t uid); +void shortcut_add_widget(GVariant *parameters, GDBusMethodInvocation *invocation, uid_t uid); +void shortcut_remove(GVariant *parameters, GDBusMethodInvocation *invocation, uid_t uid); int shortcut_register_dbus_interface(); int shortcut_get_shortcut_service_list(GVariant *parameters, GVariant **reply_body, uid_t uid); int shortcut_check_privilege(void); +int shortcut_send_return_value(GVariant *parameters, GVariant **reply_body); /* End of a file */ diff --git a/src/shortcut_service.c b/src/shortcut_service.c index 9410008..7a4e8b9 100755 --- a/src/shortcut_service.c +++ b/src/shortcut_service.c @@ -22,7 +22,11 @@ #include "debug.h" #define PROVIDER_SHORTCUT_INTERFACE_NAME "org.tizen.data_provider_shortcut_service" + +#define SHORTCUT_INVOCATION_KEY_POS 0 + static GHashTable *_monitoring_hash = NULL; +static GHashTable *_invocation_hash; static void _on_name_appeared(GDBusConnection *connection, const gchar *name, @@ -61,19 +65,25 @@ static void _shortcut_dbus_method_call_handler(GDBusConnection *conn, int ret = SHORTCUT_ERROR_NOT_SUPPORTED; uid_t uid = get_sender_uid(sender); - if (g_strcmp0(method_name, "shortcut_service_register") == 0) + if (g_strcmp0(method_name, "shortcut_service_register") == 0) { ret = service_register(parameters, &reply_body, sender, _on_name_appeared, _on_name_vanished, &_monitoring_hash, uid); - else if (g_strcmp0(method_name, "add_shortcut") == 0) - ret = shortcut_add(parameters, &reply_body, uid); - else if (g_strcmp0(method_name, "add_shortcut_widget") == 0) - ret = shortcut_add_widget(parameters, &reply_body, uid); - else if (g_strcmp0(method_name, "remove_shortcut") == 0) - ret = shortcut_remove(parameters, &reply_body, uid); - else if (g_strcmp0(method_name, "get_list") == 0) + } else if (g_strcmp0(method_name, "add_shortcut") == 0) { + shortcut_add(parameters, invocation, uid); + return; + } else if (g_strcmp0(method_name, "add_shortcut_widget") == 0) { + shortcut_add_widget(parameters, invocation, uid); + return; + } else if (g_strcmp0(method_name, "remove_shortcut") == 0) { + shortcut_remove(parameters, invocation, uid); + return; + } else if (g_strcmp0(method_name, "get_list") == 0) { ret = shortcut_get_shortcut_service_list(parameters, &reply_body, uid); - else if (g_strcmp0(method_name, "check_privilege") == 0) + } else if (g_strcmp0(method_name, "check_privilege") == 0) { ret = shortcut_check_privilege(); + } else if (g_strcmp0(method_name, "send_return_value") == 0) { + ret = shortcut_send_return_value(parameters, &reply_body); + } if (ret == SERVICE_COMMON_ERROR_NONE) { DbgPrint("shortcut service success : %d", ret); @@ -111,6 +121,7 @@ int shortcut_register_dbus_interface() " " " " + " " " " " " " " @@ -118,9 +129,11 @@ int shortcut_register_dbus_interface() " " " " " " + " " " " " " + " " " " " " " " @@ -129,16 +142,24 @@ int shortcut_register_dbus_interface() " " " " " " + " " " " " " + " " " " " " " " + " " " " " " " " + + " " + " " + " " + " " " " " "; @@ -208,64 +229,92 @@ int shortcut_get_shortcut_service_list(GVariant *parameters, GVariant **reply_bo return SERVICE_COMMON_ERROR_NONE; } +static GDBusMethodInvocation *_get_invocation(char *request_id) +{ + GDBusMethodInvocation *find_invocation; + + find_invocation = (GDBusMethodInvocation *)g_hash_table_lookup(_invocation_hash, request_id); + if (!find_invocation) + return NULL; + + return find_invocation; +} + +static void _add_invocation(GDBusMethodInvocation *invocation, char *request_id) +{ + GDBusMethodInvocation *find_invocation; + + if (request_id == NULL) + return; + + find_invocation = _get_invocation(request_id); + if (find_invocation) + return; + + g_hash_table_insert(_invocation_hash, strdup(request_id), invocation); + + DbgPrint("add invocation is done, key [%s]", request_id); +} + +static void _remove_invocation(char *request_id) +{ + if (request_id == NULL) + return; + + g_hash_table_remove(_invocation_hash, request_id); + + DbgPrint("remove invocation is done, key [%s]", request_id); +} + /* add_shortcut */ -int shortcut_add(GVariant *parameters, GVariant **reply_body, uid_t uid) +void shortcut_add(GVariant *parameters, GDBusMethodInvocation *invocation, uid_t uid) { int ret = SERVICE_COMMON_ERROR_NONE; + char *request_id = NULL; + + g_variant_get_child(parameters, SHORTCUT_INVOCATION_KEY_POS, "&s", &request_id); + + _add_invocation(invocation, request_id); ret = send_notify(parameters, "add_shortcut_notify", &_monitoring_hash, PROVIDER_SHORTCUT_INTERFACE_NAME, uid); - if (ret != SERVICE_COMMON_ERROR_NONE) { + if (ret != SERVICE_COMMON_ERROR_NONE) ErrPrint("failed to send notify:%d\n", ret); - return ret; - } - - *reply_body = g_variant_new("()"); - if (*reply_body == NULL) { - ErrPrint("Cannot make reply body"); - return SHORTCUT_ERROR_OUT_OF_MEMORY; - } - return ret; + DbgPrint("shortcut_add is done"); } /* add_shortcut_widget */ -int shortcut_add_widget(GVariant *parameters, GVariant **reply_body, uid_t uid) +void shortcut_add_widget(GVariant *parameters, GDBusMethodInvocation *invocation, uid_t uid) { int ret = SERVICE_COMMON_ERROR_NONE; + char *request_id = NULL; + + g_variant_get_child(parameters, SHORTCUT_INVOCATION_KEY_POS, "&s", &request_id); + + _add_invocation(invocation, request_id); ret = send_notify(parameters, "add_shortcut_widget_notify", &_monitoring_hash, PROVIDER_SHORTCUT_INTERFACE_NAME, uid); - if (ret != SERVICE_COMMON_ERROR_NONE) { + if (ret != SERVICE_COMMON_ERROR_NONE) ErrPrint("failed to send notify:%d\n", ret); - return ret; - } - - *reply_body = g_variant_new("()"); - if (*reply_body == NULL) { - ErrPrint("Cannot make reply body"); - return SHORTCUT_ERROR_OUT_OF_MEMORY; - } - return ret; + DbgPrint("shortcut_add_widget is done"); } /* remove_shortcut */ -int shortcut_remove(GVariant *parameters, GVariant **reply_body, uid_t uid) +void shortcut_remove(GVariant *parameters, GDBusMethodInvocation *invocation, uid_t uid) { int ret = SERVICE_COMMON_ERROR_NONE; + char *request_id = NULL; + + g_variant_get_child(parameters, SHORTCUT_INVOCATION_KEY_POS, "&s", &request_id); + + _add_invocation(invocation, request_id); ret = send_notify(parameters, "remove_shortcut_notify", &_monitoring_hash, PROVIDER_SHORTCUT_INTERFACE_NAME, uid); - if (ret != SERVICE_COMMON_ERROR_NONE) { + if (ret != SERVICE_COMMON_ERROR_NONE) ErrPrint("failed to send notify:%d\n", ret); - return ret; - } - *reply_body = g_variant_new("()"); - if (*reply_body == NULL) { - ErrPrint("Cannot make reply body"); - return SHORTCUT_ERROR_OUT_OF_MEMORY; - } - - return ret; + DbgPrint("shortcut_remove is done"); } /* check shortcut privilege */ @@ -274,6 +323,34 @@ int shortcut_check_privilege(void) return SERVICE_COMMON_ERROR_NONE; } +int shortcut_send_return_value(GVariant *parameters, GVariant **reply_body) +{ + int return_value; + char *request_id = NULL; + GDBusMethodInvocation *invocation = NULL; + + g_variant_get(parameters, "(i&s)", &return_value, &request_id); + + if (request_id == NULL) + return SHORTCUT_ERROR_INVALID_PARAMETER; + + invocation = _get_invocation(request_id); + if (!invocation) + return SHORTCUT_ERROR_INVALID_PARAMETER; + + g_dbus_method_invocation_return_value(invocation, g_variant_new("(i)", return_value)); + _remove_invocation(request_id); + + *reply_body = g_variant_new("()"); + if (*reply_body == NULL) { + ErrPrint("Cannot make reply body"); + return SHORTCUT_ERROR_OUT_OF_MEMORY; + } + + DbgPrint("shortcut_send_return_value success"); + return SHORTCUT_ERROR_NONE; +} + /*! * MAIN THREAD * Do not try to do anyother operation in these functions @@ -283,6 +360,7 @@ HAPI int shortcut_service_init(void) DbgPrint("Successfully initiated\n"); int result; _monitoring_hash = g_hash_table_new(g_direct_hash, g_direct_equal); + _invocation_hash = g_hash_table_new_full(g_str_hash, g_str_equal, free, NULL); result = shortcut_register_dbus_interface(); if (result != SERVICE_COMMON_ERROR_NONE) ErrPrint("shortcut register dbus fail %d", result); @@ -291,6 +369,8 @@ HAPI int shortcut_service_init(void) HAPI int shortcut_service_fini(void) { + g_hash_table_destroy(_invocation_hash); + DbgPrint("Successfully Finalized\n"); return SERVICE_COMMON_ERROR_NONE; } -- 2.7.4 From 8416c75ed68d3e41be1adadcffed57481ed7f7d3 Mon Sep 17 00:00:00 2001 From: "seungha.son" Date: Mon, 13 Feb 2017 09:46:14 +0900 Subject: [PATCH 10/16] Release version 1.4.1 - Fix wrong behavior about return value of shortcut request Signed-off-by: seungha.son Change-Id: If6fb9fa2ab35f3534b3bc01cdf8fbb6ac2c3a756 --- packaging/data-provider-master.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/data-provider-master.spec b/packaging/data-provider-master.spec index a22d077..4bad6e7 100755 --- a/packaging/data-provider-master.spec +++ b/packaging/data-provider-master.spec @@ -2,7 +2,7 @@ Name: data-provider-master Summary: Master service provider for badge, shortcut, notification -Version: 1.4.0 +Version: 1.4.1 Release: 1 Group: Applications/Core Applications License: Apache-2.0 -- 2.7.4 From 68d8705f69ab2d11081d4934bc74ef373a878514 Mon Sep 17 00:00:00 2001 From: "seungha.son" Date: Mon, 20 Feb 2017 16:49:09 +0900 Subject: [PATCH 11/16] Fix Restart option - Use "on-failure" option instead of "always" option Signed-off-by: seungha.son Change-Id: Ib9ae098eb47e07e8276a16dcbfa06356a170e460 --- packaging/data-provider-master.service | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/data-provider-master.service b/packaging/data-provider-master.service index 95e3d3f..22cef7e 100644 --- a/packaging/data-provider-master.service +++ b/packaging/data-provider-master.service @@ -9,7 +9,7 @@ Type=dbus SmackProcessLabel=System ExecStart=/usr/bin/data-provider-master TimeoutStopSec=3s -Restart=always +Restart=on-failure RestartSec=0 [Install] -- 2.7.4 From 2831bb9c32f7305d68c93aa09ee446692cb86b52 Mon Sep 17 00:00:00 2001 From: "seungha.son" Date: Wed, 22 Feb 2017 09:24:02 +0900 Subject: [PATCH 12/16] Release version 1.4.2 - Fix restart option Signed-off-by: seungha.son Change-Id: I67455c21e65594216a91fbf9b822c432d4257a86 --- packaging/data-provider-master.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/data-provider-master.spec b/packaging/data-provider-master.spec index 4bad6e7..32cacd9 100755 --- a/packaging/data-provider-master.spec +++ b/packaging/data-provider-master.spec @@ -2,7 +2,7 @@ Name: data-provider-master Summary: Master service provider for badge, shortcut, notification -Version: 1.4.1 +Version: 1.4.2 Release: 1 Group: Applications/Core Applications License: Apache-2.0 -- 2.7.4 From 8afe928683aec475199d6b335eab54c9e5400c38 Mon Sep 17 00:00:00 2001 From: Myungki Lee Date: Wed, 22 Feb 2017 20:34:57 +0900 Subject: [PATCH 13/16] Change the template limit comparison syntax - up to 11 are stored. Change-Id: I0696e0a3ed42ee65c063dd38b357f86b911660de Signed-off-by: Myungki Lee --- src/notification_service.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/notification_service.c b/src/notification_service.c index 2ba3b65..66cc2dd 100755 --- a/src/notification_service.c +++ b/src/notification_service.c @@ -1605,7 +1605,7 @@ int notification_add_noti_template(GVariant *parameters, GVariant **reply_body, } ret = notification_noti_check_count_for_template(noti, &count); - if (count > NOTI_TEMPLATE_LIMIT) + if (count >= NOTI_TEMPLATE_LIMIT) return NOTIFICATION_ERROR_MAX_EXCEEDED; ret = notification_noti_add_template(noti, template_name); -- 2.7.4 From fab9ea2d73546a39c2fe94360fbc5b1e6fe6b593 Mon Sep 17 00:00:00 2001 From: Myungki Lee Date: Thu, 23 Feb 2017 14:19:56 +0900 Subject: [PATCH 14/16] Release version 1.4.3 - Fix a bug about number of storable template Change-Id: I4ad3aa0844962901c4c0d5c96ac9460b18bfdc2c Signed-off-by: Myungki Lee --- packaging/data-provider-master.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/data-provider-master.spec b/packaging/data-provider-master.spec index 32cacd9..f32c267 100755 --- a/packaging/data-provider-master.spec +++ b/packaging/data-provider-master.spec @@ -2,7 +2,7 @@ Name: data-provider-master Summary: Master service provider for badge, shortcut, notification -Version: 1.4.2 +Version: 1.4.3 Release: 1 Group: Applications/Core Applications License: Apache-2.0 -- 2.7.4 From 2f25a244fe04fc256c23e8413fb1444a1cafcfea Mon Sep 17 00:00:00 2001 From: Myungki Lee Date: Mon, 6 Mar 2017 20:22:17 +0900 Subject: [PATCH 15/16] Fix timeout issue when noti add, update - In case of error, 0 is returned and timeout occurs without reply_body. Change-Id: I5fae426d6ac693feb0928c3df01b905c3ed5b4a4 Signed-off-by: Myungki Lee --- src/notification_service.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/notification_service.c b/src/notification_service.c index 66cc2dd..8b64146 100755 --- a/src/notification_service.c +++ b/src/notification_service.c @@ -598,7 +598,7 @@ int notification_add_noti(GVariant *parameters, GVariant **reply_body, const cha ret = _validate_and_set_noti_with_uid(uid, noti, ¬i_uid); if (ret != NOTIFICATION_ERROR_NONE) - return ret; + goto out; ret = notification_noti_check_tag(noti); if (ret == NOTIFICATION_ERROR_NOT_EXIST_ID) @@ -606,22 +606,27 @@ int notification_add_noti(GVariant *parameters, GVariant **reply_body, const cha else if (ret == NOTIFICATION_ERROR_ALREADY_EXIST_ID) ret = _update_noti(reply_body, noti, noti_uid); + if (ret != NOTIFICATION_ERROR_NONE) + goto out; + ret = notification_get_event_flag(noti, &event_flag); if (ret != NOTIFICATION_ERROR_NONE) - return ret; + goto out; if (event_flag == true) { ret = notification_get_id(noti, NULL, &priv_id); if (ret != NOTIFICATION_ERROR_NONE) - return ret; + goto out; __add_sender_info(priv_id, sender); } - notification_free(noti); } else { ret = NOTIFICATION_ERROR_OUT_OF_MEMORY; } +out: + notification_free(noti); + DbgPrint("notification_add_noti ret : %d", ret); return ret; } @@ -679,15 +684,16 @@ int notification_update_noti(GVariant *parameters, GVariant **reply_body, uid_t ret = _validate_and_set_noti_with_uid(uid, noti, ¬i_uid); if (ret != NOTIFICATION_ERROR_NONE) - return ret; + goto out; - if (ret == NOTIFICATION_ERROR_NONE) - ret = _update_noti(reply_body, noti, noti_uid); + ret = _update_noti(reply_body, noti, noti_uid); - notification_free(noti); } else { ret = NOTIFICATION_ERROR_OUT_OF_MEMORY; } + +out: + notification_free(noti); return ret; } -- 2.7.4 From 399520aedd4fa12141544a0ae19467233809dd96 Mon Sep 17 00:00:00 2001 From: Myungki Lee Date: Mon, 6 Mar 2017 21:48:34 +0900 Subject: [PATCH 16/16] Release version 1.4.4 - Fix timeout issue when noti add Change-Id: Ic9bc680f3f3856b07a3fab96e74f63a22a1dc8f0 Signed-off-by: Myungki Lee --- packaging/data-provider-master.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/data-provider-master.spec b/packaging/data-provider-master.spec index f32c267..0f8f453 100755 --- a/packaging/data-provider-master.spec +++ b/packaging/data-provider-master.spec @@ -2,7 +2,7 @@ Name: data-provider-master Summary: Master service provider for badge, shortcut, notification -Version: 1.4.3 +Version: 1.4.4 Release: 1 Group: Applications/Core Applications License: Apache-2.0 -- 2.7.4