2 * Copyright (c) 2016 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #ifndef __STC_MONITOR_H__
18 #define __STC_MONITOR_H__
21 #include "stc-error.h"
22 #include "stc-manager.h"
23 #include "stc-restriction.h"
24 #include "stc-manager-util.h"
25 #include "table-restrictions.h"
26 #include "helper-nl.h"
29 #define CONTR_TIMER_INTERVAL 1
30 #define IPV4_IPADDRESS_LEN 16
33 * @brief enumeration for data limit types
36 STC_RSTN_LIMIT_TYPE_DATA_WARN,
37 STC_RSTN_LIMIT_TYPE_DATA,
38 STC_RSTN_LIMIT_TYPE_MONTHLY,
39 STC_RSTN_LIMIT_TYPE_WEEKLY,
40 STC_RSTN_LIMIT_TYPE_DAILY,
41 STC_RSTN_LIMIT_TYPE_MAX
42 } stc_rstn_limit_type_e;
45 STC_RSTN_STATE_INIT = -1,
48 } stc_rstn_noti_state_e;
51 * @brief key for processes tree
54 stc_app_state_e ground; /**< application state foreground/background */
55 } stc_process_value_s;
58 * @brief value for processes tree
61 pid_t pid; /**< process id */
65 * @brief key for apps tree
68 gchar *pkg_id; /**< package id */
69 gchar *app_id; /**< application id */
73 * @brief value for apps tree
76 uint32_t classid; /**< classid for a package */
77 stc_app_type_e type; /**< type of application */
78 stc_data_counter_s data_usage;
79 stc_data_counter_s counter;
80 GTree *processes; /**< applications instances */
81 char ipaddr[IPV4_IPADDRESS_LEN+1]; /**< application ip address */
85 * @brief key for rstn_rules tree
91 stc_iface_type_e iftype;
92 stc_roaming_type_e roaming;
96 * @brief value for rstn_rules tree
99 uint64_t restriction_id;
101 stc_rstn_state_e rstn_state;
102 stc_rstn_type_e rstn_type;
104 int64_t counter[STC_RSTN_LIMIT_TYPE_MAX];
105 int64_t limit[STC_RSTN_LIMIT_TYPE_MAX];
106 int32_t limit_exceeded;
107 int32_t limit_notified;
109 int month_start_date;
110 time_t month_start_ts;
114 * @brief structure to store system info
117 int contr_sock; /**< socket used for getting kernel counters */
118 guint contr_timer_id; /**< timer id for periodically getting kernel counters */
119 guint contr_gsource_id;
120 stc_data_counter_s du_curr; /**< current data usage */
121 GTree *rstns; /**< restriction rules */
122 gboolean rstns_tree_updated;
123 GTree *apps; /**< monitored applications */
124 gboolean apps_tree_updated;
125 guint background_state;
126 time_t last_month_ts;
129 int month_start_date;
133 * @brief initializes stc monitor module
135 stc_error_e stc_monitor_init(void);
138 * @brief deinitializes stc monitor module
140 stc_error_e stc_monitor_deinit(void);
143 * @brief creates an application entry
145 stc_error_e stc_monitor_application_add(const stc_app_key_s app_key,
146 const stc_app_value_s app_value);
149 * @brief deletes an application entry
151 stc_error_e stc_monitor_application_remove(const stc_app_key_s app_key);
154 * @brief associates process to an application
156 stc_error_e stc_monitor_process_add(const stc_app_key_s app_key,
157 const stc_process_key_s proc_key,
158 const stc_process_value_s proc_value);
161 * @brief removes associated process from respective application
163 stc_error_e stc_monitor_process_remove(pid_t pid);
166 * @brief updates process's ground attribute
168 stc_error_e stc_monitor_process_update_ground(const stc_app_key_s app_key,
169 const stc_process_key_s proc_key,
170 stc_app_state_e ground);
172 void stc_monitor_update_rstn_by_default_connection(void *default_connection);
174 stc_error_e stc_monitor_rstns_tree_add(const table_restrictions_info *info);
176 stc_error_e stc_monitor_rstns_tree_remove(const table_restrictions_info *info);
178 stc_error_e stc_monitor_check_excn_by_cmdline(char *cmdline);
180 int stc_monitor_get_counter_socket(void);
182 #endif /* __STC_MONITOR_H__ */