#include "table-restrictions.h"
#include "stc-restriction.h"
#include "stc-manager-gdbus.h"
-#include "stc-monitor.h"
+#include "stc-manager-plugin-monitor.h"
#define RESTRICTION_DBUS_ERROR_NAME "net.stc.restriction.Error.Failed"
return FALSE; //LCOV_EXCL_LINE
}
- if (rule->roaming > STC_ROAMING_ENABLE) {
+ if (rule->roaming > STC_ROAMING_DISABLE) {
__STC_LOG_FUNC_EXIT__; //LCOV_EXCL_LINE
return FALSE; //LCOV_EXCL_LINE
}
}
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);
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);
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);
}
}
+static void __stc_free_restriction_rule_members(table_restrictions_info *rule)
+{
+ FREE(rule->app_id);
+ FREE(rule->ifname);
+ FREE(rule->subscriber_id);
+ FREE(rule->mac);
+}
+
gboolean handle_restriction_set(StcRestriction *object,
GDBusMethodInvocation *invocation,
GVariant *parameters,
table_restrictions_info rule;
stc_error_e ret = STC_ERROR_NONE;
+ stc_set_keep_alive(TRUE);
+
memset(&rule, 0, sizeof(table_restrictions_info));
__initialize_rstn_rule(&rule);
if (__validate_rstn_rule(&rule) == FALSE) {
STC_RESTRICTION_DBUS_REPLY_ERROR(invocation, //LCOV_EXCL_LINE
STC_ERROR_INVALID_PARAMETER);
+ __stc_free_restriction_rule_members(&rule);
__STC_LOG_FUNC_EXIT__; //LCOV_EXCL_LINE
return TRUE;
}
if (ret != STC_ERROR_NONE) {
STC_RESTRICTION_DBUS_REPLY_ERROR(invocation, //LCOV_EXCL_LINE
STC_ERROR_DB_FAILED);
+ __stc_free_restriction_rule_members(&rule);
__STC_LOG_FUNC_EXIT__; //LCOV_EXCL_LINE
return TRUE;
}
- stc_monitor_rstn_add(&rule);
+ stc_plugin_monitor_add_rstn(&rule);
STC_DBUS_REPLY_ERROR_NONE(invocation);
+ __stc_free_restriction_rule_members(&rule);
__STC_LOG_FUNC_EXIT__;
return TRUE;
}
table_restrictions_info rule;
stc_error_e ret = STC_ERROR_NONE;
+ stc_set_keep_alive(TRUE);
+
memset(&rule, 0, sizeof(table_restrictions_info));
__initialize_rstn_rule(&rule);
if (__validate_rstn_rule(&rule) == FALSE) {
STC_RESTRICTION_DBUS_REPLY_ERROR(invocation, //LCOV_EXCL_LINE
STC_ERROR_INVALID_PARAMETER);
+ __stc_free_restriction_rule_members(&rule);
__STC_LOG_FUNC_EXIT__; //LCOV_EXCL_LINE
return TRUE;
}
if (ret != STC_ERROR_NONE) {
STC_RESTRICTION_DBUS_REPLY_ERROR(invocation, //LCOV_EXCL_LINE
STC_ERROR_DB_FAILED);
+ __stc_free_restriction_rule_members(&rule);
__STC_LOG_FUNC_EXIT__; //LCOV_EXCL_LINE
return TRUE;
}
- stc_monitor_rstn_remove(&rule);
+ stc_plugin_monitor_remove_rstn(&rule);
+ STC_DBUS_REPLY_ERROR_NONE(invocation);
+ __stc_free_restriction_rule_members(&rule);
+ __STC_LOG_FUNC_EXIT__;
+ 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;
+
+ stc_set_keep_alive(TRUE);
+
+ 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_free_restriction_rule_members(&rule);
+ __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_free_restriction_rule_members(&rule);
+ __STC_LOG_FUNC_EXIT__; //LCOV_EXCL_LINE
+ return TRUE;
+ }
+ }
+
+ __stc_free_restriction_rule_members(&rule);
+ 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;
+
+ stc_set_keep_alive(TRUE);
+
+ 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_free_restriction_rule_members(&rule);
+ __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_free_restriction_rule_members(&rule);
+ __STC_LOG_FUNC_EXIT__; //LCOV_EXCL_LINE
+ return TRUE;
+ }
+ }
+
+ __stc_free_restriction_rule_members(&rule);
+ g_variant_iter_free(iter_row);
+ }
+ g_variant_iter_free(iter);
+
STC_DBUS_REPLY_ERROR_NONE(invocation);
__STC_LOG_FUNC_EXIT__;
return TRUE;
GVariant *return_parameters = NULL;
stc_error_e ret;
+ stc_set_keep_alive(TRUE);
+
builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
ret = table_restrictions_per_app(app_id,
GVariant *return_parameters = NULL;
stc_error_e ret;
+ stc_set_keep_alive(TRUE);
+
builder = g_variant_builder_new(G_VARIANT_TYPE("aa{sv}"));
ret = table_restrictions_foreach(__table_restrictions_foreach_app_cb,
stc_rstn_type_e type = STC_RSTN_TYPE_UNKNOWN;
stc_error_e ret;
+ stc_set_keep_alive(TRUE);
+
ret = table_restrictions_get_restriction_type(app_id, iftype, &type);
if (ret < STC_ERROR_NONE) {
STC_RESTRICTION_DBUS_REPLY_ERROR(invocation, ret); //LCOV_EXCL_LINE