Checking validity for restriction rule handle 22/197422/1
authorhyunuktak <hyunuk.tak@samsung.com>
Fri, 11 Jan 2019 05:55:05 +0000 (14:55 +0900)
committerhyunuktak <hyunuk.tak@samsung.com>
Fri, 11 Jan 2019 05:55:08 +0000 (14:55 +0900)
Change-Id: I36b8153bf06cffb8d3dc111c18965386b614b3e1
Signed-off-by: hyunuktak <hyunuk.tak@samsung.com>
CMakeLists.txt
packaging/capi-network-stc.spec
src/include/stc-restriction.h
src/internal/stc-private.c
src/stc-manager.c
src/stc-restriction.c

index c104c57..876f61c 100755 (executable)
@@ -45,7 +45,7 @@ ENDFOREACH(flag)
 
 
 #SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fPIC -Wall -fprofile-arcs -ftest-coverage")
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fPIC -Wall")
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fPIC -Wall -Werror")
 SET(CMAKE_C_FLAGS_DEBUG      "-O0 -g")
 SET(CMAKE_C_FLAGS_RELEASE    "-O2 -g")
 
index 3eb99e4..d4c18ff 100755 (executable)
@@ -1,6 +1,6 @@
 Name:       capi-network-stc
 Summary:    A Smart Traffic Control (STC) libraries in Native API
-Version:    0.0.36
+Version:    0.0.37
 Release:    1
 Group:      Network & Connectivity/API
 License:    Apache-2.0
index 617aee1..c468403 100755 (executable)
@@ -84,6 +84,10 @@ 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);
+
 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 ef809d5..e6e93cb 100755 (executable)
@@ -54,6 +54,7 @@
 #include "stc-util.h"
 #include "stc-event.h"
 #include "stc-signal.h"
+#include "stc-restriction.h"
 
 /*****************************************************************************
  *  Macros and Typedefs
@@ -465,8 +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);
                                                        ret = handle->restriction_cb(err,
                                                                rule, handle->restriction_user_data);
+                                                       _stc_restriction_remove_from_list(rule);
 
                                                        if (ret == STC_CALLBACK_CANCEL)
                                                                break;
@@ -488,8 +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);
                                                        ret = handle->restriction_all_cb(err,
                                                                rule, handle->restriction_all_user_data);
+                                                       _stc_restriction_remove_from_list(rule);
 
                                                        if (ret == STC_CALLBACK_CANCEL)
                                                                break;
@@ -544,14 +549,20 @@ static void __stc_signal_callback(stc_event_e e, void *info_data)
                stc_handle_s *handle = (stc_handle_s *)list->data;
                switch (e) {
                case STC_EVENT_WARN_THRESHOLD_CROSSED_RSP:
-                       if (handle->warn_crossed_cb)
+                       if (handle->warn_crossed_cb) {
+                               _stc_restriction_add_to_list((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);
+                       }
                        break;
                case STC_EVENT_RESTRICTION_THRESHOLD_CROSSED_RSP:
-                       if (handle->restriction_crossed_cb)
+                       if (handle->restriction_crossed_cb) {
+                               _stc_restriction_add_to_list((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);
+                       }
                        break;
                default:
                        break;
index d8ea4fa..1e527cf 100755 (executable)
@@ -296,6 +296,11 @@ EXPORT_API int stc_set_restriction(stc_h stc,
                return STC_ERROR_INVALID_PARAMETER;
        }
 
+       if (_stc_restriction_check_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]",
@@ -324,6 +329,11 @@ 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) {
+               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]",
@@ -353,6 +363,11 @@ 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) {
+               STC_LOGE("Invalid parameter");
+               return STC_ERROR_INVALID_PARAMETER;
+       }
+
        if (rule_cb == NULL) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
@@ -458,6 +473,11 @@ 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) {
+               STC_LOGE("Invalid parameter");
+               return STC_ERROR_INVALID_PARAMETER;
+       }
+
        if (rule_cb == NULL) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
@@ -495,6 +515,11 @@ 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) {
+               STC_LOGE("Invalid parameter");
+               return STC_ERROR_INVALID_PARAMETER;
+       }
+
        ret = _stc_restriction_check_get_type_rule(rule);
        if (ret != STC_ERROR_NONE) {
                STC_LOGE("Invalid restriction rule [%s]",
index 3bf6fa2..608c892 100755 (executable)
@@ -57,6 +57,8 @@
  *  Global Variables
  *****************************************************************************/
 
