switch (rst_type) {
case RST_SET:
+ if (effective_data_limit <= 0) {
+ char *default_ifname = stc_default_connection_get_ifname();
+ struct nfacct_rule counter;
+ stc_s *stc = stc_get_manager();
+
+ if (!stc->carg) {
+ stc->carg = MALLOC0(counter_arg_s, 1);
+ stc->carg->sock =
+ stc_monitor_get_counter_socket();
+ }
+
+ counter.carg = stc->carg;
+ counter.classid = rstn_value->classid;
+ counter.intend = NFACCT_BLOCK;
+ counter.iftype = STC_IFACE_UNKNOWN;
+ g_strlcpy(counter.ifname, default_ifname,
+ MAX_IFACE_LENGTH);
+
+ generate_counter_name(&counter);
+ g_free(default_ifname);
+
+ /* iptables rule */
+ __add_iptables_in(&counter);
+ __add_iptables_out(&counter);
+ }
+
rstn_value->rst_state = STC_RESTRICTION_ACTIVATED;
rstn_value->data_limit_reached = FALSE;
break;
;//Do Nothing
break;
case RST_UNSET:
- rstn_value->rst_state = STC_RESTRICTION_REMOVED;
- rstn_value->data_limit_reached = FALSE;
+ {
+ char *default_ifname = stc_default_connection_get_ifname();
+ struct nfacct_rule counter;
+ stc_s *stc = stc_get_manager();
+
+ if (!stc->carg) {
+ stc->carg = MALLOC0(counter_arg_s, 1);
+ stc->carg->sock =
+ stc_monitor_get_counter_socket();
+ }
+
+ counter.carg = stc->carg;
+ counter.classid = rstn_value->classid;
+ counter.intend = NFACCT_BLOCK;
+ counter.iftype = STC_IFACE_UNKNOWN;
+ g_strlcpy(counter.ifname, default_ifname,
+ MAX_IFACE_LENGTH);
+
+ generate_counter_name(&counter);
+ g_free(default_ifname);
+
+ /* iptables rule */
+ __del_iptables_in(&counter);
+ __del_iptables_out(&counter);
+
+ rstn_value->rst_state = STC_RESTRICTION_REMOVED;
+ rstn_value->data_limit_reached = FALSE;
+ }
break;
default:
;//Do Nothing