Fix the gcov build error
[platform/core/api/tethering.git] / include / tethering_private.h
1 /*
2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
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 __TETHERING_PRIVATE_H__
18 #define __TETHERING_PRIVATE_H__
19
20 #define LOG_TAG "CAPI_NETWORK_TETHERING"
21
22 #include <glib.h>
23 #include <dlog.h>
24 #include <gio/gio.h>
25 #include "tethering.h"
26
27 #ifdef __cplusplus
28 extern "C" {
29 #endif
30
31 #ifndef API
32 #define API __attribute__ ((visibility("default")))
33 #endif
34
35 #ifndef DEPRECATED_API
36 #define DEPRECATED_API __attribute__ ((deprecated))
37 #endif
38
39 #define INFO(fmt, args...)      LOGI(fmt, ##args)
40 #define DBG(fmt, args...)       LOGD(fmt, ##args)
41 #define WARN(fmt, args...)      LOGW(fmt, ##args)
42 #define ERR(fmt, args...)       LOGE(fmt, ##args)
43 #define SINFO(fmt, args...)     SECURE_LOGI(fmt, ##args)
44 #define SDBG(fmt, args...)      SECURE_LOGD(fmt, ##args)
45 #define SERR(fmt, args...)      SECURE_LOGE(fmt, ##args)
46
47 #define _warn_if(expr, fmt, arg...) do { \
48                 if (expr) { \
49                         WARN(fmt, ##arg); \
50                 } \
51         } while (0)
52
53 #define _ret_if(expr) do { \
54                 if (expr) { \
55                         return; \
56                 } \
57         } while (0)
58
59 #define _retv_if(expr, val) do { \
60                 if (expr) { \
61                         return (val); \
62                 } \
63         } while (0)
64
65 #define _retm_if(expr, fmt, arg...) do { \
66                 if (expr) { \
67                         ERR(fmt, ##arg); \
68                         return; \
69                 } \
70         } while (0)
71
72 #define _retvm_if(expr, val, fmt, arg...) do { \
73                 if (expr) { \
74                         ERR(fmt, ##arg); \
75                         return (val); \
76                 } \
77         } while (0)
78
79 /**
80  * To lock and unlock Mutex
81  */
82
83 #define TETHERING_LOCK \
84         do { \
85                 _tethering_lock(); \
86         } while(0)
87
88 #define TETHERING_UNLOCK \
89         do { \
90                 _tethering_unlock(); \
91         } while(0)
92
93 void _tethering_lock(void);
94 void _tethering_unlock(void);
95
96 /**
97  * To check supported feature
98  */
99
100 #define TETHERING_FEATURE               "http://tizen.org/feature/network.tethering"
101 #define TETHERING_BT_FEATURE            "http://tizen.org/feature/network.tethering.bluetooth"
102 #define TETHERING_USB_FEATURE           "http://tizen.org/feature/network.tethering.usb"
103 #define TETHERING_WIFI_FEATURE          "http://tizen.org/feature/network.tethering.wifi"
104
105 typedef enum {
106         TETHERING_SUPPORTED_FEATURE,
107         TETHERING_SUPPORTED_FEATURE_WIFI,
108         TETHERING_SUPPORTED_FEATURE_BT,
109         TETHERING_SUPPORTED_FEATURE_USB,
110         TETHERING_SUPPORTED_FEATURE_MAX,
111 } tethering_supported_feature_e;
112
113 #define CHECK_FEATURE_SUPPORTED(...) \
114         do { \
115                 int rv = _tethering_check_feature_supported(__VA_ARGS__, NULL); \
116                 if (rv != TETHERING_ERROR_NONE) { \
117                         return rv; \
118                 } \
119         } while (0)
120
121 int _tethering_check_feature_supported(const char* feature, ...);
122
123 /**
124 * Start of mobileap-agent common values
125 * When these values are changed, mobileap-agent should be also changed.
126 * But some of those will be removed.
127 */
128
129 /*
130 * from mobileap_lib.h
131 */
132
133 /**
134 * Common configuration
135 */
136 #define TETHERING_STR_INFO_LEN  40      /**< length of the ip or mac address */
137 #define TETHERING_IPV4_ADDRESS_MAX_LEN  15      /**< Maximum length of IP address */
138 #define TETHERING_IPV4_ADDRESS_MIN_LEN  7       /**< Minimum length of IP address */
139
140
141 /**
142 * Mobile AP error code
143 */
144 typedef enum {
145         MOBILE_AP_ERROR_NONE,                   /**< No error */
146         MOBILE_AP_ERROR_RESOURCE,               /**< Socket creation error, file open error */
147         MOBILE_AP_ERROR_INTERNAL,               /**< Driver related error */
148         MOBILE_AP_ERROR_INVALID_PARAM,          /**< Invalid parameter */
149         MOBILE_AP_ERROR_ALREADY_ENABLED,        /**< Mobile AP is already ON */
150         MOBILE_AP_ERROR_NOT_ENABLED,            /**< Mobile AP is not ON, so cannot be disabled */
151         MOBILE_AP_ERROR_NET_OPEN,               /**< PDP network open error */
152         MOBILE_AP_ERROR_NET_CLOSE,              /**< PDP network close error */
153         MOBILE_AP_ERROR_DHCP,                   /**< DHCP error */
154         MOBILE_AP_ERROR_IN_PROGRESS,            /**< Request is in progress */
155         MOBILE_AP_ERROR_NOT_PERMITTED,          /**< Operation is not permitted */
156         MOBILE_AP_ERROR_PERMISSION_DENIED,  /**< Permission Denied */
157
158         MOBILE_AP_ERROR_MAX
159 } mobile_ap_error_code_e;
160
161 /**
162 * Event type on callback
163 */
164 typedef enum {
165         MOBILE_AP_ENABLE_CFM,
166         MOBILE_AP_DISABLE_CFM,
167
168         MOBILE_AP_ENABLE_WIFI_TETHERING_CFM,
169         MOBILE_AP_DISABLE_WIFI_TETHERING_CFM,
170         MOBILE_AP_CHANGE_WIFI_CONFIG_CFM,
171
172         MOBILE_AP_ENABLE_USB_TETHERING_CFM,
173         MOBILE_AP_DISABLE_USB_TETHERING_CFM,
174
175         MOBILE_AP_ENABLE_BT_TETHERING_CFM,
176         MOBILE_AP_DISABLE_BT_TETHERING_CFM,
177
178         MOBILE_AP_ENABLE_P2P_TETHERING_CFM,
179         MOBILE_AP_DISABLE_P2P_TETHERING_CFM,
180
181         MOBILE_AP_GET_STATION_INFO_CFM,
182         MOBILE_AP_GET_DATA_PACKET_USAGE_CFM
183 } mobile_ap_event_e;
184
185 typedef enum {
186         MOBILE_AP_TYPE_WIFI,
187         MOBILE_AP_TYPE_USB,
188         MOBILE_AP_TYPE_BT,
189         MOBILE_AP_TYPE_P2P,
190         MOBILE_AP_TYPE_MAX,
191 } mobile_ap_type_e;
192
193 typedef enum {
194         E_SIGNAL_NET_CLOSED = 0,
195         E_SIGNAL_WIFI_TETHER_ON,
196         E_SIGNAL_WIFI_TETHER_OFF,
197         E_SIGNAL_P2P_TETHER_ON,
198         E_SIGNAL_P2P_TETHER_OFF,
199         E_SIGNAL_USB_TETHER_ON,
200         E_SIGNAL_USB_TETHER_OFF,
201         E_SIGNAL_BT_TETHER_ON,
202         E_SIGNAL_BT_TETHER_OFF,
203         E_SIGNAL_NO_DATA_TIMEOUT,
204         E_SIGNAL_LOW_BATTERY_MODE,
205         E_SIGNAL_FLIGHT_MODE,
206         E_SIGNAL_SECURITY_TYPE_CHANGED,
207         E_SIGNAL_SSID_VISIBILITY_CHANGED,
208         E_SIGNAL_PASSPHRASE_CHANGED,
209         E_SIGNAL_DHCP_STATUS,
210         E_SIGNAL_MAX
211 } mobile_ap_sig_e;
212
213 #define TETHERING_SERVICE_OBJECT_PATH   "/MobileapAgent"
214 #define TETHERING_SERVICE_NAME          "org.tizen.MobileapAgent"
215 #define TETHERING_SERVICE_INTERFACE     "org.tizen.tethering"
216
217 #define TETHERING_SIGNAL_MATCH_RULE     "type='signal',interface='org.tizen.tethering'"
218 #define TETHERING_SIGNAL_NAME_LEN       64
219
220 #define SIGNAL_NAME_NET_CLOSED          "net_closed"
221 #define SIGNAL_NAME_STA_CONNECT         "sta_connected"
222 #define SIGNAL_NAME_STA_DISCONNECT      "sta_disconnected"
223 #define SIGNAL_NAME_WIFI_TETHER_ON      "wifi_on"
224 #define SIGNAL_NAME_WIFI_TETHER_OFF     "wifi_off"
225 #define SIGNAL_NAME_P2P_TETHER_ON   "p2p_on"
226 #define SIGNAL_NAME_P2P_TETHER_OFF  "p2p_off"
227 #define SIGNAL_NAME_USB_TETHER_ON       "usb_on"
228 #define SIGNAL_NAME_USB_TETHER_OFF      "usb_off"
229 #define SIGNAL_NAME_BT_TETHER_ON        "bluetooth_on"
230 #define SIGNAL_NAME_BT_TETHER_OFF       "bluetooth_off"
231 #define SIGNAL_NAME_NO_DATA_TIMEOUT     "no_data_timeout"
232 #define SIGNAL_NAME_LOW_BATTERY_MODE    "low_batt_mode"
233 #define SIGNAL_NAME_FLIGHT_MODE         "flight_mode"
234 #define SIGNAL_NAME_SECURITY_TYPE_CHANGED       "security_type_changed"
235 #define SIGNAL_NAME_SSID_VISIBILITY_CHANGED     "ssid_visibility_changed"
236 #define SIGNAL_NAME_PASSPHRASE_CHANGED          "passphrase_changed"
237 #define SIGNAL_NAME_DHCP_STATUS         "dhcp_status"
238
239 #define SIGNAL_MSG_NOT_AVAIL_INTERFACE  "Interface is not available"
240 #define SIGNAL_MSG_TIMEOUT              "There is no connection for a while"
241 #define SIGNAL_MSG_SSID_VISIBLE         "ssid_visible"
242 #define SIGNAL_MSG_SSID_HIDE            "ssid_hide"
243
244 /* Network Interface */
245 #define TETHERING_SUBNET_MASK           "255.255.255.0"
246
247 #define TETHERING_USB_IF                "usb0"
248 #define TETHERING_USB_GATEWAY           "192.168.129.1"
249
250 #define TETHERING_WIFI_IF               "wlan0"
251 #define TETHERING_WIFI_GATEWAY          "192.168.43.1"
252
253 #define TETHERING_BT_IF                 "bnep0"
254 #define TETHERING_BT_GATEWAY            "192.168.130.1"
255
256 #define TETHERING_P2P_IF                "p2p0"
257 #define TETHERING_P2P_GATEWAY           "192.168.49.1"
258
259 #define TETHERING_WIFI_SSID_MAX_LEN     32      /**< Maximum length of ssid */
260 #define TETHERING_WIFI_KEY_MIN_LEN      8       /**< Minimum length of wifi key */
261 #define TETHERING_WIFI_KEY_MAX_LEN      64      /**< Maximum length of wifi key */
262 #define TETHERING_WIFI_HASH_KEY_MAX_LEN 64
263 #define TETHERING_WIFI_MAX_STA 10               /**< Maximum Wi-Fi tethering station */
264 #define TETHERING_WIFI_MAX_TXPOWER      100           /**< Default max TX POWER */
265
266 #define TETHERING_WIFI_MODE_MAX_LEN 10  /**< Maximum length of mode */
267
268 #define VCONFKEY_MOBILE_HOTSPOT_SSID    "memory/private/mobileap-agent/ssid"
269 #define TETHERING_PASSPHRASE_PATH       "wifi_tethering.txt"
270 #define TETHERING_WIFI_PASSPHRASE_STORE_KEY "tethering_wifi_passphrase"
271 #define MAX_ALIAS_LEN   256
272
273 /**
274 * End of mobileap-agent common values
275 */
276
277 #define TETHERING_DEFAULT_SSID  "Tizen"
278 #define TETHERING_WIFI_CHANNEL  6
279 #define TETHERING_WIFI_SECURITY_TYPE_OPEN_STR           "open"
280 #define TETHERING_WIFI_SECURITY_TYPE_WPA2_PSK_STR       "wpa2-psk"
281 #define TETHERING_WIFI_SECURITY_TYPE_WPS_STR    "wps"
282 #define TETHERING_WIFI_SECURITY_TYPE_SAE_STR    "sae"
283 #define TETHERING_ERROR_RECOVERY_MAX                    3
284 #define SECURITY_TYPE_LEN       32
285 #define PSK_ITERATION_COUNT     4096
286
287 typedef void (*__handle_cb_t)(GDBusConnection *connection, const gchar *sender_name,
288                 const gchar *object_path, const gchar *interface_name, const gchar *signal_name,
289                 GVariant *parameters, gpointer user_data);
290
291 typedef struct {
292         int sig_id;
293         char name[TETHERING_SIGNAL_NAME_LEN];
294         __handle_cb_t cb;
295 } __tethering_sig_t;
296
297 typedef struct {
298         GDBusConnection *client_bus;
299         GDBusProxy *client_bus_proxy;
300         GCancellable *cancellable;
301
302         tethering_enabled_cb enabled_cb[TETHERING_TYPE_MAX];
303         void *enabled_user_data[TETHERING_TYPE_MAX];
304         tethering_disabled_cb disabled_cb[TETHERING_TYPE_MAX];
305         void *disabled_user_data[TETHERING_TYPE_MAX];
306         tethering_connection_state_changed_cb changed_cb[TETHERING_TYPE_MAX];
307         void *changed_user_data[TETHERING_TYPE_MAX];
308         tethering_data_usage_cb data_usage_cb;
309         void *data_usage_user_data;
310         tethering_wifi_security_type_changed_cb security_type_changed_cb;
311         void *security_type_user_data;
312         tethering_wifi_ssid_visibility_changed_cb ssid_visibility_changed_cb;
313         void *ssid_visibility_user_data;
314         tethering_wifi_passphrase_changed_cb passphrase_changed_cb;
315         void *passphrase_user_data;
316         tethering_wifi_settings_reloaded_cb settings_reloaded_cb;
317         void *settings_reloaded_user_data;
318         char *ssid;
319         char passphrase[TETHERING_WIFI_KEY_MAX_LEN + 1];
320         tethering_wifi_security_type_e sec_type;
321         tethering_wifi_mode_type_e mode_type;
322         char ip_address[TETHERING_IPV4_ADDRESS_MAX_LEN + 1];
323         bool visibility;
324         bool mac_filter;
325         bool port_forwarding;
326         bool port_filtering;
327         bool dhcp_enabled;
328         bool wifi_sharing;
329         int channel;
330         int wifi_max_connected;
331         unsigned int txpower;
332 } __tethering_h;
333
334 typedef struct {
335         tethering_type_e interface;                     /**< interface type */
336         char ip[TETHERING_STR_INFO_LEN];                /**< assigned IP address */
337         char mac[TETHERING_STR_INFO_LEN];               /**< MAC Address */
338         char *hostname;
339         time_t tm;      /**< connection time */
340         tethering_band_e band;                  /**< wifi band type */
341 } __tethering_client_h;
342
343 typedef struct {
344         tethering_type_e interface;                     /**< interface type */
345         char interface_name[TETHERING_STR_INFO_LEN];    /**< interface alphanumeric name */
346         char ip_address[TETHERING_STR_INFO_LEN];        /**< assigned ip addresss to interface */
347         char gateway_address[TETHERING_STR_INFO_LEN];   /**< gateway address of interface */
348         char subnet_mask[TETHERING_STR_INFO_LEN];       /**< subnet mask of interface */
349 } __tethering_interface_t;
350
351 typedef struct {
352         char ssid[TETHERING_WIFI_SSID_MAX_LEN + 1];
353         char key[TETHERING_WIFI_KEY_MAX_LEN + 1];
354         char mode[TETHERING_WIFI_MODE_MAX_LEN + 1];
355         char ip_address[TETHERING_IPV4_ADDRESS_MAX_LEN + 1];
356         tethering_wifi_security_type_e sec_type;
357         bool visibility;
358         bool mac_filter;
359         int max_connected;
360         int channel;
361         unsigned int txpower;
362 } _softap_settings_t;
363
364 void _tethering_add_handle(tethering_h handle);
365 void _tethering_remove_handle(tethering_h handle);
366 bool _tethering_check_handle(tethering_h handle);
367
368 #ifdef __cplusplus
369 }
370 #endif
371
372 #endif /* __TETHERING_PRIVATE_H__ */