diff --git a/wifi/frameworks/js/napi/src/wifi_napi_device.cpp b/wifi/frameworks/js/napi/src/wifi_napi_device.cpp index 3580bd4803122647d969b123bacb4eb2b38ba2c5..b09cb2ddfc5c694c87fe34a8d575b97951604566 100644 --- a/wifi/frameworks/js/napi/src/wifi_napi_device.cpp +++ b/wifi/frameworks/js/napi/src/wifi_napi_device.cpp @@ -431,19 +431,17 @@ napi_value ConfigStaticIp(const napi_env& env, const napi_value& object, WifiDev NAPI_CALL(env, napi_has_named_property(env, object, "family", &hasProperty)); if (!hasProperty) { WIFI_LOGE("ConfigStaticIp, Js has no property: family."); - cppConfig.wifiIpConfig.staticIpAddress.ipAddress.address.family = IPV4_ADDRESS_TYPE; return ConfigStaticIpv4(env, object, cppConfig); } napi_value family; napi_get_named_property(env, object, "family", &family); JsObjectToInt(env, object, "family", cppConfig.wifiIpConfig.staticIpAddress.ipAddress.address.family); - if (cppConfig.wifiIpConfig.staticIpAddress.ipAddress.address.family == IPV4_ADDRESS_TYPE) { - ConfigStaticIpv4(env, object, cppConfig); - } else if (cppConfig.wifiIpConfig.staticIpAddress.ipAddress.address.family == IPV6_ADDRESS_TYPE) { - ConfigStaticIpv6(env, object, cppConfig); + if (cppConfig.wifiIpConfig.staticIpAddress.ipAddress.address.family == IPV6_ADDRESS_TYPE) { + return ConfigStaticIpv6(env, object, cppConfig); + } else { + return ConfigStaticIpv4(env, object, cppConfig); } - return CreateInt32(env); } @@ -461,6 +459,7 @@ napi_value ConfigStaticIpv4(const napi_env& env, const napi_value& object, WifiD } napi_get_named_property(env, object, "staticIp", &staticIp); JsObjectToUint(env, staticIp, "ipAddress", cppConfig.wifiIpConfig.staticIpAddress.ipAddress.address.addressIpv4); + cppConfig.wifiIpConfig.staticIpAddress.ipAddress.address.family = IPV4_ADDRESS_TYPE; JsObjectToUint(env, staticIp, "gateway", cppConfig.wifiIpConfig.staticIpAddress.gateway.addressIpv4); JsObjectToInt(env, staticIp, "prefixLength", cppConfig.wifiIpConfig.staticIpAddress.ipAddress.prefixLength); NAPI_CALL(env, napi_has_named_property(env, staticIp, "dnsServers", &hasProperty)); @@ -500,6 +499,7 @@ napi_value ConfigStaticIpv6(const napi_env& env, const napi_value& object, WifiD JsObjectToString(env, staticIp, "ipAddress", NAPI_MAX_STR_LENT, ipv6Temp); cppConfig.wifiIpConfig.staticIpAddress.ipAddress.address.SetIpv6Address( IpTools::ConvertIpv6AddressToCompleted(ipv6Temp)); + cppConfig.wifiIpConfig.staticIpAddress.ipAddress.address.family = IPV6_ADDRESS_TYPE; std::string gatewayTemp; JsObjectToString(env, staticIp, "gateway", NAPI_MAX_STR_LENT, gatewayTemp); cppConfig.wifiIpConfig.staticIpAddress.gateway.SetIpv6Address( @@ -1441,10 +1441,10 @@ static SecTypeJs ConvertKeyMgmtToSecType(const std::string& keyMgmt) static void IpConfigToJs(const napi_env& env, const WifiIpConfig& wifiIpConfig, napi_value& result) { - if (wifiIpConfig.staticIpAddress.ipAddress.address.family == IPV4_ADDRESS_TYPE) { - Ipv4ConfigToJs(env, wifiIpConfig, result); - } else if (wifiIpConfig.staticIpAddress.ipAddress.address.family == IPV6_ADDRESS_TYPE) { + if (wifiIpConfig.staticIpAddress.ipAddress.address.family == IPV6_ADDRESS_TYPE) { Ipv6ConfigToJs(env, wifiIpConfig, result); + } else { + Ipv4ConfigToJs(env, wifiIpConfig, result); } } @@ -1463,9 +1463,11 @@ void Ipv4ConfigToJs(const napi_env& env, const WifiIpConfig& wifiIpConfig, napi_ napi_value value; if (napi_create_int32(env, vecDns[i], &value) != napi_ok) { WIFI_LOGE("Ipv4ConfigToJs, Ip config to js create int32 error!"); + return; } if (napi_set_element(env, dnsArray, i, value) != napi_ok) { WIFI_LOGE("Ipv4ConfigToJs, Ip config to js set element error!"); + return; } } if (napi_set_named_property(env, ipCfgObj, "dnsServers", dnsArray) != napi_ok) { @@ -1479,6 +1481,7 @@ void Ipv4ConfigToJs(const napi_env& env, const WifiIpConfig& wifiIpConfig, napi_ napi_value value; if (napi_create_string_utf8(env, vecDomains[i].c_str(), NAPI_AUTO_LENGTH, &value) != napi_ok) { WIFI_LOGE("Ipv4ConfigToJs, Ip config to js create utf8 string error!"); + return; } if (napi_set_element(env, domainsArray, i, value) != napi_ok) { WIFI_LOGE("Ipv4ConfigToJs, Ip config to js set element error!"); @@ -1510,6 +1513,7 @@ void Ipv6ConfigToJs(const napi_env& env, const WifiIpConfig& wifiIpConfig, napi_ napi_value value; if (napi_create_string_utf8(env, vecDns[i].c_str(), NAPI_AUTO_LENGTH, &value) != napi_ok) { WIFI_LOGE("Ipv6ConfigToJs, Ipv6 config to js create utf8 string error!"); + return; } if (napi_set_element(env, dnsArray, i, value) != napi_ok) { WIFI_LOGE("Ipv6ConfigToJs, Ipv6 config to js set element error!"); diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_state_machine.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_state_machine.cpp index f4fd08d4320a5ff690ae9571c5a41fa2c4687446..b576a838a0dc4848d307a341df18bf9244770b06 100755 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_state_machine.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_state_machine.cpp @@ -1649,6 +1649,16 @@ StaStateMachine::GetIpState::~GetIpState() void StaStateMachine::GetIpState::GoInState() { WIFI_LOGI("GetIpState GoInState function. m_instId=%{public}d", pStaStateMachine->m_instId); + + // 静态ipv6,stop DHCP + WifiDeviceConfig wificonfig; + if (WifiSettings::GetInstance().GetDeviceConfig(pStaStateMachine->linkedInfo.networkId, wificonfig, + pStaStateMachine->m_instId) == 0 && + wificonfig.wifiIpConfig.assignMethod == AssignIpMethod::STATIC && + wificonfig.wifiIpConfig.staticIpAddress.ipAddress.address.family == 1) { + WIFI_LOGI("Static IPv6 stop DHCP.\n"); + pStaStateMachine->StopDhcp(false, true); + } #ifdef WIFI_DHCP_DISABLED pStaStateMachine->SaveDiscReason(DisconnectedReason::DISC_REASON_DEFAULT); pStaStateMachine->SaveLinkstate(ConnState::CONNECTED, DetailedState::WORKING); @@ -3367,8 +3377,12 @@ void StaStateMachine::DhcpResultNotify::DhcpResultNotifyEvent(DhcpReturnCode res void StaStateMachine::DhcpResultNotify::TryToCloseDhcpClient(int iptype) { std::string ifname = WifiConfigCenter::GetInstance().GetStaIfaceName(pStaStateMachine->m_instId); - if (iptype == 1) { - WIFI_LOGI("TryToCloseDhcpClient iptype ipv6 return"); + WifiDeviceConfig config; + int ret = WifiSettings::GetInstance().GetDeviceConfig(pStaStateMachine->linkedInfo.networkId, + config, pStaStateMachine->m_instId); + int family = config.wifiIpConfig.staticIpAddress.ipAddress.address.family; + if (iptype == 1 && (config.wifiIpConfig.assignMethod != AssignIpMethod::STATIC || family == 0 || ret != 0)) { + WIFI_LOGI("TryToCloseDhcpClient DHCP or StaticV4: iptype ipv6 return"); return; } diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/net_helper/ip_tools.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/net_helper/ip_tools.cpp index 1a0b0f429b47306452bce61b330161f6246d48ff..1c4f3a762b1d07266ca2fd4ec218345e008ccd4e 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/net_helper/ip_tools.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/net_helper/ip_tools.cpp @@ -301,8 +301,8 @@ std::string IpTools::ConvertIpv6AddressToCompleted(const std::string &address) if (seg.empty()) { seg = "0"; } - unsigned int num = std::stoul(seg, nullptr, 16); - stream << std::setw(bitNum) << std::setfill('0') << std::hex << num; + int value = CheckDataLegalHex(seg); + stream << std::setw(bitNum) << std::setfill('0') << std::hex << value; } return stream.str(); }