#include <connman/acd.h>
#include "src/shared/arp.h"
+#if defined TIZEN_EXT
+#include <gdbus.h>
+
+static DBusConnection *connection;
+#endif
+
/*
* How many times to send RS with the purpose of
* refreshing RDNSS entries before they actually expire.
static unsigned char invalid_bssid[WIFI_BSSID_LEN_MAX] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
+
+static GHashTable *dhcp_status_list = NULL;
#endif
static GSList *network_list = NULL;
unsigned int keymgmt;
char *keymgmt_type;
bool rsn_mode;
+ bool pmf_required;
int disconnect_reason;
int assoc_status_code;
GSList *vsie_list;
char *connector;
char *c_sign_key;
char *net_access_key;
-#endif
-#if defined TIZEN_EXT
+
unsigned char last_connected_bssid[WIFI_BSSID_LEN_MAX];
GHashTable *assoc_reject_table;
bool owe_transition_mode;
void *transition_mode_ssid;
int transition_mode_ssid_len;
unsigned char transition_mode_bssid[WIFI_BSSID_LEN_MAX];
+ bool roaming_progress;
+ bool roaming_dhcp;
+ char *roaming_cur_bssid;
+ char *roaming_dst_bssid;
+ __time_t roam_scan_time;
+ unsigned int max_bssid_count;
+ int snr;
+ unsigned int est_throughput;
#endif
} wifi;
#if defined TIZEN_EXT
/* Multiple APN services and a default APN which a user selected */
bool default_internet;
+ bool is_psk_sha256;
#endif
};
ipconfig = __connman_service_get_ip4config(service);
__connman_ipconfig_enable(ipconfig);
+#if defined TIZEN_EXT
+ if (!service || !ipconfig)
+ return -EINVAL;
+#endif
if (!__connman_ipconfig_get_local(ipconfig))
__connman_service_read_ip4config(service);
}
}
+#if defined TIZEN_EXT
+int set_connected_dhcp(struct connman_network *network)
+#else
static int set_connected_dhcp(struct connman_network *network)
+#endif
{
struct connman_service *service;
struct connman_ipconfig *ipconfig_ipv4;
#if defined TIZEN_EXT
g_slist_free_full(network->wifi.vsie_list, g_free);
g_slist_free_full(network->wifi.bssid_list, g_free);
+
+ if (TIZEN_INS_ENABLED)
+ g_hash_table_destroy(network->wifi.assoc_reject_table);
#endif
g_free(network->path);
g_free(network->group);
connman_network_ref_debug(struct connman_network *network,
const char *file, int line, const char *caller)
{
+#if defined TIZEN_EXT
+ if (!simplified_log)
+#endif
DBG("%p name %s ref %d by %s:%d:%s()", network, network->name,
network->refcount + 1, file, line, caller);
void connman_network_unref_debug(struct connman_network *network,
const char *file, int line, const char *caller)
{
+#if defined TIZEN_EXT
+ if (!simplified_log)
+#endif
DBG("%p name %s ref %d by %s:%d:%s()", network, network->name,
network->refcount - 1, file, line, caller);
return 0;
}
+#if defined TIZEN_EXT
+static void set_authenticate_error(struct connman_network *network)
+{
+ struct connman_service *service;
+
+ service = connman_service_lookup_from_network(network);
+
+ if (!service)
+ return;
+
+ if (connman_service_get_favorite(service)) {
+ __connman_service_set_ignore(service, true);
+ }
+
+ __connman_service_indicate_error(service,
+ CONNMAN_SERVICE_ERROR_AUTH_FAILED);
+}
+#endif
+
+
static void set_associate_error(struct connman_network *network)
{
struct connman_service *service;
service = connman_service_lookup_from_network(network);
#if defined TIZEN_EXT
+ if (!service)
+ return;
+
+ if (connman_service_get_favorite(service))
+ __connman_service_set_ignore(service, true);
+
__connman_service_indicate_error(service,
- CONNMAN_SERVICE_ERROR_AUTH_FAILED);
+ CONNMAN_SERVICE_ERROR_ASSOC_FAILED);
#else
__connman_service_indicate_error(service,
CONNMAN_SERVICE_ERROR_CONNECT_FAILED);
set_connect_error(network);
break;
#if defined TIZEN_EXT
+ case CONNMAN_NETWORK_ERROR_AUTHENTICATE_FAIL:
+ set_authenticate_error(network);
+ break;
case CONNMAN_NETWORK_ERROR_DHCP_FAIL:
set_dhcp_error(network);
break;
return network->connected;
}
+#if defined TIZEN_EXT
+bool connman_network_get_psk_sha256(struct connman_network *network)
+{
+ return network->is_psk_sha256;
+}
+
+void connman_network_set_psk_sha256(struct connman_network *network, bool is_psk_sha256)
+{
+ network->is_psk_sha256 = is_psk_sha256;
+}
+#endif
+
/**
* connman_network_get_associating:
* @network: network structure
return err;
}
+#if defined TIZEN_EXT
+char *__connman_network_get_dhcp_status(const char *ifname)
+{
+ char *status = NULL;
+
+ if (!ifname)
+ return NULL;
+
+ status = g_hash_table_lookup(dhcp_status_list, ifname);
+ DBG("ifname: %s, DHCP status: %s", ifname, status);
+
+ return status;
+}
+
+static void __connman_network_update_dhcp_status(
+ const char *ifname, const char *status)
+{
+ if (!ifname || !status)
+ return;
+
+ g_hash_table_replace(dhcp_status_list, g_strdup(ifname), g_strdup(status));
+}
+
+dbus_bool_t __connman_network_notify_dhcp_changed(const char *key, const char *val)
+{
+ DBusMessage *signal;
+ DBusMessageIter iter;
+ dbus_bool_t result = FALSE;
+
+ if (val) {
+ if (!g_utf8_validate(val, -1, NULL)) {
+ DBG("key %s, invalid val", key);
+ val = "";
+ } else {
+ DBG("key %s, val %s", key, val);
+ }
+ } else {
+ DBG("key %s, val NULL", key);
+ val = "";
+ }
+
+ signal = dbus_message_new_signal(CONNMAN_MANAGER_PATH,
+ CONNMAN_MANAGER_INTERFACE, "DhcpChanged");
+
+ if (!signal)
+ return result;
+
+ dbus_message_iter_init_append(signal, &iter);
+ connman_dbus_property_append_basic(&iter, key, DBUS_TYPE_STRING, &val);
+
+ result = dbus_connection_send(connection, signal, NULL);
+ if (result)
+ DBG("Successfuly sent signal");
+ else
+ DBG("Fail to send signal");
+
+ dbus_message_unref(signal);
+
+ __connman_network_update_dhcp_status(val, key);
+
+ return result;
+}
+#endif
+
/**
* __connman_network_connect:
* @network: network structure
int connman_network_set_bssid_list(struct connman_network *network,
GSList *bssids)
{
+ unsigned int max_bssid_count;
+
g_slist_free_full(network->wifi.bssid_list, g_free);
network->wifi.bssid_list = bssids;
+ max_bssid_count = g_slist_length(bssids);
+ if (network->wifi.max_bssid_count < max_bssid_count)
+ network->wifi.max_bssid_count = max_bssid_count;
+
return 0;
}
return network->wifi.bssid_list;
}
+unsigned int connman_network_get_max_bssid_count(struct connman_network *network)
+{
+ return network->wifi.max_bssid_count;
+}
+
int connman_network_set_last_connected_bssid(struct connman_network *network,
const unsigned char *bssid)
{
if (!assoc_reject_table)
return;
+ g_hash_table_destroy(network->wifi.assoc_reject_table);
+
network->wifi.assoc_reject_table = assoc_reject_table;
}
return network->wifi.assoc_reject_table;
}
+
+__time_t connman_network_get_roam_scan_time(struct connman_network *network)
+{
+ return network->wifi.roam_scan_time;
+}
+
+void connman_network_set_roam_scan_time(struct connman_network *network,
+ __time_t roam_scan_time)
+{
+ network->wifi.roam_scan_time = roam_scan_time;
+}
+
+int connman_network_get_snr(struct connman_network *network)
+{
+ return network->wifi.snr;
+}
+
+void connman_network_set_snr(struct connman_network *network, int snr)
+{
+ network->wifi.snr = snr;
+}
+
+unsigned int connman_network_get_est_throughput(struct connman_network *network)
+{
+ return network->wifi.est_throughput;
+}
+
+void connman_network_set_est_throughput(struct connman_network *network,
+ unsigned int est_throughput)
+{
+ network->wifi.est_throughput = est_throughput;
+}
#endif
int connman_network_set_nameservers(struct connman_network *network,
return 0;
}
+int connman_network_set_autoconnect(struct connman_network *network,
+ bool autoconnect)
+{
+ if (!network->driver || !network->driver->set_autoconnect)
+ return 0;
+ return network->driver->set_autoconnect(network, autoconnect);
+}
+
+bool __connman_network_native_autoconnect(struct connman_network *network)
+{
+ if (!network->driver || !network->driver->set_autoconnect)
+ return false;
+ return true;
+}
+
uint16_t connman_network_get_wifi_channel(struct connman_network *network)
{
return network->wifi.channel;
} else if (g_str_equal(key, "WiFi.NetAccessKey")) {
g_free(network->wifi.net_access_key);
network->wifi.net_access_key = g_strdup(value);
+ } else if (g_str_equal(key, "WiFi.RoamingCurBSSID")) {
+ g_free(network->wifi.roaming_cur_bssid);
+ network->wifi.roaming_cur_bssid = g_strdup(value);
+ } else if (g_str_equal(key, "WiFi.RoamingDstBSSID")) {
+ g_free(network->wifi.roaming_dst_bssid);
+ network->wifi.roaming_dst_bssid = g_strdup(value);
#endif
} else {
return -EINVAL;
else if (g_str_equal(key, "WiFi.Mode"))
return network->wifi.mode;
else if (g_str_equal(key, "WiFi.Security"))
-#if defined TIZEN_EXT
- if (network->wifi.rsn_mode != true ||
- g_str_equal(network->wifi.security, "ieee8021x"))
- return network->wifi.security;
- else
- return "rsn";
-#else
return network->wifi.security;
-#endif
else if (g_str_equal(key, "WiFi.Passphrase"))
return network->wifi.passphrase;
else if (g_str_equal(key, "WiFi.EAP"))
return network->wifi.c_sign_key;
else if (g_str_equal(key, "WiFi.NetAccessKey"))
return network->wifi.net_access_key;
+ else if (g_str_equal(key, "WiFi.RoamingCurBSSID"))
+ return network->wifi.roaming_cur_bssid;
+ else if (g_str_equal(key, "WiFi.RoamingDstBSSID"))
+ return network->wifi.roaming_dst_bssid;
#endif
return NULL;
network->wifi.isHS20AP = value;
else if (g_strcmp0(key, "WiFi.TRANSITION_MODE") == 0)
network->wifi.owe_transition_mode = value;
+ else if (g_strcmp0(key, "WiFi.Roaming") == 0)
+ network->wifi.roaming_progress = value;
+ else if (g_strcmp0(key, "WiFi.RoamingDHCP") == 0)
+ network->wifi.roaming_dhcp = value;
+ else if (g_strcmp0(key, "WiFi.PMFRequired") == 0)
+ network->wifi.pmf_required = value;
#endif
return -EINVAL;
return network->default_internet;
else if (g_str_equal(key, "WiFi.HS20AP"))
return network->wifi.isHS20AP;
- else if (g_strcmp0(key, "WiFi.TRANSITION_MODE"))
+ else if (g_str_equal(key, "WiFi.TRANSITION_MODE"))
return network->wifi.owe_transition_mode;
+ else if (g_str_equal(key, "WiFi.Roaming"))
+ return network->wifi.roaming_progress;
+ else if (g_str_equal(key, "WiFi.RoamingDHCP"))
+ return network->wifi.roaming_dhcp;
+ else if (g_str_equal(key, "WiFi.PMFRequired"))
+ return network->wifi.pmf_required;
#endif
return false;
return network->wifi.transition_mode_ssid;
#endif
}
+
return NULL;
}
int __connman_network_init(void)
{
DBG("");
+#if defined TIZEN_EXT
+ connection = connman_dbus_get_connection();
+ dhcp_status_list = g_hash_table_new_full(g_str_hash,
+ g_str_equal, g_free, g_free);
+#endif
return 0;
}
void __connman_network_cleanup(void)
{
DBG("");
+#if defined TIZEN_EXT
+ dbus_connection_unref(connection);
+ if (dhcp_status_list)
+ g_hash_table_destroy(dhcp_status_list);
+#endif
}