From: hyunuktak Date: Tue, 12 Feb 2019 01:41:52 +0000 (+0900) Subject: Add to save restriction list X-Git-Tag: submit/tizen/20190311.084912~13 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5aa898a8bf513259ff671e9a8c172f4d88d1a4fe;p=platform%2Fcore%2Fapi%2Fsmart-traffic-control.git Add to save restriction list Change-Id: I5894dc81fb9f8581701dd36c9eb62d232e304397 Signed-off-by: hyunuktak --- diff --git a/include/stc_mgr_internal.h b/include/stc_mgr_internal.h index e3c8828..a16fdd9 100755 --- a/include/stc_mgr_internal.h +++ b/include/stc_mgr_internal.h @@ -489,6 +489,51 @@ int stc_add_restriction_rule_to_list(stc_restriction_list_h list_h, int stc_remove_restriction_rule_from_list(stc_restriction_list_h list_h, stc_restriction_rule_h rule_h); +/** + * @brief Saves the restriction rules from list. + * @since_tizen 5.5 + * @privlevel platform + * @privilege %http://tizen.org/privilege/network.get + * + * @param[in] list The restriction list handle + * + * @return 0 on success, otherwise a negative error value + * @retval #STC_ERROR_NONE Successful + * @retval #STC_ERROR_OPERATION_FAILED General error + * @retval #STC_ERROR_OUT_OF_MEMORY Out of memory + * @retval #STC_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #STC_ERROR_INVALID_OPERATION Invalid operation + * @retval #STC_ERROR_NOT_INITIALIZED Not initialized + * @retval #STC_ERROR_NOT_SUPPORTED Not supported + * @retval #STC_ERROR_PERMISSION_DENIED Permission denied + * + * @see #stc_restriction_list_h + * @see #stc_restriction_rule_h + * @see stc_initialize() + * @see stc_restriction_rule_create() + * @see stc_restriction_rule_destroy() + * @see stc_restriction_rule_set_app_id() + * @see stc_restriction_rule_set_iface_name() + * @see stc_restriction_rule_set_iface_type() + * @see stc_restriction_rule_set_limit() + * @see stc_restriction_rule_set_warning_limit() + * @see stc_restriction_rule_set_roaming_type() + * @see stc_restriction_rule_set_subscriber_id() + * @see stc_restriction_rule_get_app_id() + * @see stc_restriction_rule_get_iface_type() + * @see stc_restriction_rule_get_limit() + * @see stc_restriction_rule_get_warning_limit() + * @see stc_restriction_rule_get_roaming_type() + * @see stc_restriction_rule_get_subscriber_id() + * @see stc_restriction_rule_get_process_state() + * @see stc_restriction_list_create() + * @see stc_add_restriction_rule_to_list() + * @see stc_remove_restriction_rule_from_list() + * @see stc_set_restriction_list() + * @see stc_unset_restriction_list() + */ +int stc_save_restriction_list(stc_restriction_list_h list_h); + /** * @brief Sets the restriction list. * @since_tizen 5.5 diff --git a/src/include/stc-restriction.h b/src/include/stc-restriction.h index 9cd32fe..34853de 100755 --- a/src/include/stc-restriction.h +++ b/src/include/stc-restriction.h @@ -102,6 +102,8 @@ void _stc_restriction_add_list(stc_restriction_list_h list); void _stc_restriction_remove_list(stc_restriction_list_h list); bool _stc_restriction_check_list_validity(stc_restriction_list_h list); +stc_error_e _stc_restriction_save_list(stc_restriction_list_h list); + stc_error_e _stc_restriction_validate_rule( stc_restriction_rule_h rule); stc_error_e _stc_restriction_check_get_rule(stc_restriction_rule_h rule); diff --git a/src/internal/include/stc-dbus.h b/src/internal/include/stc-dbus.h index 582c5d9..d30b2be 100755 --- a/src/internal/include/stc-dbus.h +++ b/src/internal/include/stc-dbus.h @@ -73,6 +73,8 @@ extern "C" { #define STC_MANAGER_METHOD_RESTRICTION_GET_ALL "GetAll" #define STC_MANAGER_METHOD_RESTRICTION_UNSET "Unset" +#define STC_MANAGER_METHOD_RESTRICTION_SAVE_LIST "SaveList" + #define STC_MANAGER_METHOD_IPTABLES_COMMIT "CommitIptables" #define STC_MANAGER_METHOD_IP6TABLES_COMMIT "CommitIp6tables" diff --git a/src/stc-manager.c b/src/stc-manager.c index bd0ba2d..b193388 100755 --- a/src/stc-manager.c +++ b/src/stc-manager.c @@ -604,6 +604,29 @@ EXPORT_API int stc_remove_restriction_rule_from_list(stc_restriction_list_h list return ret; } + STC_LOGI("Removed restriction rule from list"); + + return STC_ERROR_NONE; +} + +EXPORT_API int stc_save_restriction_list(stc_restriction_list_h list_h) +{ + int ret = STC_ERROR_NONE; + + CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC); + + if (_stc_restriction_check_list_validity(list_h) == false) { + STC_LOGE("Invalid parameter"); + return STC_ERROR_INVALID_PARAMETER; + } + + ret = _stc_restriction_save_list(list_h); + if (ret != STC_ERROR_NONE) { + STC_LOGE("Failed to save restriction list [%s]", + _stc_convert_error_type_to_string(ret)); + return ret; + } + return STC_ERROR_NONE; } diff --git a/src/stc-restriction.c b/src/stc-restriction.c index 7f61788..83e74db 100755 --- a/src/stc-restriction.c +++ b/src/stc-restriction.c @@ -177,6 +177,77 @@ static void __stc_restriction_get_type_make_params( restriction_rule->app_id, restriction_rule->iface_type); } +static void __stc_restriction_load_list_make_params(gpointer data, + gpointer user_data) +{ + stc_restriction_rule_s *rule = (stc_restriction_rule_s *)data; + GVariantBuilder *builder = (GVariantBuilder *)user_data; + GVariantBuilder sub_builder; + + g_variant_builder_init(&sub_builder, G_VARIANT_TYPE("a{sv}")); + + g_variant_builder_add(&sub_builder, "{sv}", + STC_RESTRICTION_RULE_APP_ID, + g_variant_new_string(rule->app_id)); + + g_variant_builder_add(&sub_builder, "{sv}", + STC_RESTRICTION_RULE_IFNAME, + g_variant_new_string(rule->iface_name)); + + g_variant_builder_add(&sub_builder, "{sv}", + STC_RESTRICTION_RULE_IFTYPE, + g_variant_new_uint16(rule->iface_type)); + + g_variant_builder_add(&sub_builder, "{sv}", + STC_RESTRICTION_RULE_ROAMING, + g_variant_new_uint16(rule->roaming_type)); + + g_variant_builder_add(&sub_builder, "{sv}", + STC_RESTRICTION_RULE_SUBSCRIBER_ID, + g_variant_new_string(rule->subscriber_id)); + + g_variant_builder_add(&sub_builder, "{sv}", + STC_RESTRICTION_RULE_RSTN_TYPE, + g_variant_new_uint16(rule->rstn_type)); + + g_variant_builder_add(&sub_builder, "{sv}", + STC_RESTRICTION_RULE_DATA_LIMIT, + g_variant_new_int64(rule->data_limit)); + + g_variant_builder_add(&sub_builder, "{sv}", + STC_RESTRICTION_RULE_DATA_WARN_LIMIT, + g_variant_new_int64(rule->data_warn_limit)); + + g_variant_builder_add(&sub_builder, "{sv}", + STC_RESTRICTION_RULE_MONTHLY_LIMIT, + g_variant_new_int64(rule->monthly_limit)); + + g_variant_builder_add(&sub_builder, "{sv}", + STC_RESTRICTION_RULE_WEEKLY_LIMIT, + g_variant_new_int64(rule->weekly_limit)); + + g_variant_builder_add(&sub_builder, "{sv}", + STC_RESTRICTION_RULE_DAILY_LIMIT, + g_variant_new_int64(rule->daily_limit)); + + g_variant_builder_add(&sub_builder, "{sv}", + STC_RESTRICTION_RULE_MONTH_START_DATE, + g_variant_new_int32(rule->month_start_date)); + + g_variant_builder_add_value(builder, g_variant_builder_end(&sub_builder)); +} + +static void __stc_restriction_list_foreach(stc_restriction_list_h list_h, + GVariantBuilder *builder) +{ + GSList *find = g_slist_find(g_restriction_list, list_h); + + if (find) { + stc_restriction_list_s *list_data = (stc_restriction_list_s *)find->data; + g_slist_foreach(list_data->rules, __stc_restriction_load_list_make_params, builder); + } +} + static void __stc_restriction_extract_rule_cb(const char *key, GVariant *value, void *user_data) { @@ -533,6 +604,38 @@ bool _stc_restriction_check_list_validity(stc_restriction_list_h list) return false; } +stc_error_e _stc_restriction_save_list(stc_restriction_list_h list_h) +{ + GVariant *message = NULL; + GVariant *params = NULL; + GVariantBuilder *builder = NULL; + stc_error_e error = STC_ERROR_NONE; + int result = 0; + stc_restriction_list_s *list_data = (stc_restriction_list_s *)list_h; + + builder = g_variant_builder_new(G_VARIANT_TYPE("aa{sv}")); + __stc_restriction_list_foreach(list_h, builder); + params = g_variant_new("(saa{sv})", list_data->name, builder); + g_variant_builder_unref(builder); + + message = _stc_dbus_invoke_method( + STC_MANAGER_SERVICE, + STC_MANAGER_RESTRICTION_PATH, + STC_MANAGER_RESTRICTION_INTERFACE, + STC_MANAGER_METHOD_RESTRICTION_SAVE_LIST, + params, + &error); + + STC_RETURN_VAL_IF(message == NULL, + error, "Failed to invoke dbus method"); + + g_variant_get(message, "(i)", &result); + STC_LOGI("Successfully save restriction list [%d]", result); + g_variant_unref(message); + + return STC_ERROR_NONE; +} + stc_error_e _stc_restriction_validate_rule( stc_restriction_rule_h rule)