static void __print_rstn(stc_rstn_data_s *rstn_data)
{
- STC_LOGI("RstnID[%llu] AppID[%s] classid[%u] "
- "iftype[%d] ifname[%s] rstn_state[%d] "
- "rstn_type[%d] roaming[%d] subscriber_id[%s]",
- rstn_data->restriction_id,
- rstn_data->app_id, rstn_data->classid,
- rstn_data->iftype, rstn_data->ifname,
- rstn_data->rstn_state, rstn_data->rstn_type,
- rstn_data->roaming, rstn_data->subscriber_id);
- STC_LOGI("month_start_date[%d] limit[%lld] "
- "warn_limit[%lld] monthly_limit[%lld] "
- "weekly_limit[%lld] daily_limit[%lld] ",
- rstn_data->month_start_date,
- rstn_data->limit[STC_RSTN_LIMIT_TYPE_DATA],
- rstn_data->limit[STC_RSTN_LIMIT_TYPE_DATA_WARN],
- rstn_data->limit[STC_RSTN_LIMIT_TYPE_MONTHLY],
- rstn_data->limit[STC_RSTN_LIMIT_TYPE_WEEKLY],
- rstn_data->limit[STC_RSTN_LIMIT_TYPE_DAILY]);
- STC_LOGI("data_counter[%lld] warn_counter[%lld] "
- "monthly_counter[%lld] weekly_counter[%lld] "
- "daily_counter[%lld]",
- rstn_data->counter[STC_RSTN_LIMIT_TYPE_DATA],
- rstn_data->counter[STC_RSTN_LIMIT_TYPE_DATA_WARN],
- rstn_data->counter[STC_RSTN_LIMIT_TYPE_MONTHLY],
- rstn_data->counter[STC_RSTN_LIMIT_TYPE_WEEKLY],
- rstn_data->counter[STC_RSTN_LIMIT_TYPE_DAILY]);
+ if (STC_DEBUG_LOG && STC_RSTN_LOG) {
+ STC_LOGI("RstnID[%llu] AppID[%s] classid[%u] "
+ "iftype[%d] ifname[%s] rstn_state[%d] "
+ "rstn_type[%d] roaming[%d] subscriber_id[%s]",
+ rstn_data->restriction_id,
+ rstn_data->app_id, rstn_data->classid,
+ rstn_data->iftype, rstn_data->ifname,
+ rstn_data->rstn_state, rstn_data->rstn_type,
+ rstn_data->roaming, rstn_data->subscriber_id);
+ STC_LOGI("month_start_date[%d] limit[%lld] "
+ "warn_limit[%lld] monthly_limit[%lld] "
+ "weekly_limit[%lld] daily_limit[%lld] ",
+ rstn_data->month_start_date,
+ rstn_data->limit[STC_RSTN_LIMIT_TYPE_DATA],
+ rstn_data->limit[STC_RSTN_LIMIT_TYPE_DATA_WARN],
+ rstn_data->limit[STC_RSTN_LIMIT_TYPE_MONTHLY],
+ rstn_data->limit[STC_RSTN_LIMIT_TYPE_WEEKLY],
+ rstn_data->limit[STC_RSTN_LIMIT_TYPE_DAILY]);
+ STC_LOGI("data_counter[%lld] warn_counter[%lld] "
+ "monthly_counter[%lld] weekly_counter[%lld] "
+ "daily_counter[%lld]",
+ rstn_data->counter[STC_RSTN_LIMIT_TYPE_DATA],
+ rstn_data->counter[STC_RSTN_LIMIT_TYPE_DATA_WARN],
+ rstn_data->counter[STC_RSTN_LIMIT_TYPE_MONTHLY],
+ rstn_data->counter[STC_RSTN_LIMIT_TYPE_WEEKLY],
+ rstn_data->counter[STC_RSTN_LIMIT_TYPE_DAILY]);
+ }
}
static int __vconf_get_int(const char *key, int *value)
if (conn == NULL || conn->ifname == NULL)
continue;
+ connection = conn;
+
if (rstn_data->ifname != NULL &&
g_strcmp0(rstn_data->ifname, "") != 0 &&
- g_strcmp0(conn->ifname, rstn_data->ifname) == 0 &&
- g_strcmp0(conn->tether_iface.ifname, rstn_data->ifname) == 0)
- connection = conn;
+ g_strcmp0(conn->ifname, rstn_data->ifname) != 0)
+ connection = NULL;
}
if (connection == NULL)
rstn_data->app_id, rstn_data, user_data);
}
- if (STC_DEBUG_LOG && STC_RSTN_LOG) {
- __print_rstn(rstn_data);
+ __print_rstn(rstn_data);
+
+ if (STC_DEBUG_LOG && STC_RSTN_LOG)
STC_LOGD("\033[1;32mRestriction added\033[0;m "
"[\033[1;36m%d\033[0;m:\033[1;35m%lld\033[0;m]",
rstn_data->classid, rstn_data->restriction_id);
- }
}
static void __rstn_add_by_connection(gpointer key,
__rstn_tethering_process(RST_UNSET,
rstn_data->app_id, rstn_data, user_data);
- if (STC_DEBUG_LOG && STC_RSTN_LOG) {
- __print_rstn(rstn_data);
+ __print_rstn(rstn_data);
+
+ if (STC_DEBUG_LOG && STC_RSTN_LOG)
STC_LOGD("\033[1;31mRestriction removed\033[0;m "
"[\033[1;36m%d\033[0;m:\033[1;35m%lld\033[0;m]",
rstn_data->classid, rstn_data->restriction_id);
- }
}
static void __rstn_remove_by_connection(gpointer key,
return -1;
}
+static void __rstn_foreach_print(gpointer data, gpointer user_data)
+{
+ stc_rstn_data_s *rstn_data = (stc_rstn_data_s *)data;
+ __print_rstn(rstn_data);
+}
+
static stc_error_e __rstn_data_remove(stc_rstn_data_s *data)
{
stc_rstn_value_s *lookup_value;
lookup_data);
__rstn_data_destroy(lookup_data);
+ g_slist_foreach(lookup_value->rules, __rstn_foreach_print, NULL);
+
if (!lookup_value->rules)
g_hash_table_remove(rstns, GUINT_TO_POINTER(data->classid));
stc_rstn_value_s *lookup_value;
stc_rstn_value_s *rstn_value;
stc_rstn_data_s *rstn_data;
+ GSList *lookup_list;
GHashTable *rstns = stc_monitor_get_system_rstns();
if (!rstns)
return STC_ERROR_NO_DATA;
- rstn_data = MALLOC0(stc_rstn_data_s, 1);
- if (!rstn_data) {
- if (STC_DEBUG_LOG && STC_RSTN_LOG)
- STC_LOGE("Rstn_data allocation failed");
- return STC_ERROR_OUT_OF_MEMORY;
- }
-
lookup_value = g_hash_table_lookup(rstns, GUINT_TO_POINTER(data->classid));
if (!lookup_value) {
rstn_value = MALLOC0(stc_rstn_value_s, 1);
if (!rstn_value) {
if (STC_DEBUG_LOG && STC_RSTN_LOG)
STC_LOGE("Rstn_value allocation failed");
- FREE(rstn_data);
return STC_ERROR_OUT_OF_MEMORY;
}
rstn_value = lookup_value;
}
+ lookup_list = g_slist_find_custom(rstn_value->rules,
+ data, __rstn_data_comp);
+ if (!lookup_list) {
+ rstn_data = MALLOC0(stc_rstn_data_s, 1);
+ if (!rstn_data) {
+ if (STC_DEBUG_LOG && STC_RSTN_LOG)
+ STC_LOGE("Rstn_data allocation failed");
+ return STC_ERROR_OUT_OF_MEMORY;
+ }
+
+ rstn_value->rules = g_slist_append(rstn_value->rules, rstn_data);
+ } else {
+ rstn_data = lookup_list->data;
+ }
+
rstn_data->classid = data->classid;
+ FREE(rstn_data->app_id);
rstn_data->app_id = g_strdup(data->app_id);
rstn_data->iftype = data->iftype;
+ FREE(rstn_data->ifname);
rstn_data->ifname = g_strdup(data->ifname);
+ FREE(rstn_data->subscriber_id);
rstn_data->subscriber_id = g_strdup(data->subscriber_id);
rstn_data->roaming = data->roaming;
+ FREE(rstn_data->mac);
rstn_data->mac = g_strdup(data->mac);
rstn_data->restriction_id = data->restriction_id;
rstn_data->month_start_date = data->month_start_date;
rstn_data->month_start_ts = data->month_start_ts;
- __rstn_data_remove(rstn_data);
- rstn_value->rules = g_slist_append(rstn_value->rules, rstn_data);
-
__rstn_add(rstn_data, NULL);
+ g_slist_foreach(rstn_value->rules, __rstn_foreach_print, NULL);
+
return STC_ERROR_NONE;
}