X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fstc-restriction.c;h=6b207a5caa142f2ae8d8590d7bbaae1bb16f0329;hb=1c21cb2e5afd8132d0db6695d6cf5819092862be;hp=721d25c733791eef04ef9e364fb04fe2eba58119;hpb=f29609fd118f106e8526cbb65db912c9a87b868d;p=platform%2Fcore%2Fconnectivity%2Fstc-manager.git diff --git a/src/stc-restriction.c b/src/stc-restriction.c old mode 100755 new mode 100644 index 721d25c..6b207a5 --- a/src/stc-restriction.c +++ b/src/stc-restriction.c @@ -34,58 +34,62 @@ static const gchar *stc_err_strs[] = { "OUT_OF_MEMORY", "INVALID_PARAMETER", "NO_DATA", + "ALREADY_DATA", "UNINITIALIZED", + "PERMISSION_DENIED", "NOTIMPL" }; void __initialize_rstn_rule(table_restrictions_info *rule) { rule->app_id = NULL; - rule->ifname = NULL; + rule->iftype = STC_IFACE_ALL; - rule->rst_state = STC_RESTRICTION_REMOVED; - rule->rcv_limit = 0; - rule->send_limit = 0; - rule->rcv_warn_limit = 0; - rule->send_warn_limit = 0; + rule->ifname = NULL; + + rule->subscriber_id = NULL; rule->roaming = STC_ROAMING_DISABLE; - rule->imsi = NULL; + + rule->rstn_type = STC_RSTN_TYPE_UNKNOWN; + rule->data_limit = -1; + rule->data_warn_limit = -1; + + rule->month_start_date = 1; + rule->monthly_limit = -1; + rule->weekly_limit = -1; + rule->daily_limit = -1; + + rule->mac = NULL; } -gboolean __validate_rstn_rule(table_restrictions_info *rule, - enum traffic_restriction_type rst_type) +gboolean __validate_rstn_rule(table_restrictions_info *rule) { __STC_LOG_FUNC_ENTER__; if (rule == NULL) { - __STC_LOG_FUNC_EXIT__; - return FALSE; - } - - if (rst_type <= RST_UNDEFINDED || rst_type >= RST_MAX_VALUE) { - __STC_LOG_FUNC_EXIT__; - return FALSE; + __STC_LOG_FUNC_EXIT__; //LCOV_EXCL_LINE + return FALSE; //LCOV_EXCL_LINE } if (rule->iftype <= STC_IFACE_UNKNOWN || rule->iftype >= STC_IFACE_LAST_ELEM) { - __STC_LOG_FUNC_EXIT__; - return FALSE; + __STC_LOG_FUNC_EXIT__; //LCOV_EXCL_LINE + return FALSE; //LCOV_EXCL_LINE } - if (rule->roaming >= STC_ROAMING_LAST_ELEM) { - __STC_LOG_FUNC_EXIT__; - return FALSE; + if (rule->roaming > STC_ROAMING_ENABLE) { + __STC_LOG_FUNC_EXIT__; //LCOV_EXCL_LINE + return FALSE; //LCOV_EXCL_LINE } - if (rule->imsi == NULL) { - __STC_LOG_FUNC_EXIT__; - return FALSE; + if (rule->subscriber_id == NULL) { + __STC_LOG_FUNC_EXIT__; //LCOV_EXCL_LINE + return FALSE; //LCOV_EXCL_LINE } if (rule->app_id == NULL) { - __STC_LOG_FUNC_EXIT__; - return FALSE; + __STC_LOG_FUNC_EXIT__; //LCOV_EXCL_LINE + return FALSE; //LCOV_EXCL_LINE } __STC_LOG_FUNC_EXIT__; @@ -98,8 +102,8 @@ void __stc_restriction_app_info_builder_add(GVariantBuilder *builder, __STC_LOG_FUNC_ENTER__; if (!builder || !info) { - __STC_LOG_FUNC_EXIT__; - return; + __STC_LOG_FUNC_EXIT__; //LCOV_EXCL_LINE + return; //LCOV_EXCL_LINE } g_variant_builder_add(builder, "{sv}", "app_id", @@ -111,26 +115,32 @@ void __stc_restriction_app_info_builder_add(GVariantBuilder *builder, g_variant_builder_add(builder, "{sv}", "iftype", g_variant_new_uint16(info->iftype)); - g_variant_builder_add(builder, "{sv}", "rst_state", - g_variant_new_uint16(info->rst_state)); + g_variant_builder_add(builder, "{sv}", "rstn_type", + g_variant_new_uint16(info->rstn_type)); + + g_variant_builder_add(builder, "{sv}", "data_limit", + g_variant_new_int64(info->data_limit)); + + g_variant_builder_add(builder, "{sv}", "data_warn_limit", + g_variant_new_int64(info->data_warn_limit)); - g_variant_builder_add(builder, "{sv}", "rcv_limit", - g_variant_new_int64(info->rcv_limit)); + g_variant_builder_add(builder, "{sv}", "month_start_date", + g_variant_new_int32(info->month_start_date)); - g_variant_builder_add(builder, "{sv}", "send_limit", - g_variant_new_int64(info->send_limit)); + g_variant_builder_add(builder, "{sv}", "monthly_limit", + g_variant_new_int64(info->monthly_limit)); - g_variant_builder_add(builder, "{sv}", "rcv_warn_limit", - g_variant_new_int64(info->rcv_warn_limit)); + g_variant_builder_add(builder, "{sv}", "weekly_limit", + g_variant_new_int64(info->weekly_limit)); - g_variant_builder_add(builder, "{sv}", "send_warn_limit", - g_variant_new_int64(info->send_warn_limit)); + g_variant_builder_add(builder, "{sv}", "daily_limit", + g_variant_new_int64(info->daily_limit)); g_variant_builder_add(builder, "{sv}", "roaming", g_variant_new_uint16(info->roaming)); - g_variant_builder_add(builder, "{sv}", "imsi", - g_variant_new_string(info->imsi)); + g_variant_builder_add(builder, "{sv}", "subscriber_id", + g_variant_new_string(info->subscriber_id)); __STC_LOG_FUNC_EXIT__; } @@ -143,8 +153,8 @@ stc_cb_ret_e __table_restrictions_foreach_app_cb(const table_restrictions_info * GVariantBuilder sub_builder; if (!info || !builder) { - __STC_LOG_FUNC_EXIT__; - return STC_CANCEL; + __STC_LOG_FUNC_EXIT__; //LCOV_EXCL_LINE + return STC_CANCEL; //LCOV_EXCL_LINE } g_variant_builder_init(&sub_builder, G_VARIANT_TYPE("a{sv}")); @@ -164,8 +174,8 @@ stc_cb_ret_e __table_restrictions_per_app_cb(const table_restrictions_info *info GVariantBuilder *builder = (GVariantBuilder *)user_data; if (!info || !builder) { - __STC_LOG_FUNC_EXIT__; - return STC_CANCEL; + __STC_LOG_FUNC_EXIT__; //LCOV_EXCL_LINE + return STC_CANCEL; //LCOV_EXCL_LINE } __stc_restriction_app_info_builder_add(builder, info); @@ -177,20 +187,18 @@ stc_cb_ret_e __table_restrictions_per_app_cb(const table_restrictions_info *info static void __stc_extract_restriction_rule(const char *key, GVariant *value, void *user_data) { - __STC_LOG_FUNC_ENTER__; - table_restrictions_info *rule = (table_restrictions_info *) user_data; if (rule == NULL) { - __STC_LOG_FUNC_EXIT__; - return; + __STC_LOG_FUNC_EXIT__; //LCOV_EXCL_LINE + return; //LCOV_EXCL_LINE } if (!g_strcmp0(key, "app_id")) { guint str_length; const gchar *str = g_variant_get_string(value, &str_length); rule->app_id = g_strdup(str); - STC_LOGD("app_id: [%s]", (unsigned int) rule->app_id); + STC_LOGD("app_id: [%s]", rule->app_id); } else if (!g_strcmp0(key, "ifname")) { guint str_length; @@ -202,37 +210,53 @@ static void __stc_extract_restriction_rule(const char *key, GVariant *value, rule->iftype = g_variant_get_uint16(value); STC_LOGD("iftype: [%u]", (unsigned int) rule->iftype); - } else if (!g_strcmp0(key, "rcv_limit")) { - rule->rcv_limit = g_variant_get_uint64(value); - STC_LOGD("rcv_limit: [%lld]", rule->rcv_limit); + } else if (!g_strcmp0(key, "data_limit")) { + rule->data_limit = g_variant_get_int64(value); + STC_LOGD("data_limit: [%lld]", rule->data_limit); + + } else if (!g_strcmp0(key, "data_warn_limit")) { + rule->data_warn_limit = g_variant_get_int64(value); + STC_LOGD("data_warn_limit: [%lld]", rule->data_warn_limit); - } else if (!g_strcmp0(key, "send_limit")) { - rule->send_limit = g_variant_get_uint64(value); - STC_LOGD("send_limit: [%lld]", rule->send_limit); + } else if (!g_strcmp0(key, "month_start_date")) { + rule->month_start_date = g_variant_get_int32(value); + STC_LOGD("month_start_date: [%d]", rule->month_start_date); - } else if (!g_strcmp0(key, "rcv_warn_limit")) { - rule->rcv_warn_limit = g_variant_get_uint64(value); - STC_LOGD("rcv_warn_limit: [%lld]", rule->rcv_warn_limit); + } else if (!g_strcmp0(key, "monthly_limit")) { + rule->monthly_limit = g_variant_get_int64(value); + STC_LOGD("monthly_limit: [%lld]", rule->monthly_limit); - } else if (!g_strcmp0(key, "send_warn_limit")) { - rule->send_warn_limit = g_variant_get_uint64(value); - STC_LOGD("send_warn_limit: [%lld]", rule->send_warn_limit); + } else if (!g_strcmp0(key, "weekly_limit")) { + rule->weekly_limit = g_variant_get_int64(value); + STC_LOGD("weekly_limit: [%lld]", rule->weekly_limit); + + } else if (!g_strcmp0(key, "daily_limit")) { + rule->daily_limit = g_variant_get_int64(value); + STC_LOGD("daily_limit: [%lld]", rule->daily_limit); } else if (!g_strcmp0(key, "roaming")) { rule->roaming = g_variant_get_uint16(value); STC_LOGD("roaming: [%u]", rule->roaming); - } else if (!g_strcmp0(key, "imsi")) { + } else if (!g_strcmp0(key, "subscriber_id")) { guint str_length; const gchar *str = g_variant_get_string(value, &str_length); - rule->imsi = g_strdup(str); - STC_LOGD("imsi: [%s]", rule->imsi); + rule->subscriber_id = g_strdup(str); + STC_LOGD("subscriber_id: [%s]", rule->subscriber_id); + + } else if (!g_strcmp0(key, "rstn_type")) { + rule->rstn_type = g_variant_get_uint16(value); + STC_LOGD("type: [%u]", (unsigned int) rule->rstn_type); + + } else if (!g_strcmp0(key, "mac")) { + guint str_length; + const gchar *str = g_variant_get_string(value, &str_length); + rule->mac = g_strdup(str); + STC_LOGD("mac: [%s]", rule->mac); } else { - STC_LOGD("Unknown select rule"); + STC_LOGD("Unknown select rule"); //LCOV_EXCL_LINE } - - __STC_LOG_FUNC_EXIT__; } gboolean handle_restriction_set(StcRestriction *object, @@ -243,6 +267,7 @@ gboolean handle_restriction_set(StcRestriction *object, __STC_LOG_FUNC_ENTER__; GVariantIter *iter = NULL; table_restrictions_info rule; + stc_error_e ret = STC_ERROR_NONE; memset(&rule, 0, sizeof(table_restrictions_info)); __initialize_rstn_rule(&rule); @@ -255,63 +280,28 @@ gboolean handle_restriction_set(StcRestriction *object, g_variant_iter_free(iter); } - rule.rst_state = STC_RESTRICTION_REMOVED; - - if (__validate_rstn_rule(&rule, RST_SET) == FALSE) { - STC_RESTRICTION_DBUS_REPLY_ERROR(invocation, + if (__validate_rstn_rule(&rule) == FALSE) { + STC_RESTRICTION_DBUS_REPLY_ERROR(invocation, //LCOV_EXCL_LINE STC_ERROR_INVALID_PARAMETER); - __STC_LOG_FUNC_EXIT__; + __STC_LOG_FUNC_EXIT__; //LCOV_EXCL_LINE return TRUE; } - table_restrictions_update(&rule); - /* update restriction rule in runtime structure */ - stc_monitor_rstns_tree_add(&rule); - - STC_DBUS_REPLY_ERROR_NONE(invocation); - __STC_LOG_FUNC_EXIT__; - return TRUE; -} - -gboolean handle_restriction_exclude(StcRestriction *object, - GDBusMethodInvocation *invocation, - GVariant *parameters, - void *user_data) -{ - __STC_LOG_FUNC_ENTER__; - GVariantIter *iter = NULL; - table_restrictions_info rule; - - memset(&rule, 0, sizeof(table_restrictions_info)); - __initialize_rstn_rule(&rule); - - g_variant_get(parameters, "a{sv}", &iter); - if (iter != NULL) { - stc_manager_gdbus_dict_foreach(iter, - __stc_extract_restriction_rule, - &rule); - g_variant_iter_free(iter); - } - - rule.rst_state = STC_RESTRICTION_EXCLUDED; - - if (__validate_rstn_rule(&rule, RST_EXCLUDE) == FALSE) { - STC_RESTRICTION_DBUS_REPLY_ERROR(invocation, - STC_ERROR_INVALID_PARAMETER); - __STC_LOG_FUNC_EXIT__; + ret = table_restrictions_update(&rule); + if (ret != STC_ERROR_NONE) { + STC_RESTRICTION_DBUS_REPLY_ERROR(invocation, //LCOV_EXCL_LINE + STC_ERROR_DB_FAILED); + __STC_LOG_FUNC_EXIT__; //LCOV_EXCL_LINE return TRUE; } - table_restrictions_update(&rule); - /* update restriction rule in runtime structure */ - stc_monitor_rstns_tree_add(&rule); - + stc_monitor_rstn_add(&rule); STC_DBUS_REPLY_ERROR_NONE(invocation); __STC_LOG_FUNC_EXIT__; return TRUE; } -gboolean handle_restriction_remove(StcRestriction *object, +gboolean handle_restriction_unset(StcRestriction *object, GDBusMethodInvocation *invocation, GVariant *parameters, void *user_data) @@ -319,6 +309,7 @@ gboolean handle_restriction_remove(StcRestriction *object, __STC_LOG_FUNC_ENTER__; GVariantIter *iter = NULL; table_restrictions_info rule; + stc_error_e ret = STC_ERROR_NONE; memset(&rule, 0, sizeof(table_restrictions_info)); __initialize_rstn_rule(&rule); @@ -331,17 +322,23 @@ gboolean handle_restriction_remove(StcRestriction *object, g_variant_iter_free(iter); } - if (__validate_rstn_rule(&rule, RST_UNSET) == FALSE) { - STC_RESTRICTION_DBUS_REPLY_ERROR(invocation, + if (__validate_rstn_rule(&rule) == FALSE) { + STC_RESTRICTION_DBUS_REPLY_ERROR(invocation, //LCOV_EXCL_LINE STC_ERROR_INVALID_PARAMETER); - __STC_LOG_FUNC_EXIT__; + __STC_LOG_FUNC_EXIT__; //LCOV_EXCL_LINE return TRUE; } - table_restrictions_delete(rule.app_id, rule.iftype, rule.imsi); - /* remove restriction rule from runtime structure */ - stc_monitor_rstns_tree_remove(&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, //LCOV_EXCL_LINE + STC_ERROR_DB_FAILED); + __STC_LOG_FUNC_EXIT__; //LCOV_EXCL_LINE + return TRUE; + } + stc_monitor_rstn_remove(&rule); STC_DBUS_REPLY_ERROR_NONE(invocation); __STC_LOG_FUNC_EXIT__; return TRUE; @@ -363,10 +360,10 @@ gboolean handle_restriction_get(StcRestriction *object, __table_restrictions_per_app_cb, builder); if (ret < STC_ERROR_NONE) { - g_variant_builder_unref(builder); - STC_RESTRICTION_DBUS_REPLY_ERROR(invocation, ret); - __STC_LOG_FUNC_EXIT__; - return TRUE; + g_variant_builder_unref(builder); //LCOV_EXCL_LINE + STC_RESTRICTION_DBUS_REPLY_ERROR(invocation, ret); //LCOV_EXCL_LINE + __STC_LOG_FUNC_EXIT__; //LCOV_EXCL_LINE + return TRUE; //LCOV_EXCL_LINE } return_parameters = g_variant_new("(ia{sv})", STC_ERROR_NONE, builder); @@ -392,10 +389,10 @@ gboolean handle_restriction_get_all(StcRestriction *object, ret = table_restrictions_foreach(__table_restrictions_foreach_app_cb, builder); if (ret < STC_ERROR_NONE) { - g_variant_builder_unref(builder); - STC_RESTRICTION_DBUS_REPLY_ERROR(invocation, ret); - __STC_LOG_FUNC_EXIT__; - return TRUE; + g_variant_builder_unref(builder); //LCOV_EXCL_LINE + STC_RESTRICTION_DBUS_REPLY_ERROR(invocation, ret); //LCOV_EXCL_LINE + __STC_LOG_FUNC_EXIT__; //LCOV_EXCL_LINE + return TRUE; //LCOV_EXCL_LINE } return_parameters = g_variant_new("(iaa{sv})", STC_ERROR_NONE, builder); @@ -407,7 +404,7 @@ gboolean handle_restriction_get_all(StcRestriction *object, return TRUE; } -gboolean handle_restriction_get_state(StcRestriction *object, +gboolean handle_restriction_get_type(StcRestriction *object, GDBusMethodInvocation *invocation, const gchar *app_id, int iftype, @@ -415,17 +412,17 @@ gboolean handle_restriction_get_state(StcRestriction *object, { __STC_LOG_FUNC_ENTER__; GVariant *return_parameters = NULL; - stc_restriction_state_e state = STC_RESTRICTION_UNKNOWN; + stc_rstn_type_e type = STC_RSTN_TYPE_UNKNOWN; stc_error_e ret; - ret = table_restrictions_get_restriction_state(app_id, iftype, &state); + ret = table_restrictions_get_restriction_type(app_id, iftype, &type); if (ret < STC_ERROR_NONE) { - STC_RESTRICTION_DBUS_REPLY_ERROR(invocation, ret); - __STC_LOG_FUNC_EXIT__; + STC_RESTRICTION_DBUS_REPLY_ERROR(invocation, ret); //LCOV_EXCL_LINE + __STC_LOG_FUNC_EXIT__; //LCOV_EXCL_LINE return TRUE; } - return_parameters = g_variant_new("(ii)", STC_ERROR_NONE, state); + return_parameters = g_variant_new("(ii)", STC_ERROR_NONE, type); STC_DBUS_REPLY(invocation, return_parameters); __STC_LOG_FUNC_EXIT__; return TRUE;