+static GSList *g_restriction_list = NULL;
+
 /*****************************************************************************
  *  Local Functions Definition
  *****************************************************************************/
@@ -450,6 +452,27 @@ stc_error_e __stc_restriction_get_all(
        return STC_ERROR_NONE;
 }
 
+void _stc_restriction_add_to_list(stc_restriction_rule_h rule)
+{
+       g_restriction_list = g_slist_append(g_restriction_list, rule);
+}
+
+void _stc_restriction_remove_from_list(stc_restriction_rule_h rule)
+{
+       g_restriction_list = g_slist_remove(g_restriction_list, rule);
+}
+
+bool _stc_restriction_check_validity(stc_restriction_rule_h rule)
+{
+       if (!rule)
+               return false;
+
+       if (g_slist_find(g_restriction_list, rule))
+               return true;
+       else
+               return false;
+}
+
 stc_error_e _stc_restriction_validate_rule(
                stc_restriction_rule_h rule)
 
@@ -848,6 +871,8 @@ 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);
+
        *rule = (stc_restriction_rule_h)restriction_rule;
        STC_LOGI("Restriction rule successfully created");
 
@@ -858,12 +883,14 @@ EXPORT_API int stc_restriction_rule_destroy(stc_restriction_rule_h rule)
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (rule == NULL) {
+       if (_stc_restriction_check_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
 
+       _stc_restriction_remove_from_list(rule);
        __stc_restriction_deinit_rule(rule);
+
        STC_LOGI("Restriction rule successfully destroyed");
 
        return STC_ERROR_NONE;
@@ -874,7 +901,7 @@ EXPORT_API int stc_restriction_rule_set_app_id(stc_restriction_rule_h rule,
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (rule == NULL) {
+       if (_stc_restriction_check_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -898,7 +925,7 @@ EXPORT_API int stc_restriction_rule_set_iface_name(stc_restriction_rule_h rule,
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (rule == NULL) {
+       if (_stc_restriction_check_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -921,7 +948,7 @@ EXPORT_API int stc_restriction_rule_set_iface_type(stc_restriction_rule_h rule,
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (rule == NULL) {
+       if (_stc_restriction_check_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -954,7 +981,7 @@ EXPORT_API int stc_restriction_rule_set_type(stc_restriction_rule_h rule,
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (rule == NULL) {
+       if (_stc_restriction_check_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -984,7 +1011,7 @@ EXPORT_API int stc_restriction_rule_set_limit(stc_restriction_rule_h rule,
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (rule == NULL) {
+       if (_stc_restriction_check_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -1004,7 +1031,7 @@ EXPORT_API int stc_restriction_rule_set_warning_limit(stc_restriction_rule_h rul
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (rule == NULL) {
+       if (_stc_restriction_check_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -1025,7 +1052,7 @@ EXPORT_API int stc_restriction_rule_set_monthly_limit(stc_restriction_rule_h rul
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (rule == NULL) {
+       if (_stc_restriction_check_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -1046,7 +1073,7 @@ EXPORT_API int stc_restriction_rule_set_weekly_limit(stc_restriction_rule_h rule
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (rule == NULL) {
+       if (_stc_restriction_check_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -1067,7 +1094,7 @@ EXPORT_API int stc_restriction_rule_set_daily_limit(stc_restriction_rule_h rule,
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (rule == NULL) {
+       if (_stc_restriction_check_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -1088,7 +1115,7 @@ EXPORT_API int stc_restriction_rule_set_month_start_date(stc_restriction_rule_h
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (rule == NULL) {
+       if (_stc_restriction_check_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -1109,7 +1136,7 @@ EXPORT_API int stc_restriction_rule_set_roaming_type(stc_restriction_rule_h rule
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (rule == NULL) {
+       if (_stc_restriction_check_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -1138,7 +1165,7 @@ EXPORT_API int stc_restriction_rule_set_subscriber_id(stc_restriction_rule_h rul
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (rule == NULL) {
+       if (_stc_restriction_check_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -1160,7 +1187,12 @@ EXPORT_API int stc_restriction_rule_get_app_id(stc_restriction_rule_h rule, char
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (rule == NULL || app_id == NULL) {
+       if (_stc_restriction_check_validity(rule) == false) {
+               STC_LOGE("Invalid parameter");
+               return STC_ERROR_INVALID_PARAMETER;
+       }
+
+       if (app_id == NULL) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -1182,7 +1214,12 @@ EXPORT_API int stc_restriction_rule_get_iface_name(stc_restriction_rule_h rule,
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (rule == NULL || iface_name == NULL) {
+       if (_stc_restriction_check_validity(rule) == false) {
+               STC_LOGE("Invalid parameter");
+               return STC_ERROR_INVALID_PARAMETER;
+       }
+
+       if (iface_name == NULL) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -1204,7 +1241,7 @@ EXPORT_API int stc_restriction_rule_get_iface_type(stc_restriction_rule_h rule,
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (rule == NULL) {
+       if (_stc_restriction_check_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -1224,7 +1261,7 @@ EXPORT_API int stc_restriction_rule_get_type(stc_restriction_rule_h rule,
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (rule == NULL) {
+       if (_stc_restriction_check_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -1244,7 +1281,12 @@ EXPORT_API int stc_restriction_rule_get_limit(stc_restriction_rule_h rule,
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (rule == NULL || data_limit == NULL) {
+       if (_stc_restriction_check_validity(rule) == false) {
+               STC_LOGE("Invalid parameter");
+               return STC_ERROR_INVALID_PARAMETER;
+       }
+
+       if (data_limit == NULL) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -1264,7 +1306,12 @@ EXPORT_API int stc_restriction_rule_get_warning_limit(stc_restriction_rule_h rul
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (rule == NULL || data_warn_limit == NULL) {
+       if (_stc_restriction_check_validity(rule) == false) {
+               STC_LOGE("Invalid parameter");
+               return STC_ERROR_INVALID_PARAMETER;
+       }
+
+       if (data_warn_limit == NULL) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -1284,7 +1331,12 @@ EXPORT_API int stc_restriction_rule_get_monthly_limit(stc_restriction_rule_h rul
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (rule == NULL || limit == NULL) {
+       if (_stc_restriction_check_validity(rule) == false) {
+               STC_LOGE("Invalid parameter");
+               return STC_ERROR_INVALID_PARAMETER;
+       }
+
+       if (limit == NULL) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -1304,7 +1356,12 @@ EXPORT_API int stc_restriction_rule_get_weekly_limit(stc_restriction_rule_h rule
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (rule == NULL || limit == NULL) {
+       if (_stc_restriction_check_validity(rule) == false) {
+               STC_LOGE("Invalid parameter");
+               return STC_ERROR_INVALID_PARAMETER;
+       }
+
+       if (limit == NULL) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -1324,7 +1381,12 @@ EXPORT_API int stc_restriction_rule_get_daily_limit(stc_restriction_rule_h rule,
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (rule == NULL || limit == NULL) {
+       if (_stc_restriction_check_validity(rule) == false) {
+               STC_LOGE("Invalid parameter");
+               return STC_ERROR_INVALID_PARAMETER;
+       }
+
+       if (limit == NULL) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -1344,7 +1406,12 @@ EXPORT_API int stc_restriction_rule_get_month_start_date(stc_restriction_rule_h
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (rule == NULL || date == NULL) {
+       if (_stc_restriction_check_validity(rule) == false) {
+               STC_LOGE("Invalid parameter");
+               return STC_ERROR_INVALID_PARAMETER;
+       }
+
+       if (date == NULL) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -1364,7 +1431,7 @@ EXPORT_API int stc_restriction_rule_get_roaming_type(stc_restriction_rule_h rule
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (rule == NULL) {
+       if (_stc_restriction_check_validity(rule) == false) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }
@@ -1385,7 +1452,12 @@ EXPORT_API int stc_restriction_rule_get_subscriber_id(stc_restriction_rule_h rul
 {
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC);
 
-       if (rule == NULL || subscriber_id == NULL) {
+       if (_stc_restriction_check_validity(rule) == false) {
+               STC_LOGE("Invalid parameter");
+               return STC_ERROR_INVALID_PARAMETER;
+       }
+
+       if (subscriber_id == NULL) {
                STC_LOGE("Invalid parameter");
                return STC_ERROR_INVALID_PARAMETER;
        }