+gboolean handle_iptables_add_list(StcRule *object,
+ GDBusMethodInvocation *invocation,
+ GVariant *rule_list,
+ void *user_data)
+{
+ __LOG_FUNC_ENTER__;
+ GVariantIter *iter = NULL;
+ GVariantIter *iter_row = NULL;
+ stc_error_e ret = STC_ERROR_NONE;
+ GSList *iptables_list = NULL;
+ GVariant *return_parameters = NULL;
+ struct timespec start, end;
+ time_t sec;
+ long int nsec;
+
+ stc_set_keep_alive(TRUE);
+
+ clock_gettime(CLOCK_MONOTONIC, &start);
+
+ g_variant_get(rule_list, "aa{sv}", &iter);
+ while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
+ iptables_rule_s *rule = MALLOC0(iptables_rule_s, 1);
+ if (rule != NULL) {
+ stc_iptables_gdbus_dict_foreach(iter_row,
+ __stc_extract_rule,
+ rule);
+
+ iptables_list = g_slist_append(iptables_list, rule);
+ }
+ g_variant_iter_free(iter_row);
+ }
+ g_variant_iter_free(iter);
+
+ ret = iptables_add_rule_list(iptables_list);
+
+ g_slist_free_full(iptables_list, __free_rule);
+
+ clock_gettime(CLOCK_MONOTONIC, &end);
+
+ sec = end.tv_sec - start.tv_sec;
+ nsec = end.tv_nsec - start.tv_nsec;
+ if (nsec < 0)
+ nsec += 1000000000;
+
+ STC_LOGD("%s to add list [%3ld.%09ld]s",
+ ret == STC_ERROR_NONE ? "Successed" : "Failed", sec, nsec);
+
+ return_parameters = g_variant_new("(i)", ret);
+
+ STC_DEBUG_GDBUS_VARIANT("Return parameters: ", return_parameters);
+ STC_IPTABLES_DBUS_REPLY(invocation, return_parameters);
+
+ __LOG_FUNC_EXIT__;
+ return TRUE;
+}
+
+gboolean handle_iptables_remove_list(StcRule *object,
+ GDBusMethodInvocation *invocation,
+ GVariant *rule_list,
+ void *user_data)
+{
+ __LOG_FUNC_ENTER__;
+ GVariantIter *iter = NULL;
+ GVariantIter *iter_row = NULL;
+ stc_error_e ret = STC_ERROR_NONE;
+ GSList *iptables_list = NULL;
+ GVariant *return_parameters = NULL;
+ struct timespec start, end;
+ time_t sec;
+ long int nsec;
+
+ stc_set_keep_alive(TRUE);
+
+ clock_gettime(CLOCK_MONOTONIC, &start);
+
+ return_parameters = g_variant_new("(i)", STC_ERROR_NONE);
+
+ g_variant_get(rule_list, "aa{sv}", &iter);
+ while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
+ iptables_rule_s *rule = MALLOC0(iptables_rule_s, 1);
+ if (rule != NULL) {
+ stc_iptables_gdbus_dict_foreach(iter_row,
+ __stc_extract_rule,
+ rule);
+
+ iptables_list = g_slist_append(iptables_list, rule);
+ }
+ g_variant_iter_free(iter_row);
+ }
+ g_variant_iter_free(iter);
+
+ ret = iptables_remove_rule_list(iptables_list);
+
+ g_slist_free_full(iptables_list, __free_rule);
+
+ clock_gettime(CLOCK_MONOTONIC, &end);
+
+ sec = end.tv_sec - start.tv_sec;
+ nsec = end.tv_nsec - start.tv_nsec;
+ if (nsec < 0)
+ nsec += 1000000000;
+
+ STC_LOGD("%s to remove list [%3ld.%09ld]s",
+ ret == STC_ERROR_NONE ? "Successed" : "Failed", sec, nsec);
+
+ return_parameters = g_variant_new("(i)", ret);
+
+ STC_DEBUG_GDBUS_VARIANT("Return parameters: ", return_parameters);
+ STC_IPTABLES_DBUS_REPLY(invocation, return_parameters);
+
+ __LOG_FUNC_EXIT__;
+ return TRUE;
+}
+