187035f27c0732966629e03ec6260d597728fc4f
[platform/core/connectivity/stc-manager.git] / src / monitor / include / stc-monitor.h
1 /*
2  * Copyright (c) 2016 Samsung Electronics Co., Ltd.
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 #ifndef __STC_MONITOR_H__
18 #define __STC_MONITOR_H__
19
20 #include <glib.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"
27
28 /* 1 seconds */
29 #define CONTR_TIMER_INTERVAL 1
30 #define IPV4_IPADDRESS_LEN 16
31
32 /**
33  * @brief enumeration for data limit types
34  */
35 typedef enum {
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;
43
44 typedef enum {
45         STC_RSTN_STATE_INIT = -1,
46         STC_RSTN_STATE_UNSET,
47         STC_RSTN_STATE_SET,
48 } stc_rstn_noti_state_e;
49
50 /**
51  * @brief key for processes tree
52  */
53 typedef struct {
54         stc_app_state_e ground;  /**< application state foreground/background */
55 } stc_process_value_s;
56
57 /**
58  * @brief value for processes tree
59  */
60 typedef struct {
61         pid_t pid;  /**< process id */
62 } stc_process_key_s;
63
64 /**
65  * @brief key for apps tree
66  */
67 typedef struct {
68         gchar *pkg_id;  /**< package id */
69         gchar *app_id;  /**< application id */
70 } stc_app_key_s;
71
72 /**
73  * @brief value for apps tree
74  */
75 typedef struct {
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 */
82 } stc_app_value_s;
83
84 /**
85  * @brief key for rstn_rules tree
86  */
87 typedef struct {
88         gchar *app_id;
89         gchar *ifname;
90         gchar *subscriber_id;
91         stc_iface_type_e iftype;
92         stc_roaming_type_e roaming;
93 } stc_rstn_key_s;
94
95 /**
96  * @brief value for rstn_rules tree
97  */
98 typedef struct {
99         uint64_t restriction_id;
100         uint32_t classid;
101         stc_rstn_state_e rstn_state;
102         stc_rstn_type_e rstn_type;
103
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;
108
109         int month_start_date;
110         time_t month_start_ts;
111 } stc_rstn_value_s;
112
113 /**
114  * @brief structure to store system info
115  */
116 typedef struct {
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;
127         time_t last_week_ts;
128         time_t last_day_ts;
129         int month_start_date;
130 } stc_system_s;
131
132 /**
133  * @brief initializes stc monitor module
134  */
135 stc_error_e stc_monitor_init(void);
136
137 /**
138  * @brief deinitializes stc monitor module
139  */
140 stc_error_e stc_monitor_deinit(void);
141
142 /**
143  * @brief creates an application entry
144  */
145 stc_error_e stc_monitor_application_add(const stc_app_key_s app_key,
146                                         const stc_app_value_s app_value);
147
148 /**
149  * @brief deletes an application entry
150  */
151 stc_error_e stc_monitor_application_remove(const stc_app_key_s app_key);
152
153 /**
154  * @brief associates process to an application
155  */
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);
159
160 /**
161  * @brief removes associated process from respective application
162  */
163 stc_error_e stc_monitor_process_remove(pid_t pid);
164
165 /**
166  * @brief updates process's ground attribute
167  */
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);
171
172 void stc_monitor_update_rstn_by_default_connection(void *default_connection);
173
174 stc_error_e stc_monitor_rstns_tree_add(const table_restrictions_info *info);
175
176 stc_error_e stc_monitor_rstns_tree_remove(const table_restrictions_info *info);
177
178 stc_error_e stc_monitor_check_excn_by_cmdline(char *cmdline);
179
180 int stc_monitor_get_counter_socket(void);
181
182 #endif /* __STC_MONITOR_H__ */