diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p_service_impl.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p_service_impl.cpp index d835c8c04002456249f8130502e035f9aa720f8f..126b5a6f1aa3c49531114ce6a44be4cad9a4d720 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p_service_impl.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p_service_impl.cpp @@ -904,7 +904,7 @@ ErrCode WifiP2pServiceImpl::Hid2dConnect(const Hid2dConnectConfig& config) ErrCode WifiP2pServiceImpl::Hid2dConfigIPAddr(const std::string& ifName, const IpAddrInfo& ipInfo) { WIFI_LOGI("Hid2dConfigIPAddr, ifName: %{public}s", ifName.c_str()); - IfConfig::GetInstance().AddIpAddr(ifName, ipInfo.ip, ipInfo.netmask, IpType::IPTYPE_IPV4); + IfConfig::GetInstance().AddIpAddr(ifName, ipInfo.ip, ipInfo.netmask, IsIpv4Address(ipInfo.ip) ? IpType::IPTYPE_IPV4 : IpType::IPTYPE_IPV6); WifiNetAgent::GetInstance().AddRoute(ifName, ipInfo.ip, IpTools::GetMaskLength(ipInfo.netmask)); return WIFI_OPT_SUCCESS; } diff --git a/wifi/utils/inc/wifi_common_util.h b/wifi/utils/inc/wifi_common_util.h index dcd1ee00c1ce5ec4f5dd6e4104fcf66e681d7264..a86f9e729596773032e7b5c58f3a872b18a57a4d 100644 --- a/wifi/utils/inc/wifi_common_util.h +++ b/wifi/utils/inc/wifi_common_util.h @@ -190,6 +190,8 @@ int FrequencyToChannel(int freq); * @return int - frequency */ int ChannelToFrequency(int channel); + +bool IsIpv4Address(const string& ipAddr); } // namespace Wifi } // namespace OHOS #endif \ No newline at end of file diff --git a/wifi/utils/src/wifi_common_util.cpp b/wifi/utils/src/wifi_common_util.cpp index 77c861b74f1dc69d68189fe9acb7e9b5b48b2e33..a45ca0d5149c9fd1f77a11315c3efb2469d17749 100644 --- a/wifi/utils/src/wifi_common_util.cpp +++ b/wifi/utils/src/wifi_common_util.cpp @@ -17,6 +17,8 @@ #include #include #include +#include + #ifndef OHOS_ARCH_LITE #include "app_mgr_client.h" #include "bundle_mgr_interface.h" @@ -350,5 +352,10 @@ int ChannelToFrequency(int channel) return INVALID_FREQ_OR_CHANNEL; } +bool IsIpv4Address(const std::string& ipAddr) { + struct sockaddr_in sa; + return inet_pton(AF_INET, ipAddr.c_str(), &(sa.sin_addr))!=0; +} + } // namespace Wifi } // namespace OHOS