Add to create/destroy/add/remove functions for restriction rule 68/197568/1 accepted/tizen/unified/20190212.084101 submit/tizen/20190211.132033
authorhyunuktak <hyunuk.tak@samsung.com>
Mon, 14 Jan 2019 06:58:27 +0000 (15:58 +0900)
committerhyunuktak <hyunuk.tak@samsung.com>
Mon, 14 Jan 2019 06:59:54 +0000 (15:59 +0900)
stc_restriction_list_create
stc_restriction_list_destroy
stc_add_restriction_rule_to_list
stc_remove_restriction_rule_from_list

Change-Id: I7be4320defb42417a9a686eb21a8328c28902ee5
Signed-off-by: hyunuktak <hyunuk.tak@samsung.com>
include/stc_mgr_internal.h
include/stc_rstn_internal.h
packaging/capi-network-stc.spec
src/include/stc-restriction.h
src/internal/include/stc-util.h
src/internal/stc-private.c
src/stc-manager.c
src/stc-restriction.c

index b7056a2..59fc7a2 100755 (executable)
@@ -439,12 +439,12 @@ int stc_get_restriction_type(stc_h stc, stc_restriction_rule_h rule,
  * @see stc_restriction_list_create()
  * @see stc_get_restriction_from_list()
  * @see stc_foreach_restriction_list()
- * @see stc_remove_restriction_from_list()
+ * @see stc_remove_restriction_rule_from_list()
  * @see stc_set_restriction_list()
  * @see stc_unset_restriction_list()
  */
-int stc_add_restriction_to_list(stc_h stc, stc_restriction_list_h list,
-               stc_restriction_rule_h rule);
+int stc_add_restriction_rule_to_list(stc_h stc,
+               stc_restriction_list_h list, stc_restriction_rule_h rule);
 
 /**
  * @brief Removes the restriction from list.
@@ -488,12 +488,12 @@ int stc_add_restriction_to_list(stc_h stc, stc_restriction_list_h list,
  * @see stc_restriction_list_create()
  * @see stc_get_restriction_from_list()
  * @see stc_foreach_restriction_list()
- * @see stc_add_restriction_to_list()
+ * @see stc_add_restriction_rule_to_list()
  * @see stc_set_restriction_list()
  * @see stc_unset_restriction_list()
  */
-int stc_remove_restriction_from_list(stc_h stc, stc_restriction_list_h list,
-               stc_restriction_rule_h rule);
+int stc_remove_restriction_rule_from_list(stc_h stc,
+               stc_restriction_list_h list, stc_restriction_rule_h rule);
 
 /**
  * @brief Gets the restriction from list.
@@ -537,9 +537,9 @@ int stc_remove_restriction_from_list(stc_h stc, stc_restriction_list_h list,
  * @see stc_restriction_rule_get_subscriber_id()
  * @see stc_restriction_rule_get_process_state()
  * @see stc_restriction_list_create()
- * @see stc_add_restriction_to_list()
+ * @see stc_add_restriction_rule_to_list()
  * @see stc_foreach_restriction_list()
- * @see stc_remove_restriction_from_list()
+ * @see stc_remove_restriction_rule_from_list()
  * @see stc_set_restriction_list()
  * @see stc_unset_restriction_list()
  */
@@ -587,8 +587,8 @@ int stc_get_restriction_from_list(stc_h stc, stc_restriction_list_h list,
  * @see stc_restriction_rule_get_process_state()
  * @see stc_restriction_list_create()
  * @see stc_get_restriction_list()
- * @see stc_add_restriction_to_list()
- * @see stc_remove_restriction_from_list()
+ * @see stc_add_restriction_rule_to_list()
+ * @see stc_remove_restriction_rule_from_list()
  * @see stc_set_restriction_list()
  * @see stc_unset_restriction_list()
  */
@@ -634,8 +634,8 @@ int stc_foreach_restriction_list(stc_h stc, stc_restriction_list_cb list_cb, voi
  * @see stc_restriction_rule_get_process_state()
  * @see stc_restriction_list_create()
  * @see stc_get_restriction_list()
- * @see stc_add_restriction_to_list()
- * @see stc_remove_restriction_from_list()
+ * @see stc_add_restriction_rule_to_list()
+ * @see stc_remove_restriction_rule_from_list()
  * @see stc_foreach_restriction_list()
  * @see stc_unset_restriction_list()
  */
@@ -681,8 +681,8 @@ int stc_set_restriction_list(stc_h stc, stc_restriction_list_h list);
  * @see stc_restriction_rule_get_process_state()
  * @see stc_restriction_list_create()
  * @see stc_get_restriction_list()
- * @see stc_add_restriction_to_list()
- * @see stc_remove_restriction_from_list()
+ * @see stc_add_restriction_rule_to_list()
+ * @see stc_remove_restriction_rule_from_list()
  * @see stc_foreach_restriction_list()
  * @see stc_set_restriction_list()
  */
index 76dff65..613d921 100755 (executable)
@@ -825,7 +825,8 @@ int stc_restriction_rule_get_subscriber_id(stc_restriction_rule_h rule, char **s
  * @see stc_initialize()
  * @see stc_restriction_list_destroy()
  */
-int stc_restriction_list_create(stc_h stc, stc_restriction_list_h *list);
+int stc_restriction_list_create(stc_h stc, stc_restriction_list_h *list,
+                       const char *name);
 
 /**
  * @brief Destroys the restriction list handle.
index d4c18ff..2c8cce0 100755 (executable)
@@ -1,6 +1,6 @@
 Name:       capi-network-stc
 Summary:    A Smart Traffic Control (STC) libraries in Native API
-Version:    0.0.37
+Version:    0.0.38
 Release:    1
 Group:      Network & Connectivity/API
 License:    Apache-2.0
index c468403..9cd32fe 100755 (executable)
@@ -76,6 +76,11 @@ typedef struct {
        stc_roaming_type_e roaming_type;
 } stc_restriction_rule_s;
 
+typedef struct {
+       char name[STC_LIST_NAME_LEN];
+       GSList *rules;
+} stc_restriction_list_s;
+
 /*****************************************************************************
  *  Global Variables
  *****************************************************************************/
@@ -84,9 +89,18 @@ typedef struct {
  *  Local Functions Definition
  *****************************************************************************/
 
-void _stc_restriction_add_to_list(stc_restriction_rule_h rule);
-void _stc_restriction_remove_from_list(stc_restriction_rule_h rule);
-bool _stc_restriction_check_validity(stc_restriction_rule_h rule);
+void _stc_restriction_add_rule(stc_restriction_rule_h rule);
+void _stc_restriction_remove_rule(stc_restriction_rule_h rule);
+bool _stc_restriction_check_rule_validity(stc_restriction_rule_h rule);
+
+bool _stc_restriction_add_rule_to_list(stc_restriction_list_h list,
+                       stc_restriction_rule_h rule);
+bool _stc_restriction_remove_rule_from_list(stc_restriction_list_h list,
+                       stc_restriction_rule_h rule);
+
+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_validate_rule(
                stc_restriction_rule_h rule);
index 5c99897..df966e8 100755 (executable)
@@ -45,6 +45,7 @@
 /*****************************************************************************
  *  Macros and Typedefs
  *****************************************************************************/
+#define STC_LIST_NAME_LEN 128
 #define STC_APP_ID_LEN 128
 #define STC_IFNAME_LEN 16
 #define STC_SUBSCRIBER_ID_LEN 128
index e6e93cb..eeeffa3 100755 (executable)
@@ -466,10 +466,10 @@ static void __stc_callback_foreach(stc_event_e e,
                                        if (info_data != NULL) {
                                                for (data = info_data; data; data = data->next) {
                                                        stc_restriction_rule_h rule = data->data;
-                                                       _stc_restriction_add_to_list(rule);
+                                                       _stc_restriction_add_rule(rule);
                                                        ret = handle->restriction_cb(err,
                                                                rule, handle->restriction_user_data);
-                                                       _stc_restriction_remove_from_list(rule);
+                                                       _stc_restriction_remove_rule(rule);
 
                                                        if (ret == STC_CALLBACK_CANCEL)
                                                                break;
@@ -491,10 +491,10 @@ static void __stc_callback_foreach(stc_event_e e,
                                        if (info_data != NULL) {
                                                for (data = info_data; data; data = data->next) {
                                                        stc_restriction_rule_h rule = data->data;
-                                                       _stc_restriction_add_to_list(rule);
+                                                       _stc_restriction_add_rule(rule);
                                                        ret = handle->restriction_all_cb(err,
                                                                rule, handle->restriction_all_user_data);
-                                                       _stc_restriction_remove_from_list(rule);
+                                                       _stc_restriction_remove_rule(rule);
 
                                                        if (ret == STC_CALLBACK_CANCEL)
                                                                break;
@@ -550,18 +550,18 @@ static void __stc_signal_callback(stc_event_e e, void *info_data)
                switch (e) {
                case STC_EVENT_WARN_THRESHOLD_CROSSED_RSP:
                        if (handle->warn_crossed_cb) {
-                               _stc_restriction_add_to_list((stc_restriction_rule_h)info_data);
+                               _stc_restriction_add_rule((stc_restriction_rule_h)info_data);
                                handle->warn_crossed_cb((stc_restriction_rule_h)info_data,
                                                        handle->warn_crossed_user_data);
-                               _stc_restriction_remove_from_list((stc_restriction_rule_h)info_data);
+                               _stc_restriction_remove_rule((stc_restriction_rule_h)info_data);
                        }
                        break;
                case STC_EVENT_RESTRICTION_THRESHOLD_CROSSED_RSP:
                        if (handle->restriction_crossed_cb) {
-                               _stc_restriction_add_to_list((stc_restriction_rule_h)info_data);
+                               _stc_restriction_add_rule((stc_restriction_rule_h)info_data);
                                handle->restriction_crossed_cb((stc_restriction_rule_h)info_data,
                                                               handle->restriction_crossed_user_data);
-                               _stc_restriction_remove_from_list((stc_restriction_rule_h)info_data);
+                               _stc_restriction_remove_rule((stc_restriction_rule_h)info_data);
                        }
                        break;
                default:
index 1e527cf..4bd6b27 100755 (executable)
@@ -296,7 +296,7 @@ EXPORT_API int stc_set_restriction(stc_h stc,
                return STC_ERROR_INVALID_PARAMETER;
        }
 
-       if (_stc_restriction_check_validity(rule) == false) {
+       if (_stc_restriction_check_rule_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -329,7 +329,7 @@ EXPORT_API int stc_unset_restriction(stc_h stc, stc_restriction_rule_h rule)
                return STC_ERROR_INVALID_PARAMETER;
        }
 
-       if (_stc_restriction_check_validity(rule) == false) {
+       if (_stc_restriction_check_rule_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -363,7 +363,7 @@ EXPORT_API int stc_get_restriction(stc_h stc, stc_restriction_rule_h rule,
                return STC_ERROR_INVALID_PARAMETER;
        }
 
-       if (_stc_restriction_check_validity(rule) == false) {
+       if (_stc_restriction_check_rule_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -473,7 +473,7 @@ EXPORT_API int stc_foreach_restriction(stc_h stc, stc_restriction_rule_h rule,
                return STC_ERROR_INVALID_PARAMETER;
        }
 
-       if (_stc_restriction_check_validity(rule) == false) {
+       if (_stc_restriction_check_rule_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -515,7 +515,7 @@ EXPORT_API int stc_get_restriction_type(stc_h stc, stc_restriction_rule_h rule,
                return STC_ERROR_INVALID_PARAMETER;
        }
 
-       if (_stc_restriction_check_validity(rule) == false) {
+       if (_stc_restriction_check_rule_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -539,6 +539,82 @@ EXPORT_API int stc_get_restriction_type(stc_h stc, stc_restriction_rule_h rule,
        return STC_ERROR_NONE;
 }
 
+EXPORT_API int stc_add_restriction_rule_to_list(stc_h stc,
+               stc_restriction_list_h list, stc_restriction_rule_h rule)
+{
+       int ret = STC_ERROR_NONE;
+
+       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
+
+       if (!(_stc_handle_check_validity(stc))) {
+               STC_LOGE("Invalid parameter");
+               return STC_ERROR_INVALID_PARAMETER;
+       }
+
+       if (_stc_restriction_check_list_validity(list) == false) {
+               STC_LOGE("Invalid parameter");
+               return STC_ERROR_INVALID_PARAMETER;
+       }
+
+       if (_stc_restriction_check_rule_validity(rule) == false) {
+               STC_LOGE("Invalid parameter");
+               return STC_ERROR_INVALID_PARAMETER;
+       }
+
+       ret = _stc_restriction_validate_rule(rule);
+       if (ret != STC_ERROR_NONE) {
+               STC_LOGE("Invalid restriction rule [%s]",
+                       _stc_convert_error_type_to_string(ret));
+               return ret;
+       }
+
+       if (_stc_restriction_add_rule_to_list(list, rule) == false) {
+               STC_LOGE("Failed to add restriction rule to list[%s]",
+                       _stc_convert_error_type_to_string(ret));
+               return ret;
+       }
+
+       return STC_ERROR_NONE;
+}
+
+EXPORT_API int stc_remove_restriction_rule_from_list(stc_h stc,
+               stc_restriction_list_h list, stc_restriction_rule_h rule)
+{
+       int ret = STC_ERROR_NONE;
+
+       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
+
+       if (!(_stc_handle_check_validity(stc))) {
+               STC_LOGE("Invalid parameter");
+               return STC_ERROR_INVALID_PARAMETER;
+       }
+
+       if (_stc_restriction_check_list_validity(list) == false) {
+               STC_LOGE("Invalid parameter");
+               return STC_ERROR_INVALID_PARAMETER;
+       }
+
+       if (_stc_restriction_check_rule_validity(rule) == false) {
+               STC_LOGE("Invalid parameter");
+               return STC_ERROR_INVALID_PARAMETER;
+       }
+
+       ret = _stc_restriction_validate_rule(rule);
+       if (ret != STC_ERROR_NONE) {
+               STC_LOGE("Invalid restriction rule [%s]",
+                       _stc_convert_error_type_to_string(ret));
+               return ret;
+       }
+
+       if (_stc_restriction_remove_rule_from_list(list, rule) == false) {
+               STC_LOGE("Failed to remove restriction rule from list[%s]",
+                       _stc_convert_error_type_to_string(ret));
+               return ret;
+       }
+
+       return STC_ERROR_NONE;
+}
+
 EXPORT_API int stc_iptables_commit(stc_h stc, const char *option,
                int *err_num, char **err_str)
 {
index 608c892..6811319 100755 (executable)
@@ -57,6 +57,7 @@
  *  Global Variables
  *****************************************************************************/
 
+static GSList *g_restriction_rule = NULL;
 static GSList *g_restriction_list = NULL;
 
 /*****************************************************************************
@@ -85,6 +86,18 @@ static void __stc_restriction_deinit_rule(stc_restriction_rule_h rule)
        g_free(rule);
 }
 
+static void __stc_restriction_init_list(stc_restriction_list_s *list,
+                       const char *name)
+{
+       g_strlcpy(list->name, name, STC_LIST_NAME_LEN);
+       list->rules = NULL;
+}
+
+static void __stc_restriction_deinit_list(stc_restriction_list_h list)
+{
+       g_free(list);
+}
+
 static void __stc_restriction_rule_make_params(
                        stc_restriction_rule_h rule,
                        GVariant **params)
@@ -452,22 +465,69 @@ stc_error_e __stc_restriction_get_all(
        return STC_ERROR_NONE;
 }
 
-void _stc_restriction_add_to_list(stc_restriction_rule_h rule)
+void _stc_restriction_add_rule(stc_restriction_rule_h rule)
 {
-       g_restriction_list = g_slist_append(g_restriction_list, rule);
+       g_restriction_rule = g_slist_append(g_restriction_rule, rule);
 }
 
-void _stc_restriction_remove_from_list(stc_restriction_rule_h rule)
+void _stc_restriction_remove_rule(stc_restriction_rule_h rule)
 {
-       g_restriction_list = g_slist_remove(g_restriction_list, rule);
+       g_restriction_rule = g_slist_remove(g_restriction_rule, rule);
 }
 
-bool _stc_restriction_check_validity(stc_restriction_rule_h rule)
+bool _stc_restriction_check_rule_validity(stc_restriction_rule_h rule)
 {
        if (!rule)
                return false;
 
-       if (g_slist_find(g_restriction_list, rule))
+       if (g_slist_find(g_restriction_rule, rule))
+               return true;
+       else
+               return false;
+}
+
+bool _stc_restriction_add_rule_to_list(stc_restriction_list_h list,
+                       stc_restriction_rule_h rule)
+{
+       GSList *find = g_slist_find(g_restriction_list, list);
+       if (find) {
+               stc_restriction_list_s *list_data = (stc_restriction_list_s *)find->data;
+               list_data->rules = g_slist_append(list_data->rules, rule);
+               return true;
+       } else {
+               return false;
+       }
+}
+
+bool _stc_restriction_remove_rule_from_list(stc_restriction_list_h list,
+                       stc_restriction_rule_h rule)
+{
+       GSList *find = g_slist_find(g_restriction_list, list);
+       if (find) {
+               stc_restriction_list_s *list_data = (stc_restriction_list_s *)find->data;
+               list_data->rules = g_slist_append(list_data->rules, rule);
+               return true;
+       } else {
+               return false;
+       }
+}
+
+void _stc_restriction_add_list(stc_restriction_list_h list)
+{
+       g_restriction_list = g_slist_append(g_restriction_list, list);
+}
+
+void _stc_restriction_remove_list(stc_restriction_list_h list)
+{
+       g_restriction_list = g_slist_remove(g_restriction_list, list);
+}
+
+bool _stc_restriction_check_list_validity(stc_restriction_list_h list)
+{
+       if (!list)
+               return false;
+
+       if (g_slist_find(g_restriction_list, list))
                return true;
        else
                return false;
@@ -871,7 +931,7 @@ EXPORT_API int stc_restriction_rule_create(stc_h stc, stc_restriction_rule_h *ru
        }
 
        __stc_restriction_init_rule(restriction_rule);
-       _stc_restriction_add_to_list((stc_restriction_rule_h)restriction_rule);
+       _stc_restriction_add_rule((stc_restriction_rule_h)restriction_rule);
 
        *rule = (stc_restriction_rule_h)restriction_rule;
        STC_LOGI("Restriction rule successfully created");
@@ -883,12 +943,12 @@ EXPORT_API int stc_restriction_rule_destroy(stc_restriction_rule_h rule)
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (_stc_restriction_check_validity(rule) == false) {
+       if (_stc_restriction_check_rule_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
 
-       _stc_restriction_remove_from_list(rule);
+       _stc_restriction_remove_rule(rule);
        __stc_restriction_deinit_rule(rule);
 
        STC_LOGI("Restriction rule successfully destroyed");
@@ -901,7 +961,7 @@ EXPORT_API int stc_restriction_rule_set_app_id(stc_restriction_rule_h rule,
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (_stc_restriction_check_validity(rule) == false) {
+       if (_stc_restriction_check_rule_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -925,7 +985,7 @@ EXPORT_API int stc_restriction_rule_set_iface_name(stc_restriction_rule_h rule,
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (_stc_restriction_check_validity(rule) == false) {
+       if (_stc_restriction_check_rule_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -948,7 +1008,7 @@ EXPORT_API int stc_restriction_rule_set_iface_type(stc_restriction_rule_h rule,
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (_stc_restriction_check_validity(rule) == false) {
+       if (_stc_restriction_check_rule_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -981,7 +1041,7 @@ EXPORT_API int stc_restriction_rule_set_type(stc_restriction_rule_h rule,
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (_stc_restriction_check_validity(rule) == false) {
+       if (_stc_restriction_check_rule_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -1011,7 +1071,7 @@ EXPORT_API int stc_restriction_rule_set_limit(stc_restriction_rule_h rule,
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (_stc_restriction_check_validity(rule) == false) {
+       if (_stc_restriction_check_rule_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -1031,7 +1091,7 @@ EXPORT_API int stc_restriction_rule_set_warning_limit(stc_restriction_rule_h rul
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (_stc_restriction_check_validity(rule) == false) {
+       if (_stc_restriction_check_rule_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -1052,7 +1112,7 @@ EXPORT_API int stc_restriction_rule_set_monthly_limit(stc_restriction_rule_h rul
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (_stc_restriction_check_validity(rule) == false) {
+       if (_stc_restriction_check_rule_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -1073,7 +1133,7 @@ EXPORT_API int stc_restriction_rule_set_weekly_limit(stc_restriction_rule_h rule
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (_stc_restriction_check_validity(rule) == false) {
+       if (_stc_restriction_check_rule_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -1094,7 +1154,7 @@ EXPORT_API int stc_restriction_rule_set_daily_limit(stc_restriction_rule_h rule,
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (_stc_restriction_check_validity(rule) == false) {
+       if (_stc_restriction_check_rule_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -1115,7 +1175,7 @@ EXPORT_API int stc_restriction_rule_set_month_start_date(stc_restriction_rule_h
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (_stc_restriction_check_validity(rule) == false) {
+       if (_stc_restriction_check_rule_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -1136,7 +1196,7 @@ EXPORT_API int stc_restriction_rule_set_roaming_type(stc_restriction_rule_h rule
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (_stc_restriction_check_validity(rule) == false) {
+       if (_stc_restriction_check_rule_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -1165,7 +1225,7 @@ EXPORT_API int stc_restriction_rule_set_subscriber_id(stc_restriction_rule_h rul
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (_stc_restriction_check_validity(rule) == false) {
+       if (_stc_restriction_check_rule_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -1187,7 +1247,7 @@ EXPORT_API int stc_restriction_rule_get_app_id(stc_restriction_rule_h rule, char
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (_stc_restriction_check_validity(rule) == false) {
+       if (_stc_restriction_check_rule_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -1214,7 +1274,7 @@ EXPORT_API int stc_restriction_rule_get_iface_name(stc_restriction_rule_h rule,
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (_stc_restriction_check_validity(rule) == false) {
+       if (_stc_restriction_check_rule_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -1241,7 +1301,7 @@ EXPORT_API int stc_restriction_rule_get_iface_type(stc_restriction_rule_h rule,
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (_stc_restriction_check_validity(rule) == false) {
+       if (_stc_restriction_check_rule_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -1261,7 +1321,7 @@ EXPORT_API int stc_restriction_rule_get_type(stc_restriction_rule_h rule,
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (_stc_restriction_check_validity(rule) == false) {
+       if (_stc_restriction_check_rule_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -1281,7 +1341,7 @@ EXPORT_API int stc_restriction_rule_get_limit(stc_restriction_rule_h rule,
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (_stc_restriction_check_validity(rule) == false) {
+       if (_stc_restriction_check_rule_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -1306,7 +1366,7 @@ EXPORT_API int stc_restriction_rule_get_warning_limit(stc_restriction_rule_h rul
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (_stc_restriction_check_validity(rule) == false) {
+       if (_stc_restriction_check_rule_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -1331,7 +1391,7 @@ EXPORT_API int stc_restriction_rule_get_monthly_limit(stc_restriction_rule_h rul
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (_stc_restriction_check_validity(rule) == false) {
+       if (_stc_restriction_check_rule_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -1356,7 +1416,7 @@ EXPORT_API int stc_restriction_rule_get_weekly_limit(stc_restriction_rule_h rule
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (_stc_restriction_check_validity(rule) == false) {
+       if (_stc_restriction_check_rule_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -1381,7 +1441,7 @@ EXPORT_API int stc_restriction_rule_get_daily_limit(stc_restriction_rule_h rule,
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (_stc_restriction_check_validity(rule) == false) {
+       if (_stc_restriction_check_rule_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -1406,7 +1466,7 @@ EXPORT_API int stc_restriction_rule_get_month_start_date(stc_restriction_rule_h
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (_stc_restriction_check_validity(rule) == false) {
+       if (_stc_restriction_check_rule_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -1431,7 +1491,7 @@ EXPORT_API int stc_restriction_rule_get_roaming_type(stc_restriction_rule_h rule
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (_stc_restriction_check_validity(rule) == false) {
+       if (_stc_restriction_check_rule_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -1452,7 +1512,7 @@ EXPORT_API int stc_restriction_rule_get_subscriber_id(stc_restriction_rule_h rul
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (_stc_restriction_check_validity(rule) == false) {
+       if (_stc_restriction_check_rule_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -1473,4 +1533,52 @@ EXPORT_API int stc_restriction_rule_get_subscriber_id(stc_restriction_rule_h rul
 
        return STC_ERROR_NONE;
 }
+
+EXPORT_API int stc_restriction_list_create(stc_h stc, stc_restriction_list_h *list,
+                       const char *name)
+{
+       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
+
+       if (!(_stc_handle_check_validity(stc))) {
+               STC_LOGE("Invalid parameter");
+               return STC_ERROR_INVALID_PARAMETER;
+       }
+
+       if (list == NULL || name == NULL) {
+               STC_LOGE("Invalid parameter");
+               return STC_ERROR_INVALID_PARAMETER;
+       }
+
+       stc_restriction_list_s *restriction_list =
+               g_try_malloc0(sizeof(stc_restriction_list_s));
+       if (restriction_list == NULL) {
+               STC_LOGE("Memory allocation failed");
+               return STC_ERROR_OUT_OF_MEMORY;
+       }
+
+       __stc_restriction_init_list(restriction_list, name);
+       _stc_restriction_add_list((stc_restriction_list_h)restriction_list);
+
+       *list = (stc_restriction_list_h)restriction_list;
+       STC_LOGI("Restriction list successfully created [%s]", name);
+
+       return STC_ERROR_NONE;
+}
+
+EXPORT_API int stc_restriction_list_destroy(stc_restriction_list_h list)
+{
+       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
+
+       if (_stc_restriction_check_list_validity(list) == false) {
+               STC_LOGE("Invalid parameter");
+               return STC_ERROR_INVALID_PARAMETER;
+       }
+
+       _stc_restriction_remove_list(list);
+       __stc_restriction_deinit_list(list);
+
+       STC_LOGI("Restriction list successfully destroyed");
+
+       return STC_ERROR_NONE;
+}
 //LCOV_EXCL_STOP