Fix the gcov build error
[platform/core/api/tethering.git] / include / tethering_private.h
index 56e55ac..b6a36c2 100644 (file)
 #ifndef __TETHERING_PRIVATE_H__
 #define __TETHERING_PRIVATE_H__
 
-#define LOG_TAG        "tethering"
+#define LOG_TAG        "CAPI_NETWORK_TETHERING"
 
 #include <glib.h>
-#include <dbus/dbus-glib.h>
 #include <dlog.h>
-
+#include <gio/gio.h>
 #include "tethering.h"
 
 #ifdef __cplusplus
@@ -34,12 +33,16 @@ extern "C" {
 #endif
 
 #ifndef DEPRECATED_API
-#  define DEPRECATED_API __attribute__ ((deprecated))
+#define DEPRECATED_API __attribute__ ((deprecated))
 #endif
 
-#define DBG(fmt, args...) LOGD("[%s()][Ln:%d] "fmt, __func__, __LINE__, ##args)
-#define WARN(fmt, args...) LOGW("[%s()][Ln:%d] "fmt, __func__, __LINE__, ##args)
-#define ERR(fmt, args...) LOGE("[%s()][Ln:%d] "fmt, __func__, __LINE__, ##args)
+#define INFO(fmt, args...)     LOGI(fmt, ##args)
+#define DBG(fmt, args...)      LOGD(fmt, ##args)
+#define WARN(fmt, args...)     LOGW(fmt, ##args)
+#define ERR(fmt, args...)      LOGE(fmt, ##args)
+#define SINFO(fmt, args...)    SECURE_LOGI(fmt, ##args)
+#define SDBG(fmt, args...)     SECURE_LOGD(fmt, ##args)
+#define SERR(fmt, args...)     SECURE_LOGE(fmt, ##args)
 
 #define _warn_if(expr, fmt, arg...) do { \
                if (expr) { \
@@ -74,6 +77,50 @@ extern "C" {
        } while (0)
 
 /**
+ * To lock and unlock Mutex
+ */
+
+#define TETHERING_LOCK \
+       do { \
+               _tethering_lock(); \
+       } while(0)
+
+#define TETHERING_UNLOCK \
+       do { \
+               _tethering_unlock(); \
+       } while(0)
+
+void _tethering_lock(void);
+void _tethering_unlock(void);
+
+/**
+ * To check supported feature
+ */
+
+#define TETHERING_FEATURE              "http://tizen.org/feature/network.tethering"
+#define TETHERING_BT_FEATURE           "http://tizen.org/feature/network.tethering.bluetooth"
+#define TETHERING_USB_FEATURE          "http://tizen.org/feature/network.tethering.usb"
+#define TETHERING_WIFI_FEATURE         "http://tizen.org/feature/network.tethering.wifi"
+
+typedef enum {
+       TETHERING_SUPPORTED_FEATURE,
+       TETHERING_SUPPORTED_FEATURE_WIFI,
+       TETHERING_SUPPORTED_FEATURE_BT,
+       TETHERING_SUPPORTED_FEATURE_USB,
+       TETHERING_SUPPORTED_FEATURE_MAX,
+} tethering_supported_feature_e;
+
+#define CHECK_FEATURE_SUPPORTED(...) \
+       do { \
+               int rv = _tethering_check_feature_supported(__VA_ARGS__, NULL); \
+               if (rv != TETHERING_ERROR_NONE) { \
+                       return rv; \
+               } \
+       } while (0)
+
+int _tethering_check_feature_supported(const char* feature, ...);
+
+/**
 * Start of mobileap-agent common values
 * When these values are changed, mobileap-agent should be also changed.
 * But some of those will be removed.
@@ -84,26 +131,12 @@ extern "C" {
 */
 
 /**
-* WiFi tethering configuration
-*/
-#define TETHERING_WIFI_CHANNEL         7       /**< Channel number */
-#define TETHERING_WIFI_BSSID_LEN       6       /**< BSSID Length */
-#define TETHERING_WIFI_PASSPHRASE_MIN_LEN      8       /**< Minimum length of wifi key */
-#define TETHERING_WIFI_PASSPHRASE_MAX_LEN      63      /**< Maximum length of wifi key */
-
-/**
 * Common configuration
 */
-#define TETHERING_MAX_WIFI_STA         8
-#define TETHERING_MAX_BT_STA           7
-#define TETHERING_MAX_USB_STA          1
-#define TETHERING_MAX_CONNECTED_STA    16      /**< Maximum connected station. 8(Wi-Fi) + 7(BT) + 1(USB) */
-
-#define TETHERING_NAME_UNKNOWN         "UNKNOWN"
+#define TETHERING_STR_INFO_LEN 40      /**< length of the ip or mac address */
+#define TETHERING_IPV4_ADDRESS_MAX_LEN 15      /**< Maximum length of IP address */
+#define TETHERING_IPV4_ADDRESS_MIN_LEN 7       /**< Minimum length of IP address */
 
-#define TETHERING_TYPE_MAX             4       /**< All, USB, Wi-Fi, BT */
-#define TETHERING_STR_INFO_LEN         20      /**< length of the ip or mac address */
-#define TETHERING_STR_HOSTNAME_LEN     32      /**< length of the hostname */
 
 /**
 * Mobile AP error code
@@ -120,6 +153,7 @@ typedef enum {
        MOBILE_AP_ERROR_DHCP,                   /**< DHCP error */
        MOBILE_AP_ERROR_IN_PROGRESS,            /**< Request is in progress */
        MOBILE_AP_ERROR_NOT_PERMITTED,          /**< Operation is not permitted */
+       MOBILE_AP_ERROR_PERMISSION_DENIED,  /**< Permission Denied */
 
        MOBILE_AP_ERROR_MAX
 } mobile_ap_error_code_e;
@@ -141,6 +175,9 @@ typedef enum {
        MOBILE_AP_ENABLE_BT_TETHERING_CFM,
        MOBILE_AP_DISABLE_BT_TETHERING_CFM,
 
+       MOBILE_AP_ENABLE_P2P_TETHERING_CFM,
+       MOBILE_AP_DISABLE_P2P_TETHERING_CFM,
+
        MOBILE_AP_GET_STATION_INFO_CFM,
        MOBILE_AP_GET_DATA_PACKET_USAGE_CFM
 } mobile_ap_event_e;
@@ -149,32 +186,35 @@ typedef enum {
        MOBILE_AP_TYPE_WIFI,
        MOBILE_AP_TYPE_USB,
        MOBILE_AP_TYPE_BT,
+       MOBILE_AP_TYPE_P2P,
        MOBILE_AP_TYPE_MAX,
 } mobile_ap_type_e;
 
-
-/*
-* from mobileap_internal.h
-*/
-#define DBUS_STRUCT_UINT_STRING (dbus_g_type_get_struct ("GValueArray", \
-                       G_TYPE_UINT, G_TYPE_STRING, G_TYPE_INVALID))
-
-#define DBUS_STRUCT_STATIONS (dbus_g_type_get_struct ("GValueArray", \
-                       G_TYPE_UINT, G_TYPE_STRING, G_TYPE_STRING, \
-                       G_TYPE_STRING, G_TYPE_INVALID))
-
-#define DBUS_STRUCT_STATION (dbus_g_type_get_struct ("GValueArray", \
-                       G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, \
-                       G_TYPE_INVALID))
-
-#define DBUS_STRUCT_INTERFACE (dbus_g_type_get_struct ("GValueArray", \
-                       G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, \
-                       G_TYPE_STRING, G_TYPE_INVALID))
-
-#define TETHERING_SERVICE_OBJECT_PATH  "/MobileAP"
-#define TETHERING_SERVICE_NAME         "com.samsung.mobileap"
-#define TETHERING_SERVICE_INTERFACE    "com.samsung.mobileap"
-
+typedef enum {
+       E_SIGNAL_NET_CLOSED = 0,
+       E_SIGNAL_WIFI_TETHER_ON,
+       E_SIGNAL_WIFI_TETHER_OFF,
+       E_SIGNAL_P2P_TETHER_ON,
+       E_SIGNAL_P2P_TETHER_OFF,
+       E_SIGNAL_USB_TETHER_ON,
+       E_SIGNAL_USB_TETHER_OFF,
+       E_SIGNAL_BT_TETHER_ON,
+       E_SIGNAL_BT_TETHER_OFF,
+       E_SIGNAL_NO_DATA_TIMEOUT,
+       E_SIGNAL_LOW_BATTERY_MODE,
+       E_SIGNAL_FLIGHT_MODE,
+       E_SIGNAL_SECURITY_TYPE_CHANGED,
+       E_SIGNAL_SSID_VISIBILITY_CHANGED,
+       E_SIGNAL_PASSPHRASE_CHANGED,
+       E_SIGNAL_DHCP_STATUS,
+       E_SIGNAL_MAX
+} mobile_ap_sig_e;
+
+#define TETHERING_SERVICE_OBJECT_PATH  "/MobileapAgent"
+#define TETHERING_SERVICE_NAME         "org.tizen.MobileapAgent"
+#define TETHERING_SERVICE_INTERFACE    "org.tizen.tethering"
+
+#define TETHERING_SIGNAL_MATCH_RULE    "type='signal',interface='org.tizen.tethering'"
 #define TETHERING_SIGNAL_NAME_LEN      64
 
 #define SIGNAL_NAME_NET_CLOSED         "net_closed"
