#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
#endif
#ifndef DEPRECATED_API
-# define DEPRECATED_API __attribute__ ((deprecated))
+#define DEPRECATED_API __attribute__ ((deprecated))
#endif
-#define DBG(fmt, args...) LOGD(fmt, ##args)
-#define WARN(fmt, args...) LOGW(fmt, ##args)
-#define ERR(fmt, args...) LOGE(fmt, ##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) { \
} while (0)
/**
+ * 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.
/**
* Common configuration
*/
-#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 */
+#define TETHERING_STR_INFO_LEN 40 /**< length of the ip or mac address */
/**
* Mobile AP error code
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;
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;
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 "/Tethering"
-#define TETHERING_SERVICE_NAME "org.tizen.tethering"
+typedef enum {
+ E_SIGNAL_NET_CLOSED = 0,
+ E_SIGNAL_WIFI_TETHER_ON,
+ E_SIGNAL_WIFI_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"
#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_DHCP_STATUS "dhcp_status"
#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 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_WIFI_SSID_MAX_LEN 31 /**< Maximum length of ssid */
+#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 63 /**< Maximum 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_DBUS_MAX_RETRY_COUNT 3
-#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];
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;
+ bool visibility;
+ bool mac_filter;
+ bool port_forwarding;
+ bool port_filtering;
+ bool dhcp_enabled;
+ 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_client_h;
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];
+ tethering_wifi_security_type_e sec_type;
+ bool visibility;
+ bool mac_filter;
+ int max_connected;
+ int channel;
+ unsigned int txpower;
+} _softap_settings_t;
+
+typedef struct {
+ bool flag;
+} tethering_request_table_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