X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fnetwork.c;h=7046137003aef9d4b32da2a20e638bb5016fce25;hb=bf0e619ef451bde3568c1af509ccb12cbda2ff93;hp=b12bbc091b0caee15ef0d9f277d9f1e221f841cf;hpb=f89b473dfd8e916314b534b3397442f8c869c783;p=platform%2Fupstream%2Fconnman.git diff --git a/src/network.c b/src/network.c old mode 100644 new mode 100755 index b12bbc0..7046137 --- a/src/network.c +++ b/src/network.c @@ -52,6 +52,12 @@ #define DHCP_RETRY_TIMEOUT 10 +#if defined TIZEN_EXT +static unsigned char invalid_bssid[WIFI_BSSID_LEN_MAX] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; +#endif + static GSList *network_list = NULL; static GSList *driver_list = NULL; @@ -107,8 +113,52 @@ struct connman_network { bool wps_advertizing; bool use_wps; char *pin_wps; +#if defined TIZEN_EXT + char encryption_mode[WIFI_ENCYPTION_MODE_LEN_MAX]; + unsigned char bssid[WIFI_BSSID_LEN_MAX]; + unsigned int maxrate; + int maxspeed; + bool isHS20AP; + unsigned int keymgmt; + char *keymgmt_type; + bool rsn_mode; + bool pmf_required; + int disconnect_reason; + int assoc_status_code; + GSList *vsie_list; + /* + * Only for EAP-FAST + */ + char *phase1; + unsigned char country_code[WIFI_COUNTRY_CODE_LEN]; + GSList *bssid_list; + GSList *sec_list; + ieee80211_modes_e phy_mode; + connection_mode_e connection_mode; + 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; + char *roaming_cur_bssid; + char *roaming_dst_bssid; + __time_t roam_scan_time; + int snr; +#endif } wifi; +#if defined TIZEN_EXT + /* Multiple APN services and a default APN which a user selected */ + bool default_internet; +#endif + }; static const char *type2string(enum connman_network_type type) @@ -204,7 +254,11 @@ static void acd_host_ipv4_available(struct acd_host *acd, gpointer user_data) if (err < 0) goto err; +#if defined TIZEN_EXT + err = __connman_ipconfig_gateway_add(ipconfig_ipv4, service); +#else err = __connman_ipconfig_gateway_add(ipconfig_ipv4); +#endif if (err < 0) goto err; @@ -444,7 +498,11 @@ static void dhcp_success(struct connman_network *network) if (err < 0) goto err; +#if defined TIZEN_EXT + err = __connman_ipconfig_gateway_add(ipconfig_ipv4, service); +#else err = __connman_ipconfig_gateway_add(ipconfig_ipv4); +#endif if (err < 0) goto err; @@ -503,6 +561,10 @@ static int set_connected_manual(struct connman_network *network) 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); @@ -518,7 +580,11 @@ static int set_connected_manual(struct connman_network *network) if (err < 0) goto err; +#if defined TIZEN_EXT + err = __connman_ipconfig_gateway_add(ipconfig, service); +#else err = __connman_ipconfig_gateway_add(ipconfig); +#endif if (err < 0) goto err; @@ -619,7 +685,11 @@ static int manual_ipv6_set(struct connman_network *network, return err; } +#if defined TIZEN_EXT + err = __connman_ipconfig_gateway_add(ipconfig_ipv6, service); +#else err = __connman_ipconfig_gateway_add(ipconfig_ipv6); +#endif if (err < 0) return err; @@ -676,6 +746,10 @@ static int dhcpv6_set_addresses(struct connman_network *network) network->connecting = false; ipconfig_ipv6 = __connman_service_get_ip6config(service); +#if defined TIZEN_EXT + if (!ipconfig_ipv6) + goto err; +#endif err = __connman_ipconfig_address_add(ipconfig_ipv6); if (err < 0) goto err; @@ -763,6 +837,9 @@ static void check_dhcpv6(struct nd_router_advert *reply, check_dhcpv6, network); return; } +#if defined TIZEN_EXT + DBG("RA message is not received from server in reply of RS."); +#endif connman_network_unref(network); return; } @@ -775,6 +852,9 @@ static void check_dhcpv6(struct nd_router_advert *reply, */ if (!network->connected) { connman_network_unref(network); +#if defined TIZEN_EXT + DBG("Network is not connected"); +#endif return; } @@ -803,11 +883,21 @@ static void check_dhcpv6(struct nd_router_advert *reply, * We do stateful/stateless DHCPv6 if router advertisement says so. */ if (reply->nd_ra_flags_reserved & ND_RA_FLAG_MANAGED) { +#if defined TIZEN_EXT + DBG("IPv6 ND_RA_FLAG_MANAGED"); +#endif __connman_dhcpv6_start(network, prefixes, dhcpv6_callback); } else { if (reply->nd_ra_flags_reserved & ND_RA_FLAG_OTHER) +#if defined TIZEN_EXT + { + DBG("IPv6 ND_RA_FLAG_OTHER"); +#endif __connman_dhcpv6_start_info(network, dhcpv6_info_callback); +#if defined TIZEN_EXT + } +#endif g_slist_free_full(prefixes, g_free); network->connecting = false; @@ -888,6 +978,11 @@ static void autoconf_ipv6_set(struct connman_network *network) __connman_device_set_network(network->device, network); +#if defined TIZEN_EXT + if(network->type == CONNMAN_NETWORK_TYPE_CELLULAR) + return; +#endif + service = connman_service_lookup_from_network(network); if (!service) return; @@ -1023,12 +1118,23 @@ static void set_disconnected(struct connman_network *network) CONNMAN_IPCONFIG_TYPE_IPV6); if (network->connected) { +#if defined TIZEN_EXT + /** + * Do not remove gateway and its address, + * if there are connected profiles that use same interface (multiple PDN) + */ + if (connman_service_get_type(service) != CONNMAN_SERVICE_TYPE_CELLULAR || + __connman_service_get_connected_count_of_iface(service) <= 0) { +#endif __connman_connection_gateway_remove(service, CONNMAN_IPCONFIG_TYPE_ALL); __connman_ipconfig_address_unset(ipconfig_ipv4); __connman_ipconfig_address_unset(ipconfig_ipv6); +#if defined TIZEN_EXT + } +#endif /* * Special handling for IPv6 autoconfigured address. * The simplest way to remove autoconfigured routes is to @@ -1074,7 +1180,9 @@ static int network_probe(struct connman_network *network) driver = NULL; continue; } - +#if defined TIZEN_EXT + if (!simplified_log) +#endif DBG("driver %p name %s", driver, driver->name); if (driver->probe(network) == 0) @@ -1239,6 +1347,10 @@ static void network_destruct(struct connman_network *network) g_free(network->wifi.phase2_auth); g_free(network->wifi.pin_wps); +#if defined TIZEN_EXT + g_slist_free_full(network->wifi.vsie_list, g_free); + g_slist_free_full(network->wifi.bssid_list, g_free); +#endif g_free(network->path); g_free(network->group); g_free(network->node); @@ -1485,6 +1597,15 @@ bool __connman_network_get_weakness(struct connman_network *network) return false; } +#if defined TIZEN_EXT +void connman_network_set_connecting(struct connman_network *network) +{ + DBG("set network connecting true"); + network->connecting = TRUE; + return; +} +#endif + bool connman_network_get_connecting(struct connman_network *network) { return network->connecting; @@ -1500,7 +1621,9 @@ bool connman_network_get_connecting(struct connman_network *network) int connman_network_set_available(struct connman_network *network, bool available) { +#if !defined TIZEN_EXT DBG("network %p available %d", network, available); +#endif if (network->available == available) return -EALREADY; @@ -1521,6 +1644,120 @@ bool connman_network_get_available(struct connman_network *network) return network->available; } +#if defined TIZEN_EXT +void connman_network_clear_associating(struct connman_network *network) +{ + struct connman_service *service; + enum connman_service_state state; + + DBG("network %p", network); + + network->connecting = FALSE; + network->associating = FALSE; + + service = connman_service_lookup_from_network(network); + if (!service) + return; + + state = __connman_service_ipconfig_get_state(service, + CONNMAN_IPCONFIG_TYPE_IPV4); + if (state != CONNMAN_SERVICE_STATE_IDLE && + state != CONNMAN_SERVICE_STATE_FAILURE) + __connman_service_ipconfig_indicate_state(service, + CONNMAN_SERVICE_STATE_DISCONNECT, + CONNMAN_IPCONFIG_TYPE_IPV4); + + state = __connman_service_ipconfig_get_state(service, + CONNMAN_IPCONFIG_TYPE_IPV6); + if (state != CONNMAN_SERVICE_STATE_IDLE && + state != CONNMAN_SERVICE_STATE_FAILURE) + __connman_service_ipconfig_indicate_state(service, + CONNMAN_SERVICE_STATE_DISCONNECT, + CONNMAN_IPCONFIG_TYPE_IPV6); + + __connman_service_ipconfig_indicate_state(service, + CONNMAN_SERVICE_STATE_IDLE, + CONNMAN_IPCONFIG_TYPE_IPV4); + + __connman_service_ipconfig_indicate_state(service, + CONNMAN_SERVICE_STATE_IDLE, + CONNMAN_IPCONFIG_TYPE_IPV6); +} + +static gboolean __connman_network_clear_associating_delayed(gpointer user_data) +{ + GSList *list; + gboolean found = FALSE; + enum connman_service_state state_ipv4; + enum connman_service_state state_ipv6; + struct connman_service *service; + struct connman_network *network = (struct connman_network *)user_data; + + for (list = network_list; list != NULL; list = list->next) { + struct connman_network *item = list->data; + + if (item == network) { + found = TRUE; + break; + } + } + + if (found != TRUE) + return FALSE; + + DBG("network %p name %s", network, network->name); + service = connman_service_lookup_from_network(network); + + state_ipv4 = __connman_service_ipconfig_get_state(service, + CONNMAN_IPCONFIG_TYPE_IPV4); + state_ipv6 = __connman_service_ipconfig_get_state(service, + CONNMAN_IPCONFIG_TYPE_IPV6); + + DBG("service %p state %d/%d", service, state_ipv4, state_ipv6); + + if (network->associating == FALSE && + state_ipv4 == CONNMAN_SERVICE_STATE_ASSOCIATION && + state_ipv6 == CONNMAN_SERVICE_STATE_ASSOCIATION) { + __connman_service_ipconfig_indicate_state(service, + CONNMAN_SERVICE_STATE_IDLE, + CONNMAN_IPCONFIG_TYPE_IPV4); + __connman_service_ipconfig_indicate_state(service, + CONNMAN_SERVICE_STATE_IDLE, + CONNMAN_IPCONFIG_TYPE_IPV6); + } else { + if (network->associating == FALSE) { + struct connman_ipconfig *ipconfig_ipv4, *ipconfig_ipv6; + enum connman_ipconfig_method ipv4_method, ipv6_method; + + ipconfig_ipv4 = __connman_service_get_ip4config(service); + ipv4_method = __connman_ipconfig_get_method(ipconfig_ipv4); + ipconfig_ipv6 = __connman_service_get_ip4config(service); + ipv6_method = __connman_ipconfig_get_method(ipconfig_ipv6); + + if((ipv4_method == CONNMAN_IPCONFIG_METHOD_UNKNOWN || ipv4_method == CONNMAN_IPCONFIG_METHOD_OFF) && + (state_ipv6 == CONNMAN_SERVICE_STATE_ASSOCIATION)) + __connman_service_ipconfig_indicate_state(service, + CONNMAN_SERVICE_STATE_IDLE, + CONNMAN_IPCONFIG_TYPE_IPV6); + if((ipv6_method == CONNMAN_IPCONFIG_METHOD_UNKNOWN || ipv6_method == CONNMAN_IPCONFIG_METHOD_OFF) && + (state_ipv4 == CONNMAN_SERVICE_STATE_ASSOCIATION)) + __connman_service_ipconfig_indicate_state(service, + CONNMAN_SERVICE_STATE_IDLE, + CONNMAN_IPCONFIG_TYPE_IPV4); + } + } + + return FALSE; +} +#endif + +#if defined TIZEN_EXT && defined TIZEN_EXT_EAP_ON_ETHERNET +bool connman_network_check_validity(struct connman_network *network) +{ + return (NULL == g_slist_find(network_list, network)) ? false : true; +} +#endif /* defined TIZEN_EXT && defined TIZEN_EXT_EAP_ON_ETHERNET */ + /** * connman_network_set_associating: * @network: network structure @@ -1550,17 +1787,49 @@ int connman_network_set_associating(struct connman_network *network, CONNMAN_IPCONFIG_TYPE_IPV6); } +#if defined TIZEN_EXT + if (associating == FALSE && + connman_network_get_bool(network, "WiFi.UseWPS") == FALSE) + g_timeout_add_seconds(1, + __connman_network_clear_associating_delayed, + network); +#endif + 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; + + __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; + + __connman_service_indicate_error(service, + CONNMAN_SERVICE_ERROR_ASSOC_FAILED); +#else __connman_service_indicate_error(service, CONNMAN_SERVICE_ERROR_CONNECT_FAILED); +#endif } static void set_configure_error(struct connman_network *network) @@ -1579,6 +1848,10 @@ static void set_invalid_key_error(struct connman_network *network) service = connman_service_lookup_from_network(network); +#if defined TIZEN_EXT + if (service) + __connman_service_set_favorite(service, false); +#endif __connman_service_indicate_error(service, CONNMAN_SERVICE_ERROR_INVALID_KEY); } @@ -1603,6 +1876,22 @@ static void set_blocked_error(struct connman_network *network) CONNMAN_SERVICE_ERROR_BLOCKED); } + +#if defined TIZEN_EXT +static void set_dhcp_error(struct connman_network *network) +{ + struct connman_service *service; + + if (network->associating != FALSE) + network->associating = FALSE; + + service = connman_service_lookup_from_network(network); + + __connman_service_indicate_error(service, + CONNMAN_SERVICE_ERROR_DHCP_FAILED); +} +#endif + void connman_network_set_ipv4_method(struct connman_network *network, enum connman_ipconfig_method method) { @@ -1657,6 +1946,15 @@ void connman_network_set_error(struct connman_network *network, case CONNMAN_NETWORK_ERROR_CONNECT_FAIL: 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; +#endif + case CONNMAN_NETWORK_ERROR_BLOCKED: set_blocked_error(network); break; @@ -1797,20 +2095,42 @@ int __connman_network_connect(struct connman_network *network) if (!network->device) return -ENODEV; +#if defined TIZEN_EXT + if (network->type != CONNMAN_NETWORK_TYPE_CELLULAR) +#endif __connman_device_disconnect(network->device); network->connecting = true; +#if defined TIZEN_EXT + DBG("ConnMan, Connect Request [%s]", network->name); +#endif + err = network->driver->connect(network); if (err < 0) { - if (err == -EINPROGRESS) + if (err == -EINPROGRESS) { +#if defined TIZEN_EXT + if (network->type != CONNMAN_NETWORK_TYPE_CELLULAR) +#endif connman_network_set_associating(network, true); - else + } else network->connecting = false; return err; } +#if defined TIZEN_EXT && defined TIZEN_EXT_EAP_ON_ETHERNET + /* + * Note: If EAP on Ethernet is ON, then network will be connected + * after EAP Success event is recieved, from plugin/ethernet.c + */ + struct connman_service *service = connman_service_lookup_from_network(network); + if (service && __connman_service_get_use_eapol(service)) { + connman_network_set_associating(network, true); + return 0; + } +#endif /* defined TIZEN_EXT && defined TIZEN_EXT_EAP_ON_ETHERNET */ + set_connected(network); return err; @@ -1825,7 +2145,9 @@ int __connman_network_connect(struct connman_network *network) int __connman_network_disconnect(struct connman_network *network) { int err = 0; - +#if defined TIZEN_EXT + if (!simplified_log) +#endif DBG("network %p", network); remove_ipv4ll_timeout(network); @@ -1841,6 +2163,11 @@ int __connman_network_disconnect(struct connman_network *network) network->connecting = false; +#if defined TIZEN_EXT + DBG("ConnMan, Disconnect request"); + struct connman_service *service = connman_service_lookup_from_network(network); + connman_service_set_disconnection_requested(service, true); +#endif if (network->driver->disconnect) err = network->driver->disconnect(network); @@ -1897,12 +2224,38 @@ int __connman_network_clear_ipconfig(struct connman_network *network, return 0; } +#if defined TIZEN_EXT +void __connman_network_set_auto_ipv6_gateway(char *gateway, void *user_data) +{ + DBG(""); + + struct connman_network *network = user_data; + struct connman_service *service; + struct connman_ipconfig *ipconfig = NULL; + + service = connman_service_lookup_from_network(network); + if (service == NULL) + return; + + ipconfig = __connman_service_get_ipconfig(service, AF_INET6); + if (ipconfig == NULL) + return; + + __connman_ipconfig_set_gateway(ipconfig, gateway); + + return; +} +#endif + int __connman_network_enable_ipconfig(struct connman_network *network, struct connman_ipconfig *ipconfig) { int r = 0; enum connman_ipconfig_type type; enum connman_ipconfig_method method; +#if defined TIZEN_EXT + struct connman_service *service; +#endif if (!network || !ipconfig) return -EINVAL; @@ -1930,6 +2283,14 @@ int __connman_network_enable_ipconfig(struct connman_network *network, break; case CONNMAN_IPCONFIG_METHOD_AUTO: +#if defined TIZEN_EXT + service = connman_service_lookup_from_network(network); + + if(network->type == CONNMAN_NETWORK_TYPE_CELLULAR) + __connman_service_ipconfig_indicate_state(service, + CONNMAN_SERVICE_STATE_CONFIGURATION, + CONNMAN_IPCONFIG_TYPE_IPV6); +#endif autoconf_ipv6_set(network); break; @@ -2006,6 +2367,340 @@ int connman_network_set_ipaddress(struct connman_network *network, return 0; } +#if defined TIZEN_EXT +/* + * Description: Network client requires additional wifi specific info + */ +int connman_network_set_bssid(struct connman_network *network, + const unsigned char *bssid) +{ + int i = 0; + + if (bssid == NULL) + return -EINVAL; + + if (network->connected) + return -EPERM; + + if (!simplified_log) + DBG("network %p bssid %02x:%02x:%02x:%02x:%02x:%02x", network, + bssid[0], bssid[1], bssid[2], + bssid[3], bssid[4], bssid[5]); + + for (;i < WIFI_BSSID_LEN_MAX;i++) + network->wifi.bssid[i] = bssid[i]; + + return 0; +} + +unsigned char *connman_network_get_bssid(struct connman_network *network) +{ + return (unsigned char *)network->wifi.bssid; +} + +int connman_network_set_transition_mode_bssid(struct connman_network *network, + const unsigned char *transition_mode_bssid) +{ + int i = 0; + + if (transition_mode_bssid == NULL) + return -EINVAL; + + for (;i < WIFI_BSSID_LEN_MAX;i++) + network->wifi.transition_mode_bssid[i] = transition_mode_bssid[i]; + + return 0; +} + +unsigned char *connman_network_get_transition_mode_bssid(struct connman_network *network) +{ + return (unsigned char *)network->wifi.transition_mode_bssid; +} + +bool connman_network_check_transition_mode(struct connman_network *network1, struct connman_network *network2) +{ + + if (network1 == NULL || network2 == NULL) + return FALSE; + + if (network1->wifi.owe_transition_mode == FALSE || network2->wifi.owe_transition_mode == FALSE) + return FALSE; + + if ((memcmp(network1->wifi.bssid, network2->wifi.transition_mode_bssid, WIFI_BSSID_LEN_MAX) == 0) + && (memcmp(network1->wifi.transition_mode_bssid, network2->wifi.bssid, WIFI_BSSID_LEN_MAX) == 0)) + return TRUE; + else + return FALSE; +} + +int connman_network_set_maxspeed(struct connman_network *network, + int maxspeed) +{ + network->wifi.maxspeed = maxspeed; + return 0; +} + +int connman_network_get_maxspeed(struct connman_network *network) +{ + if (!network->driver) + return 0; + + if (network->connected) + return network->wifi.maxspeed; + + return 0; +} + +int connman_network_set_sec_list(struct connman_network *network, + GSList *sec_list) +{ + g_slist_free(network->wifi.sec_list); + network->wifi.sec_list = sec_list; + + return 0; +} + +void *connman_network_get_sec_list(struct connman_network *network) +{ + return network->wifi.sec_list; +} + +int connman_network_set_maxrate(struct connman_network *network, + unsigned int maxrate) +{ +#if !defined TIZEN_EXT + DBG("network %p maxrate %d", network, maxrate); +#endif + + network->wifi.maxrate = maxrate; + + return 0; +} + +unsigned int connman_network_get_maxrate(struct connman_network *network) +{ + return network->wifi.maxrate; +} + +int connman_network_set_enc_mode(struct connman_network *network, + const char *encryption_mode) +{ + if (encryption_mode == NULL) + return -EINVAL; + + if (!simplified_log) + DBG("network %p encryption mode %s", network, encryption_mode); + + g_strlcpy(network->wifi.encryption_mode, encryption_mode, + WIFI_ENCYPTION_MODE_LEN_MAX); + + return 0; +} + +const char *connman_network_get_enc_mode(struct connman_network *network) +{ + return (const char *)network->wifi.encryption_mode; +} + +int connman_network_set_rsn_mode(struct connman_network *network, + bool rsn_mode) +{ + network->wifi.rsn_mode = rsn_mode; + + return 0; +} + +int connman_network_set_proxy(struct connman_network *network, + const char *proxies) +{ + struct connman_service *service; + + DBG("network %p proxies %s", network, proxies); + + service = connman_service_lookup_from_network(network); + if (service == NULL) + return -EINVAL; + + __connman_service_set_proxy(service, proxies); + + connman_service_set_proxy_method(service, + CONNMAN_SERVICE_PROXY_METHOD_MANUAL); + + return 0; +} + +int connman_network_set_keymgmt(struct connman_network *network, + unsigned int keymgmt) +{ + if (network == NULL) + return 0; + + network->wifi.keymgmt = keymgmt; + + return 0; +} + +unsigned int connman_network_get_keymgmt(struct connman_network *network) +{ + if (network == NULL) + return 0; + + return network->wifi.keymgmt; +} + +int connman_network_set_disconnect_reason(struct connman_network *network, + int reason_code) +{ + if (network == NULL) + return 0; + + network->wifi.disconnect_reason = reason_code; + + return 0; +} + +int connman_network_get_disconnect_reason(struct connman_network *network) +{ + if (network == NULL) + return 0; + + return network->wifi.disconnect_reason; +} +int connman_network_get_assoc_status_code(struct connman_network *network) +{ + if (network == NULL) + return 0; + + return network->wifi.assoc_status_code; +} + +int connman_network_set_countrycode(struct connman_network *network, + const unsigned char *country_code) +{ + int i = 0; + + if (country_code == NULL) + return -EINVAL; + + if (!simplified_log) + DBG("network %p Country Code %02x:%02x",network, + country_code[0],country_code[1]); + + for (; i < WIFI_COUNTRY_CODE_LEN; i++) + network->wifi.country_code[i] = country_code[i]; + + return 0; +} + +unsigned char *connman_network_get_countrycode(struct connman_network *network) +{ + return (unsigned char *)network->wifi.country_code; +} + +int connman_network_set_bssid_list(struct connman_network *network, + GSList *bssids) +{ + g_slist_free_full(network->wifi.bssid_list, g_free); + network->wifi.bssid_list = bssids; + + return 0; +} + +int connman_network_set_phy_mode(struct connman_network *network, + ieee80211_modes_e mode) +{ + if (!simplified_log) + DBG("network %p phy mode %d", network, mode); + network->wifi.phy_mode = mode; + + return 0; +} + +ieee80211_modes_e connman_network_get_phy_mode(struct connman_network *network) +{ + return network->wifi.phy_mode; +} + +int connman_network_set_connection_mode(struct connman_network *network, + connection_mode_e mode) +{ + DBG("network %p connection mode %d", network, mode); + network->wifi.connection_mode = mode; + + return 0; +} + +connection_mode_e connman_network_get_connection_mode(struct connman_network *network) +{ + return network->wifi.connection_mode; +} + +void *connman_network_get_bssid_list(struct connman_network *network) +{ + return network->wifi.bssid_list; +} + +int connman_network_set_last_connected_bssid(struct connman_network *network, + const unsigned char *bssid) +{ + if (!bssid) + return -EINVAL; + + if (!memcmp(bssid, invalid_bssid, WIFI_BSSID_LEN_MAX)) + return -EINVAL; + + memcpy(network->wifi.last_connected_bssid, bssid, WIFI_BSSID_LEN_MAX); + + return 0; +} + +unsigned char *connman_network_get_last_connected_bssid(struct connman_network *network) +{ + return (unsigned char *)network->wifi.last_connected_bssid; +} + +void connman_network_set_assoc_reject_table(struct connman_network *network, + GHashTable *assoc_reject_table) +{ + if (!network) + return; + + if (!assoc_reject_table) + return; + + network->wifi.assoc_reject_table = assoc_reject_table; +} + +GHashTable *connman_network_get_assoc_reject_table(struct connman_network *network) +{ + if (!network) + return NULL; + + 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; +} +#endif + int connman_network_set_nameservers(struct connman_network *network, const char *nameservers) { @@ -2027,8 +2722,14 @@ int connman_network_set_nameservers(struct connman_network *network, nameservers_array = g_strsplit(nameservers, " ", 0); for (i = 0; nameservers_array[i]; i++) { +#if defined TIZEN_EXT + __connman_service_nameserver_append(service, + nameservers_array[i], false, + CONNMAN_IPCONFIG_TYPE_ALL); +#else __connman_service_nameserver_append(service, nameservers_array[i], false); +#endif } g_strfreev(nameservers_array); @@ -2062,6 +2763,9 @@ int connman_network_set_domain(struct connman_network *network, int connman_network_set_name(struct connman_network *network, const char *name) { +#if defined TIZEN_EXT + if (!simplified_log) +#endif DBG("network %p name %s", network, name); g_free(network->name); @@ -2082,6 +2786,9 @@ int connman_network_set_strength(struct connman_network *network, uint8_t strength) { network->strength = strength; +#if defined TIZEN_EXT + __connman_service_notify_strength_changed(network); +#endif return 0; } @@ -2159,6 +2866,9 @@ int connman_network_set_string(struct connman_network *network, g_free(network->wifi.security); network->wifi.security = g_strdup(value); } else if (g_str_equal(key, "WiFi.Passphrase")) { +#if defined TIZEN_EXT + DBG("ConnMan, %p key %s", network, key); +#endif g_free(network->wifi.passphrase); network->wifi.passphrase = g_strdup(value); } else if (g_str_equal(key, "WiFi.EAP")) { @@ -2203,6 +2913,23 @@ int connman_network_set_string(struct connman_network *network, } else if (g_str_equal(key, "WiFi.PinWPS")) { g_free(network->wifi.pin_wps); network->wifi.pin_wps = g_strdup(value); +#if defined TIZEN_EXT + } else if (g_str_equal(key, "WiFi.Connector")) { + g_free(network->wifi.connector); + network->wifi.connector = g_strdup(value); + } else if (g_str_equal(key, "WiFi.CSignKey")) { + g_free(network->wifi.c_sign_key); + network->wifi.c_sign_key = g_strdup(value); + } 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; } @@ -2260,6 +2987,18 @@ const char *connman_network_get_string(struct connman_network *network, return network->wifi.phase2_auth; else if (g_str_equal(key, "WiFi.PinWPS")) return network->wifi.pin_wps; +#if defined TIZEN_EXT + else if (g_str_equal(key, "WiFi.Connector")) + return network->wifi.connector; + else if (g_str_equal(key, "WiFi.CSignKey")) + 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; } @@ -2283,6 +3022,18 @@ int connman_network_set_bool(struct connman_network *network, network->wifi.wps_advertizing = value; else if (g_strcmp0(key, "WiFi.UseWPS") == 0) network->wifi.use_wps = value; +#if defined TIZEN_EXT + else if (g_strcmp0(key, "DefaultInternet") == 0) + network->default_internet = value; + else if (g_strcmp0(key, "WiFi.HS20AP") == 0) + 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.PMFRequired") == 0) + network->wifi.pmf_required = value; +#endif return -EINVAL; } @@ -2305,10 +3056,48 @@ bool connman_network_get_bool(struct connman_network *network, return network->wifi.wps_advertizing; else if (g_str_equal(key, "WiFi.UseWPS")) return network->wifi.use_wps; +#if defined TIZEN_EXT + else if (g_str_equal(key, "DefaultInternet")) + return network->default_internet; + else if (g_str_equal(key, "WiFi.HS20AP")) + return network->wifi.isHS20AP; + 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.PMFRequired")) + return network->wifi.pmf_required; +#endif return false; } +#if defined TIZEN_EXT +/** + * connman_network_set_vsie_list: + * @network: network structure + * @vsie_list: GSList pointer + * + * Set vendor specific list pointer + */ +void connman_network_set_vsie_list(struct connman_network *network, GSList *vsie_list) +{ + g_slist_free_full(network->wifi.vsie_list, g_free); + network->wifi.vsie_list = vsie_list; +} + +/** + * connman_network_get_vsie_list: + * @network: network structure + * + * Get vendor specific list pointer + */ +void *connman_network_get_vsie_list(struct connman_network *network) +{ + return network->wifi.vsie_list; +} +#endif + /** * connman_network_set_blob: * @network: network structure @@ -2329,6 +3118,16 @@ int connman_network_set_blob(struct connman_network *network, network->wifi.ssid_len = size; } else network->wifi.ssid_len = 0; +#ifdef TIZEN_EXT + } else if (g_str_equal(key, "WiFi.TRANSITION_MODE_SSID")) { + g_free(network->wifi.transition_mode_ssid); + network->wifi.transition_mode_ssid = g_try_malloc(size); + if (network->wifi.transition_mode_ssid) { + memcpy(network->wifi.transition_mode_ssid, data, size); + network->wifi.transition_mode_ssid_len = size; + } else + network->wifi.transition_mode_ssid_len = 0; +#endif } else { return -EINVAL; } @@ -2351,6 +3150,12 @@ const void *connman_network_get_blob(struct connman_network *network, if (size) *size = network->wifi.ssid_len; return network->wifi.ssid; +#ifdef TIZEN_EXT + } else if (g_str_equal(key, "WiFi.TRANSITION_MODE_SSID")) { + if (size) + *size = network->wifi.transition_mode_ssid_len; + return network->wifi.transition_mode_ssid; +#endif } return NULL;