@@ -182,6 +222,8 @@ typedef enum {
 #define SIGNAL_NAME_STA_DISCONNECT     "sta_disconnected"
 #define SIGNAL_NAME_WIFI_TETHER_ON     "wifi_on"
 #define SIGNAL_NAME_WIFI_TETHER_OFF    "wifi_off"
+#define SIGNAL_NAME_P2P_TETHER_ON   "p2p_on"
+#define SIGNAL_NAME_P2P_TETHER_OFF  "p2p_off"
 #define SIGNAL_NAME_USB_TETHER_ON      "usb_on"
 #define SIGNAL_NAME_USB_TETHER_OFF     "usb_off"
 #define SIGNAL_NAME_BT_TETHER_ON       "bluetooth_on"
@@ -189,9 +231,15 @@ typedef enum {
 #define SIGNAL_NAME_NO_DATA_TIMEOUT    "no_data_timeout"
 #define SIGNAL_NAME_LOW_BATTERY_MODE   "low_batt_mode"
 #define SIGNAL_NAME_FLIGHT_MODE                "flight_mode"
+#define SIGNAL_NAME_SECURITY_TYPE_CHANGED      "security_type_changed"
+#define SIGNAL_NAME_SSID_VISIBILITY_CHANGED    "ssid_visibility_changed"
+#define SIGNAL_NAME_PASSPHRASE_CHANGED         "passphrase_changed"
 #define SIGNAL_NAME_DHCP_STATUS                "dhcp_status"
 
 #define SIGNAL_MSG_NOT_AVAIL_INTERFACE "Interface is not available"
+#define SIGNAL_MSG_TIMEOUT             "There is no connection for a while"
+#define SIGNAL_MSG_SSID_VISIBLE                "ssid_visible"
+#define SIGNAL_MSG_SSID_HIDE           "ssid_hide"
 
 /* Network Interface */
 #define TETHERING_SUBNET_MASK          "255.255.255.0"
@@ -200,29 +248,56 @@ typedef enum {
 #define TETHERING_USB_GATEWAY          "192.168.129.1"
 
 #define TETHERING_WIFI_IF              "wlan0"
-#define TETHERING_WIFI_GATEWAY         "192.168.61.1"
+#define TETHERING_WIFI_GATEWAY         "192.168.43.1"
 
 #define TETHERING_BT_IF                        "bnep0"
 #define TETHERING_BT_GATEWAY           "192.168.130.1"
+
+#define TETHERING_P2P_IF               "p2p0"
+#define TETHERING_P2P_GATEWAY          "192.168.49.1"
+
+#define TETHERING_WIFI_SSID_MAX_LEN    32      /**< Maximum length of ssid */
+#define TETHERING_WIFI_KEY_MIN_LEN     8       /**< Minimum length of wifi key */
+#define TETHERING_WIFI_KEY_MAX_LEN     64      /**< Maximum length of wifi key */
+#define TETHERING_WIFI_HASH_KEY_MAX_LEN        64
+#define TETHERING_WIFI_MAX_STA 10              /**< Maximum Wi-Fi tethering station */
+#define TETHERING_WIFI_MAX_TXPOWER     100           /**< Default max TX POWER */
+
+#define TETHERING_WIFI_MODE_MAX_LEN 10  /**< Maximum length of mode */
+
+#define VCONFKEY_MOBILE_HOTSPOT_SSID   "memory/private/mobileap-agent/ssid"
+#define TETHERING_PASSPHRASE_PATH      "wifi_tethering.txt"
+#define TETHERING_WIFI_PASSPHRASE_STORE_KEY "tethering_wifi_passphrase"
+#define MAX_ALIAS_LEN  256
+
 /**
 * End of mobileap-agent common values
 */
 
-#define TETHERING_DEFAULT_SSID                         "Redwood"
-#define TETHERING_DEFAULT_PASSPHRASE                   "eoiugkl!"
+#define TETHERING_DEFAULT_SSID "Tizen"
+#define TETHERING_WIFI_CHANNEL 6
 #define TETHERING_WIFI_SECURITY_TYPE_OPEN_STR          "open"
 #define TETHERING_WIFI_SECURITY_TYPE_WPA2_PSK_STR      "wpa2-psk"
+#define TETHERING_WIFI_SECURITY_TYPE_WPS_STR   "wps"
+#define TETHERING_WIFI_SECURITY_TYPE_SAE_STR   "sae"
+#define TETHERING_ERROR_RECOVERY_MAX                   3
+#define SECURITY_TYPE_LEN      32
+#define PSK_ITERATION_COUNT    4096
 
+typedef void (*__handle_cb_t)(GDBusConnection *connection, const gchar *sender_name,
+               const gchar *object_path, const gchar *interface_name, const gchar *signal_name,
+               GVariant *parameters, gpointer user_data);
 
-typedef void (*__handle_cb_t)(DBusGProxy *proxy, const char *name, gpointer data);
 typedef struct {
+       int sig_id;
        char name[TETHERING_SIGNAL_NAME_LEN];
        __handle_cb_t cb;
 } __tethering_sig_t;
 
 typedef struct {
-        DBusGConnection *client_bus;
-        DBusGProxy *client_bus_proxy;
+       GDBusConnection *client_bus;
+       GDBusProxy *client_bus_proxy;
+       GCancellable *cancellable;
 
        tethering_enabled_cb enabled_cb[TETHERING_TYPE_MAX];
        void *enabled_user_data[TETHERING_TYPE_MAX];
@@ -232,13 +307,37 @@ typedef struct {
        void *changed_user_data[TETHERING_TYPE_MAX];
        tethering_data_usage_cb data_usage_cb;
        void *data_usage_user_data;
+       tethering_wifi_security_type_changed_cb security_type_changed_cb;
+       void *security_type_user_data;
+       tethering_wifi_ssid_visibility_changed_cb ssid_visibility_changed_cb;
+       void *ssid_visibility_user_data;
+       tethering_wifi_passphrase_changed_cb passphrase_changed_cb;
+       void *passphrase_user_data;
+       tethering_wifi_settings_reloaded_cb settings_reloaded_cb;
+       void *settings_reloaded_user_data;
+       char *ssid;
+       char passphrase[TETHERING_WIFI_KEY_MAX_LEN + 1];
+       tethering_wifi_security_type_e sec_type;
+       tethering_wifi_mode_type_e mode_type;
+       char ip_address[TETHERING_IPV4_ADDRESS_MAX_LEN + 1];
+       bool visibility;
+       bool mac_filter;
+       bool port_forwarding;
+       bool port_filtering;
+       bool dhcp_enabled;
+       bool wifi_sharing;
+       int channel;
+       int wifi_max_connected;
+       unsigned int txpower;
 } __tethering_h;
 
 typedef struct {
        tethering_type_e interface;                     /**< interface type */
        char ip[TETHERING_STR_INFO_LEN];                /**< assigned IP address */
        char mac[TETHERING_STR_INFO_LEN];               /**< MAC Address */
-       char hostname[TETHERING_STR_HOSTNAME_LEN];      /**< alphanumeric name */
+       char *hostname;
+       time_t tm;      /**< connection time */
+       tethering_band_e band;                  /**< wifi band type */
 } __tethering_client_h;
 
 typedef struct {
@@ -249,6 +348,23 @@ typedef struct {
        char subnet_mask[TETHERING_STR_INFO_LEN];       /**< subnet mask of interface */
 } __tethering_interface_t;
 
+typedef struct {
+       char ssid[TETHERING_WIFI_SSID_MAX_LEN + 1];
+       char key[TETHERING_WIFI_KEY_MAX_LEN + 1];
+       char mode[TETHERING_WIFI_MODE_MAX_LEN + 1];
+       char ip_address[TETHERING_IPV4_ADDRESS_MAX_LEN + 1];
+       tethering_wifi_security_type_e sec_type;
+       bool visibility;
+       bool mac_filter;
+       int max_connected;
+       int channel;
+       unsigned int txpower;
+} _softap_settings_t;
+
+void _tethering_add_handle(tethering_h handle);
+void _tethering_remove_handle(tethering_h handle);
+bool _tethering_check_handle(tethering_h handle);
+
 #ifdef __cplusplus
 }
 #endif