Add to save restriction list 71/199471/1
authorhyunuktak <hyunuk.tak@samsung.com>
Tue, 12 Feb 2019 01:41:52 +0000 (10:41 +0900)
committerhyunuktak <hyunuk.tak@samsung.com>
Tue, 12 Feb 2019 01:41:55 +0000 (10:41 +0900)
Change-Id: I5894dc81fb9f8581701dd36c9eb62d232e304397
Signed-off-by: hyunuktak <hyunuk.tak@samsung.com>
include/stc_mgr_internal.h
src/include/stc-restriction.h
src/internal/include/stc-dbus.h
src/stc-manager.c
src/stc-restriction.c

index e3c8828..a16fdd9 100755 (executable)
@@ -490,6 +490,51 @@ 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
  * @privlevel platform
index 9cd32fe..34853de 100755 (executable)
@@ -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);
index 582c5d9..d30b2be 100755 (executable)
@@ -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"
 
index bd0ba2d..b193388 100755 (executable)
@@ -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;
 }
 
index 7f61788..83e74db 100755 (executable)
@@ -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)