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
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)
{
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)