Add to set/unset restriction list
[platform/core/connectivity/stc-manager.git] / src / stc-restriction.c
index ffe1a85..d49eb42 100755 (executable)
@@ -195,13 +195,13 @@ static void __stc_extract_restriction_rule(const char *key, GVariant *value,
        }
 
        if (!g_strcmp0(key, "app_id")) {
-               guint str_length;
+               gsize str_length;
                const gchar *str = g_variant_get_string(value, &str_length);
                rule->app_id = g_strdup(str);
                STC_LOGD("app_id: [%s]", rule->app_id);
 
        } else if (!g_strcmp0(key, "ifname")) {
-               guint str_length;
+               gsize str_length;
                const gchar *str = g_variant_get_string(value, &str_length);
                rule->ifname = g_strdup(str);
                STC_LOGD("ifname: [%s]", rule->ifname);
@@ -239,7 +239,7 @@ static void __stc_extract_restriction_rule(const char *key, GVariant *value,
                STC_LOGD("roaming: [%u]", rule->roaming);
 
        } else if (!g_strcmp0(key, "subscriber_id")) {
-               guint str_length;
+               gsize str_length;
                const gchar *str = g_variant_get_string(value, &str_length);
                rule->subscriber_id = g_strdup(str);
                STC_LOGD("subscriber_id: [%s]", rule->subscriber_id);
@@ -249,7 +249,7 @@ static void __stc_extract_restriction_rule(const char *key, GVariant *value,
                STC_LOGD("type: [%u]", (unsigned int) rule->rstn_type);
 
        } else if (!g_strcmp0(key, "mac")) {
-               guint str_length;
+               gsize str_length;
                const gchar *str = g_variant_get_string(value, &str_length);
                rule->mac = g_strdup(str);
                STC_LOGD("mac: [%s]", rule->mac);
@@ -344,6 +344,105 @@ gboolean handle_restriction_unset(StcRestriction *object,
        return TRUE;
 }
 
+gboolean handle_restriction_set_list(StcRestriction *object,
+                               GDBusMethodInvocation *invocation,
+                               GVariant *parameters,
+                               void *user_data)
+{
+       __STC_LOG_FUNC_ENTER__;
+       GVariantIter *iter = NULL;
+       GVariantIter *iter_row = NULL;
+       stc_error_e ret = STC_ERROR_NONE;
+
+       g_variant_get(parameters, "aa{sv}", &iter);
+       while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
+               table_restrictions_info rule;
+
+               memset(&rule, 0, sizeof(table_restrictions_info));
+               __initialize_rstn_rule(&rule);
+
+               stc_manager_gdbus_dict_foreach(iter_row,
+                       __stc_extract_restriction_rule, &rule);
+
+               if (__validate_rstn_rule(&rule)) {
+                       ret = table_restrictions_update(&rule);
+                       if (ret != STC_ERROR_NONE) {
+                               STC_RESTRICTION_DBUS_REPLY_ERROR(invocation, ret); //LCOV_EXCL_LINE
+                               g_variant_iter_free(iter_row);
+                               g_variant_iter_free(iter);
+                               __STC_LOG_FUNC_EXIT__; //LCOV_EXCL_LINE
+                               return TRUE;
+                       }
+
+                       ret = stc_plugin_monitor_add_rstn(&rule);
+                       if (ret != STC_ERROR_NONE) {
+                               STC_RESTRICTION_DBUS_REPLY_ERROR(invocation, ret); //LCOV_EXCL_LINE
+                               g_variant_iter_free(iter_row);
+                               g_variant_iter_free(iter);
+                               __STC_LOG_FUNC_EXIT__; //LCOV_EXCL_LINE
+                               return TRUE;
+                       }
+               }
+
+               g_variant_iter_free(iter_row);
+       }
+       g_variant_iter_free(iter);
+
+       STC_DBUS_REPLY_ERROR_NONE(invocation);
+       __STC_LOG_FUNC_EXIT__;
+       return TRUE;
+}
+
+gboolean handle_restriction_unset_list(StcRestriction *object,
+                                  GDBusMethodInvocation *invocation,
+                                  GVariant *parameters,
+                                  void *user_data)
+{
+       __STC_LOG_FUNC_ENTER__;
+       GVariantIter *iter = NULL;
+       GVariantIter *iter_row = NULL;
+       stc_error_e ret = STC_ERROR_NONE;
+
+       g_variant_get(parameters, "aa{sv}", &iter);
+       while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
+               table_restrictions_info rule;
+
+               memset(&rule, 0, sizeof(table_restrictions_info));
+               __initialize_rstn_rule(&rule);
+
+               stc_manager_gdbus_dict_foreach(iter_row,
+                       __stc_extract_restriction_rule, &rule);
+
+               if (__validate_rstn_rule(&rule)) {
+                       ret = table_restrictions_delete(rule.app_id, rule.iftype,
+                                               rule.ifname, rule.subscriber_id, rule.roaming);
+                       if (ret != STC_ERROR_NONE) {
+                               STC_RESTRICTION_DBUS_REPLY_ERROR(invocation, ret); //LCOV_EXCL_LINE
+                               g_variant_iter_free(iter_row);
+                               g_variant_iter_free(iter);
+                               __STC_LOG_FUNC_EXIT__; //LCOV_EXCL_LINE
+                               return TRUE;
+                       }
+
+                       ret = stc_plugin_monitor_remove_rstn(&rule);
+                       if (ret != STC_ERROR_NONE) {
+                               STC_RESTRICTION_DBUS_REPLY_ERROR(invocation, ret); //LCOV_EXCL_LINE
+                               g_variant_iter_free(iter_row);
+                               g_variant_iter_free(iter);
+                               __STC_LOG_FUNC_EXIT__; //LCOV_EXCL_LINE
+                               return TRUE;
+                       }
+               }
+
+               g_variant_iter_free(iter_row);
+       }
+       g_variant_iter_free(iter);
+
+       STC_DBUS_REPLY_ERROR_NONE(invocation);
+       __STC_LOG_FUNC_EXIT__;
+       return TRUE;
+}
+
 gboolean handle_restriction_get(StcRestriction *object,
                                GDBusMethodInvocation *invocation,
                                const gchar *app_id,