1f1549183Sopenharmony_ciFrom 79428c1a372c39ecabf310802bd6025fbfed6971 Mon Sep 17 00:00:00 2001
2f1549183Sopenharmony_ciFrom: zhaoshenghua <zhaoshenghua1@huawei.com>
3f1549183Sopenharmony_ciDate: Tue, 27 Aug 2024 10:33:20 +0800
4f1549183Sopenharmony_ciSubject: [PATCH 4/4] fix codecheck
5f1549183Sopenharmony_ci
6f1549183Sopenharmony_ciSigned-off-by: zhaoshenghua <zhaoshenghua1@huawei.com>
7f1549183Sopenharmony_ci---
8f1549183Sopenharmony_ci wifi/frameworks/cj/BUILD.gn                |   6 +-
9f1549183Sopenharmony_ci wifi/frameworks/cj/include/ffi_structs.h   |  48 ++---
10f1549183Sopenharmony_ci wifi/frameworks/cj/include/wifi_callback.h |   5 +
11f1549183Sopenharmony_ci wifi/frameworks/cj/include/wifi_ffi.h      |  27 ---
12f1549183Sopenharmony_ci wifi/frameworks/cj/src/wifi_ffi.cpp        | 218 ++++++++++++---------
13f1549183Sopenharmony_ci 5 files changed, 150 insertions(+), 154 deletions(-)
14f1549183Sopenharmony_ci
15f1549183Sopenharmony_cidiff --git a/wifi/frameworks/cj/BUILD.gn b/wifi/frameworks/cj/BUILD.gn
16f1549183Sopenharmony_ciindex a83ae447e..c56e3973c 100644
17f1549183Sopenharmony_ci--- a/wifi/frameworks/cj/BUILD.gn
18f1549183Sopenharmony_ci+++ b/wifi/frameworks/cj/BUILD.gn
19f1549183Sopenharmony_ci@@ -34,12 +34,12 @@ ohos_shared_library("cj_wifi_ffi") {
20f1549183Sopenharmony_ci     "$WIFI_ROOT_DIR/frameworks/native/src",
21f1549183Sopenharmony_ci     "$WIFI_ROOT_DIR/services/wifi_standard/wifi_framework/wifi_toolkit/net_helper",
22f1549183Sopenharmony_ci     "$WIFI_ROOT_DIR/utils/inc",
23f1549183Sopenharmony_ci-    "./include"
24f1549183Sopenharmony_ci+    "./include",
25f1549183Sopenharmony_ci   ]
26f1549183Sopenharmony_ci 
27f1549183Sopenharmony_ci   sources = [
28f1549183Sopenharmony_ci-    "src/wifi_ffi.cpp",
29f1549183Sopenharmony_ci     "src/wifi_callback.cpp",
30f1549183Sopenharmony_ci+    "src/wifi_ffi.cpp",
31f1549183Sopenharmony_ci   ]
32f1549183Sopenharmony_ci 
33f1549183Sopenharmony_ci   deps = [ "$WIFI_ROOT_DIR/frameworks/native:wifi_sdk" ]
34f1549183Sopenharmony_ci@@ -67,4 +67,4 @@ ohos_shared_library("cj_wifi_ffi") {
35f1549183Sopenharmony_ci   innerapi_tags = [ "platformsdk" ]
36f1549183Sopenharmony_ci   part_name = "wifi"
37f1549183Sopenharmony_ci   subsystem_name = "communication"
38f1549183Sopenharmony_ci-}
39f1549183Sopenharmony_ci\ No newline at end of file
40f1549183Sopenharmony_ci+}
41f1549183Sopenharmony_cidiff --git a/wifi/frameworks/cj/include/ffi_structs.h b/wifi/frameworks/cj/include/ffi_structs.h
42f1549183Sopenharmony_ciindex e1f0d9b23..a729dbdcc 100644
43f1549183Sopenharmony_ci--- a/wifi/frameworks/cj/include/ffi_structs.h
44f1549183Sopenharmony_ci+++ b/wifi/frameworks/cj/include/ffi_structs.h
45f1549183Sopenharmony_ci@@ -20,14 +20,12 @@
46f1549183Sopenharmony_ci #include "cj_ffi/cj_common_ffi.h"
47f1549183Sopenharmony_ci 
48f1549183Sopenharmony_ci extern "C" {
49f1549183Sopenharmony_ci-    struct CWifiInfoElem
50f1549183Sopenharmony_ci-    {
51f1549183Sopenharmony_ci+    struct CWifiInfoElem {
52f1549183Sopenharmony_ci         uint32_t eid;
53f1549183Sopenharmony_ci         CArrUI8 content;
54f1549183Sopenharmony_ci     };
55f1549183Sopenharmony_ci 
56f1549183Sopenharmony_ci-    struct CWifiScanInfo
57f1549183Sopenharmony_ci-    {
58f1549183Sopenharmony_ci+    struct CWifiScanInfo {
59f1549183Sopenharmony_ci         char *ssid;
60f1549183Sopenharmony_ci         char *bssid;
61f1549183Sopenharmony_ci         int32_t bssidType;
62f1549183Sopenharmony_ci@@ -46,15 +44,12 @@ extern "C" {
63f1549183Sopenharmony_ci         bool isHiLinkNetwork;
64f1549183Sopenharmony_ci     };
65f1549183Sopenharmony_ci 
66f1549183Sopenharmony_ci-    struct WifiScanInfoArr
67f1549183Sopenharmony_ci-    {
68f1549183Sopenharmony_ci+    struct WifiScanInfoArr {
69f1549183Sopenharmony_ci         CWifiScanInfo *head;
70f1549183Sopenharmony_ci         int64_t size;
71f1549183Sopenharmony_ci     };
72f1549183Sopenharmony_ci 
73f1549183Sopenharmony_ci-    // TODO figure out clientCertAlias
74f1549183Sopenharmony_ci-    struct CWifiEapConfig
75f1549183Sopenharmony_ci-    {
76f1549183Sopenharmony_ci+    struct CWifiEapConfig {
77f1549183Sopenharmony_ci         int32_t eapMethod;                        /* EAP authentication mode:PEAP/TLS/TTLS/PWD/SIM/AKA/AKA' */
78f1549183Sopenharmony_ci         int32_t phase2Method;              /* Second stage authentication method */
79f1549183Sopenharmony_ci         char *identity;                   /* Identity information */
80f1549183Sopenharmony_ci@@ -73,16 +68,14 @@ extern "C" {
81f1549183Sopenharmony_ci         bool isNone;
82f1549183Sopenharmony_ci     };
83f1549183Sopenharmony_ci 
84f1549183Sopenharmony_ci-    struct CWifiWapiConfig
85f1549183Sopenharmony_ci-    {
86f1549183Sopenharmony_ci+    struct CWifiWapiConfig {
87f1549183Sopenharmony_ci         int32_t wapiPskType;
88f1549183Sopenharmony_ci         char *wapiAsCert;
89f1549183Sopenharmony_ci         char *wapiUserCert;
90f1549183Sopenharmony_ci         bool isNone;
91f1549183Sopenharmony_ci     };
92f1549183Sopenharmony_ci 
93f1549183Sopenharmony_ci-    struct CIpInfo
94f1549183Sopenharmony_ci-    {
95f1549183Sopenharmony_ci+    struct CIpInfo {
96f1549183Sopenharmony_ci         uint32_t ipAddress;
97f1549183Sopenharmony_ci         uint32_t gateway;
98f1549183Sopenharmony_ci         uint32_t netmask;
99f1549183Sopenharmony_ci@@ -92,8 +85,7 @@ extern "C" {
100f1549183Sopenharmony_ci         uint32_t leaseDuration;
101f1549183Sopenharmony_ci     };
102f1549183Sopenharmony_ci 
103f1549183Sopenharmony_ci-    struct CIpv6Info
104f1549183Sopenharmony_ci-    {
105f1549183Sopenharmony_ci+    struct CIpv6Info {
106f1549183Sopenharmony_ci         char *linkIpV6Address;
107f1549183Sopenharmony_ci         char *globalIpV6Address;
108f1549183Sopenharmony_ci         char *randomGlobalIpV6Address;
109f1549183Sopenharmony_ci@@ -105,8 +97,7 @@ extern "C" {
110f1549183Sopenharmony_ci         char *secondDNS;
111f1549183Sopenharmony_ci     };
112f1549183Sopenharmony_ci 
113f1549183Sopenharmony_ci-    struct CWifiP2PConfig
114f1549183Sopenharmony_ci-    {
115f1549183Sopenharmony_ci+    struct CWifiP2PConfig {
116f1549183Sopenharmony_ci         char *deviceAddress;
117f1549183Sopenharmony_ci         char *passphrase;
118f1549183Sopenharmony_ci         char *groupName;
119f1549183Sopenharmony_ci@@ -115,15 +106,13 @@ extern "C" {
120f1549183Sopenharmony_ci         int32_t deviceAddressType;
121f1549183Sopenharmony_ci     };
122f1549183Sopenharmony_ci 
123f1549183Sopenharmony_ci-    struct CWifiP2PLinkedInfo
124f1549183Sopenharmony_ci-    {
125f1549183Sopenharmony_ci+    struct CWifiP2PLinkedInfo {
126f1549183Sopenharmony_ci         int32_t connectState;
127f1549183Sopenharmony_ci         bool isGroupOwner;
128f1549183Sopenharmony_ci         char *groupOwnerAddr;
129f1549183Sopenharmony_ci     };
130f1549183Sopenharmony_ci 
131f1549183Sopenharmony_ci-    struct CWifiP2pDevice
132f1549183Sopenharmony_ci-    {
133f1549183Sopenharmony_ci+    struct CWifiP2pDevice {
134f1549183Sopenharmony_ci         char *deviceName;
135f1549183Sopenharmony_ci         char *deviceAddress;
136f1549183Sopenharmony_ci         char *primaryDeviceType;
137f1549183Sopenharmony_ci@@ -132,14 +121,12 @@ extern "C" {
138f1549183Sopenharmony_ci         int32_t deviceAddressType;
139f1549183Sopenharmony_ci     };
140f1549183Sopenharmony_ci 
141f1549183Sopenharmony_ci-    struct WifiP2pDeviceArr
142f1549183Sopenharmony_ci-    {
143f1549183Sopenharmony_ci+    struct WifiP2pDeviceArr {
144f1549183Sopenharmony_ci         CWifiP2pDevice *head;
145f1549183Sopenharmony_ci         int64_t size;
146f1549183Sopenharmony_ci     };
147f1549183Sopenharmony_ci 
148f1549183Sopenharmony_ci-    struct CWifiP2PGroupInfo
149f1549183Sopenharmony_ci-    {
150f1549183Sopenharmony_ci+    struct CWifiP2PGroupInfo {
151f1549183Sopenharmony_ci         bool isP2pGo;
152f1549183Sopenharmony_ci         CWifiP2pDevice ownerInfo;
153f1549183Sopenharmony_ci         char *passphrase;
154f1549183Sopenharmony_ci@@ -152,8 +139,7 @@ extern "C" {
155f1549183Sopenharmony_ci         char *goIpAddress;
156f1549183Sopenharmony_ci     };
157f1549183Sopenharmony_ci 
158f1549183Sopenharmony_ci-    struct CWifiLinkedInfo
159f1549183Sopenharmony_ci-    {
160f1549183Sopenharmony_ci+    struct CWifiLinkedInfo {
161f1549183Sopenharmony_ci         char *ssid;
162f1549183Sopenharmony_ci         char *bssid;
163f1549183Sopenharmony_ci         int32_t rssi;
164f1549183Sopenharmony_ci@@ -175,8 +161,7 @@ extern "C" {
165f1549183Sopenharmony_ci         bool isHiLinkNetwork;
166f1549183Sopenharmony_ci     };
167f1549183Sopenharmony_ci 
168f1549183Sopenharmony_ci-    struct CWifiDeviceConfig
169f1549183Sopenharmony_ci-    {
170f1549183Sopenharmony_ci+    struct CWifiDeviceConfig {
171f1549183Sopenharmony_ci         int32_t securityType;
172f1549183Sopenharmony_ci         int32_t bssidType;
173f1549183Sopenharmony_ci         bool isHiddenSsid;
174f1549183Sopenharmony_ci@@ -187,13 +172,10 @@ extern "C" {
175f1549183Sopenharmony_ci         CWifiWapiConfig wapiConfig;
176f1549183Sopenharmony_ci     };
177f1549183Sopenharmony_ci 
178f1549183Sopenharmony_ci-    struct WifiDeviceConfigArr
179f1549183Sopenharmony_ci-    {
180f1549183Sopenharmony_ci+    struct WifiDeviceConfigArr {
181f1549183Sopenharmony_ci         CWifiDeviceConfig *head;
182f1549183Sopenharmony_ci         int64_t size;
183f1549183Sopenharmony_ci     };
184f1549183Sopenharmony_ci }
185f1549183Sopenharmony_ci 
186f1549183Sopenharmony_ci-
187f1549183Sopenharmony_ci-
188f1549183Sopenharmony_ci #endif // CJ_WIFI_FFI_STRUCTS_H
189f1549183Sopenharmony_ci\ No newline at end of file
190f1549183Sopenharmony_cidiff --git a/wifi/frameworks/cj/include/wifi_callback.h b/wifi/frameworks/cj/include/wifi_callback.h
191f1549183Sopenharmony_ciindex dd49d04a9..e0af2d08c 100644
192f1549183Sopenharmony_ci--- a/wifi/frameworks/cj/include/wifi_callback.h
193f1549183Sopenharmony_ci+++ b/wifi/frameworks/cj/include/wifi_callback.h
194f1549183Sopenharmony_ci@@ -13,6 +13,9 @@
195f1549183Sopenharmony_ci  * limitations under the License.
196f1549183Sopenharmony_ci  */
197f1549183Sopenharmony_ci 
198f1549183Sopenharmony_ci+#ifndef CJ_WIFI_CALLBACK_H
199f1549183Sopenharmony_ci+#define CJ_WIFI_CALLBACK_H
200f1549183Sopenharmony_ci+
201f1549183Sopenharmony_ci #include <shared_mutex>
202f1549183Sopenharmony_ci 
203f1549183Sopenharmony_ci #include "ffi_structs.h"
204f1549183Sopenharmony_ci@@ -63,3 +66,5 @@ private:
205f1549183Sopenharmony_ci     OHOS::sptr<OHOS::ISystemAbilityStatusChange> mSaStatusListener = nullptr;
206f1549183Sopenharmony_ci };
207f1549183Sopenharmony_ci }
208f1549183Sopenharmony_ci+
209f1549183Sopenharmony_ci+#endif
210f1549183Sopenharmony_ci\ No newline at end of file
211f1549183Sopenharmony_cidiff --git a/wifi/frameworks/cj/include/wifi_ffi.h b/wifi/frameworks/cj/include/wifi_ffi.h
212f1549183Sopenharmony_ciindex e89d095ad..41eb646e5 100644
213f1549183Sopenharmony_ci--- a/wifi/frameworks/cj/include/wifi_ffi.h
214f1549183Sopenharmony_ci+++ b/wifi/frameworks/cj/include/wifi_ffi.h
215f1549183Sopenharmony_ci@@ -19,33 +19,6 @@
216f1549183Sopenharmony_ci #include "cj_ffi/cj_common_ffi.h"
217f1549183Sopenharmony_ci #include "ffi_structs.h"
218f1549183Sopenharmony_ci 
219f1549183Sopenharmony_ci-char *MallocCString(const std::string &origin);
220f1549183Sopenharmony_ci-
221f1549183Sopenharmony_ci-enum class SecTypeCj {
222f1549183Sopenharmony_ci-    /** Invalid security type */
223f1549183Sopenharmony_ci-    SEC_TYPE_INVALID = 0,
224f1549183Sopenharmony_ci-    /** Open */
225f1549183Sopenharmony_ci-    SEC_TYPE_OPEN = 1,
226f1549183Sopenharmony_ci-    /** Wired Equivalent Privacy (WEP) */
227f1549183Sopenharmony_ci-    SEC_TYPE_WEP = 2,
228f1549183Sopenharmony_ci-    /** Pre-shared key (PSK) */
229f1549183Sopenharmony_ci-    SEC_TYPE_PSK = 3,
230f1549183Sopenharmony_ci-    /** Simultaneous Authentication of Equals (SAE) */
231f1549183Sopenharmony_ci-    SEC_TYPE_SAE = 4,
232f1549183Sopenharmony_ci-    /** EAP authentication. */
233f1549183Sopenharmony_ci-    SEC_TYPE_EAP = 5,
234f1549183Sopenharmony_ci-    /** SUITE_B_192 192 bit level. */
235f1549183Sopenharmony_ci-    SEC_TYPE_EAP_SUITE_B = 6,
236f1549183Sopenharmony_ci-#ifdef ENABLE_NAPI_WIFI_MANAGER
237f1549183Sopenharmony_ci-    /** Opportunistic Wireless Encryption. */
238f1549183Sopenharmony_ci-    SEC_TYPE_OWE = 7,
239f1549183Sopenharmony_ci-#endif
240f1549183Sopenharmony_ci-    /** WAPI certificate to be specified. */
241f1549183Sopenharmony_ci-    SEC_TYPE_WAPI_CERT = 8,
242f1549183Sopenharmony_ci-    /** WAPI pre-shared key to be specified. */
243f1549183Sopenharmony_ci-    SEC_TYPE_WAPI_PSK = 9,
244f1549183Sopenharmony_ci-};
245f1549183Sopenharmony_ci-
246f1549183Sopenharmony_ci extern "C" {
247f1549183Sopenharmony_ci FFI_EXPORT int32_t FfiWifiIsWifiActive(bool &ret);
248f1549183Sopenharmony_ci FFI_EXPORT WifiScanInfoArr FfiWifiGetScanInfoList(int32_t &ret);
249f1549183Sopenharmony_cidiff --git a/wifi/frameworks/cj/src/wifi_ffi.cpp b/wifi/frameworks/cj/src/wifi_ffi.cpp
250f1549183Sopenharmony_ciindex 35f3b10a9..cc88c220b 100644
251f1549183Sopenharmony_ci--- a/wifi/frameworks/cj/src/wifi_ffi.cpp
252f1549183Sopenharmony_ci+++ b/wifi/frameworks/cj/src/wifi_ffi.cpp
253f1549183Sopenharmony_ci@@ -33,6 +33,31 @@ std::shared_ptr<WifiScan> cjWifiScanPtr = WifiScan::GetInstance(WIFI_SCAN_ABILIT
254f1549183Sopenharmony_ci std::shared_ptr<WifiP2p> cjWifiP2pPtr = WifiP2p::GetInstance(WIFI_P2P_ABILITY_ID);
255f1549183Sopenharmony_ci static const std::string EAP_METHOD[] = { "NONE", "PEAP", "TLS", "TTLS", "PWD", "SIM", "AKA", "AKA'" };
256f1549183Sopenharmony_ci 
257f1549183Sopenharmony_ci+enum class SecTypeCj {
258f1549183Sopenharmony_ci+    /** Invalid security type */
259f1549183Sopenharmony_ci+    SEC_TYPE_INVALID = 0,
260f1549183Sopenharmony_ci+    /** Open */
261f1549183Sopenharmony_ci+    SEC_TYPE_OPEN = 1,
262f1549183Sopenharmony_ci+    /** Wired Equivalent Privacy (WEP) */
263f1549183Sopenharmony_ci+    SEC_TYPE_WEP = 2,
264f1549183Sopenharmony_ci+    /** Pre-shared key (PSK) */
265f1549183Sopenharmony_ci+    SEC_TYPE_PSK = 3,
266f1549183Sopenharmony_ci+    /** Simultaneous Authentication of Equals (SAE) */
267f1549183Sopenharmony_ci+    SEC_TYPE_SAE = 4,
268f1549183Sopenharmony_ci+    /** EAP authentication. */
269f1549183Sopenharmony_ci+    SEC_TYPE_EAP = 5,
270f1549183Sopenharmony_ci+    /** SUITE_B_192 192 bit level. */
271f1549183Sopenharmony_ci+    SEC_TYPE_EAP_SUITE_B = 6,
272f1549183Sopenharmony_ci+#ifdef ENABLE_NAPI_WIFI_MANAGER
273f1549183Sopenharmony_ci+    /** Opportunistic Wireless Encryption. */
274f1549183Sopenharmony_ci+    SEC_TYPE_OWE = 7,
275f1549183Sopenharmony_ci+#endif
276f1549183Sopenharmony_ci+    /** WAPI certificate to be specified. */
277f1549183Sopenharmony_ci+    SEC_TYPE_WAPI_CERT = 8,
278f1549183Sopenharmony_ci+    /** WAPI pre-shared key to be specified. */
279f1549183Sopenharmony_ci+    SEC_TYPE_WAPI_PSK = 9,
280f1549183Sopenharmony_ci+};
281f1549183Sopenharmony_ci+
282f1549183Sopenharmony_ci static std::string EapMethod2Str(const int& method)
283f1549183Sopenharmony_ci {
284f1549183Sopenharmony_ci     if (method < 0 || method >= static_cast<int>(sizeof(EAP_METHOD) / sizeof(EAP_METHOD[0]))) {
285f1549183Sopenharmony_ci@@ -133,44 +158,45 @@ static void ProcessPassphrase(const SecTypeCj& securityType, WifiDeviceConfig& c
286f1549183Sopenharmony_ci     }
287f1549183Sopenharmony_ci }
288f1549183Sopenharmony_ci 
289f1549183Sopenharmony_ci-static void NativeInfoElems2Cj(const std::vector<WifiInfoElem>& infoElems, CWifiScanInfo &info)
290f1549183Sopenharmony_ci+static void SetInfoElemContent(WifiInfoElem &infoElem, CWifiInfoElem &cinfo)
291f1549183Sopenharmony_ci {
292f1549183Sopenharmony_ci     int valueStep = 2;
293f1549183Sopenharmony_ci-    int64_t size = static_cast<int64_t>(infoElems.size());
294f1549183Sopenharmony_ci-    if (size > 0) {
295f1549183Sopenharmony_ci-        info.infoElems = static_cast<CWifiInfoElem *>(malloc(sizeof(CWifiInfoElem) * size));
296f1549183Sopenharmony_ci-        if (info.infoElems == nullptr) {
297f1549183Sopenharmony_ci-            info.elemsSize = 0;
298f1549183Sopenharmony_ci+    const char *uStr = &infoElem.content[0];
299f1549183Sopenharmony_ci+    size_t len = infoElem.content.size();
300f1549183Sopenharmony_ci+    size_t inLen = static_cast<size_t>(infoElem.content.size() * valueStep + 1);
301f1549183Sopenharmony_ci+    char *buf = static_cast<char *>(calloc(inLen + 1, sizeof(char)));
302f1549183Sopenharmony_ci+    if (buf == nullptr) {
303f1549183Sopenharmony_ci+        return;
304f1549183Sopenharmony_ci+    }
305f1549183Sopenharmony_ci+    int pos = 0;
306f1549183Sopenharmony_ci+    for (size_t k = 0; k < len; ++k) {
307f1549183Sopenharmony_ci+        pos = (k << 1);
308f1549183Sopenharmony_ci+        if (snprintf_s(buf + pos, inLen - pos, inLen - pos - 1, "%02x", uStr[k]) < 0) {
309f1549183Sopenharmony_ci+            free(buf);
310f1549183Sopenharmony_ci+            buf = NULL;
311f1549183Sopenharmony_ci             return;
312f1549183Sopenharmony_ci         }
313f1549183Sopenharmony_ci-        info.elemsSize = size;
314f1549183Sopenharmony_ci-        for (int64_t i = 0; i < size; i++) {
315f1549183Sopenharmony_ci-            CWifiInfoElem elem;
316f1549183Sopenharmony_ci-            elem.eid = infoElems[i].id;
317f1549183Sopenharmony_ci-
318f1549183Sopenharmony_ci-            const char *uStr = &infoElems[i].content[0];
319f1549183Sopenharmony_ci-            size_t len = infoElems[i].content.size();
320f1549183Sopenharmony_ci-            size_t inLen = static_cast<size_t>(infoElems[i].content.size() * valueStep + 1);
321f1549183Sopenharmony_ci-            char *buf = (char *)calloc(inLen + 1, sizeof(char));
322f1549183Sopenharmony_ci-            if (buf == nullptr) {
323f1549183Sopenharmony_ci-                elem.content = CArrUI8{.head = nullptr, .size = 0};
324f1549183Sopenharmony_ci-                info.infoElems[i] = elem;
325f1549183Sopenharmony_ci-                continue;
326f1549183Sopenharmony_ci-            }
327f1549183Sopenharmony_ci-            int pos = 0;
328f1549183Sopenharmony_ci-            for (size_t k = 0; k < len; ++k) {
329f1549183Sopenharmony_ci-                pos = (k << 1);
330f1549183Sopenharmony_ci-                if (snprintf_s(buf + pos, inLen - pos, inLen - pos - 1, "%02x", uStr[k]) < 0) {
331f1549183Sopenharmony_ci-                    free(buf);
332f1549183Sopenharmony_ci-                    buf = NULL;
333f1549183Sopenharmony_ci-                    elem.content = CArrUI8{.head = nullptr, .size = 0};
334f1549183Sopenharmony_ci-                    info.infoElems[i] = elem;
335f1549183Sopenharmony_ci-                    continue;
336f1549183Sopenharmony_ci-                }
337f1549183Sopenharmony_ci-            }
338f1549183Sopenharmony_ci-            elem.content = CArrUI8{.head = reinterpret_cast<uint8_t *>(buf), .size = inLen - 1}; // TODO check size
339f1549183Sopenharmony_ci-            info.infoElems[i] = elem;
340f1549183Sopenharmony_ci-        }
341f1549183Sopenharmony_ci+    }
342f1549183Sopenharmony_ci+    cinfo.content.head = reinterpret_cast<uint8_t *>(buf);
343f1549183Sopenharmony_ci+    cinfo.content.size = inLen - 1;
344f1549183Sopenharmony_ci+}
345f1549183Sopenharmony_ci+
346f1549183Sopenharmony_ci+static void NativeInfoElems2Cj(const std::vector<WifiInfoElem>& infoElems, CWifiScanInfo &info)
347f1549183Sopenharmony_ci+{
348f1549183Sopenharmony_ci+    info.infoElems == nullptr;
349f1549183Sopenharmony_ci+    info.elemsSize = 0;
350f1549183Sopenharmony_ci+    int64_t size = static_cast<int64_t>(infoElems.size());
351f1549183Sopenharmony_ci+    if (size <= 0) {
352f1549183Sopenharmony_ci+        return;
353f1549183Sopenharmony_ci+    }
354f1549183Sopenharmony_ci+    info.infoElems = static_cast<CWifiInfoElem *>(malloc(sizeof(CWifiInfoElem) * size));
355f1549183Sopenharmony_ci+    if (info.infoElems == nullptr) {
356f1549183Sopenharmony_ci+        return;
357f1549183Sopenharmony_ci+    }
358f1549183Sopenharmony_ci+    info.elemsSize = size;
359f1549183Sopenharmony_ci+    for (int64_t i = 0; i < size; i++) {
360f1549183Sopenharmony_ci+        info.infoElems[i] = CWifiInfoElem{ .eid = infoElems[i].id, .content = CArrUI8{.head = nullptr, .size = 0}};
361f1549183Sopenharmony_ci+        SetInfoElemContent(infoElems[i], info.infoElems[i]);
362f1549183Sopenharmony_ci     }
363f1549183Sopenharmony_ci }
364f1549183Sopenharmony_ci 
365f1549183Sopenharmony_ci@@ -187,7 +213,7 @@ static int32_t ScanInfo2Cj(const std::vector<WifiScanInfo>& scanInfos, WifiScanI
366f1549183Sopenharmony_ci         infos.size = size;
367f1549183Sopenharmony_ci 
368f1549183Sopenharmony_ci         uint32_t idx = 0;
369f1549183Sopenharmony_ci-        for(auto& each : scanInfos) {
370f1549183Sopenharmony_ci+        for (auto& each : scanInfos) {
371f1549183Sopenharmony_ci             CWifiScanInfo info;
372f1549183Sopenharmony_ci             info.ssid = MallocCString(each.ssid);
373f1549183Sopenharmony_ci             info.bssid = MallocCString(each.bssid);
374f1549183Sopenharmony_ci@@ -275,6 +301,38 @@ static int Str2EapMethod(const std::string &str)
375f1549183Sopenharmony_ci     return 0;
376f1549183Sopenharmony_ci }
377f1549183Sopenharmony_ci 
378f1549183Sopenharmony_ci+static void EapConfig2C(WifiEapConfig &wifiEapConfig, CWifiEapConfig &eapConfig)
379f1549183Sopenharmony_ci+{
380f1549183Sopenharmony_ci+    eapConfig.eapMethod = Str2EapMethod(wifiEapConfig.eap);
381f1549183Sopenharmony_ci+    eapConfig.phase2Method = static_cast<int>(wifiEapConfig.phase2Method);
382f1549183Sopenharmony_ci+    eapConfig.identity = MallocCString(wifiEapConfig.identity);
383f1549183Sopenharmony_ci+    eapConfig.anonymousIdentity = MallocCString(wifiEapConfig.anonymousIdentity);
384f1549183Sopenharmony_ci+    eapConfig.password = MallocCString(wifiEapConfig.password);
385f1549183Sopenharmony_ci+    eapConfig.caCertAlias = MallocCString(wifiEapConfig.caCertAlias);
386f1549183Sopenharmony_ci+    eapConfig.caPath = MallocCString(wifiEapConfig.caCertPath);
387f1549183Sopenharmony_ci+    eapConfig.clientCertAlias = MallocCString(wifiEapConfig.caCertAlias);
388f1549183Sopenharmony_ci+    CArrUI8 arr{.head = nullptr, .size = 0};
389f1549183Sopenharmony_ci+    int64_t size = wifiEapConfig.certEntry.size();
390f1549183Sopenharmony_ci+    if (size > 0) {
391f1549183Sopenharmony_ci+        arr.head = static_cast<uint8_t *>(malloc(sizeof(uint8_t) * size));
392f1549183Sopenharmony_ci+        if (arr.head != nullptr) {
393f1549183Sopenharmony_ci+            uint32_t idx = 0;
394f1549183Sopenharmony_ci+            for (auto& each : wifiEapConfig.certEntry) {
395f1549183Sopenharmony_ci+                arr.head[idx] = each;
396f1549183Sopenharmony_ci+                idx++;
397f1549183Sopenharmony_ci+            }
398f1549183Sopenharmony_ci+        }
399f1549183Sopenharmony_ci+    }
400f1549183Sopenharmony_ci+    eapConfig.certEntry = arr;
401f1549183Sopenharmony_ci+    eapConfig.certPassword = MallocCString(wifiEapConfig.certPassword);
402f1549183Sopenharmony_ci+    eapConfig.altSubjectMatch = MallocCString(wifiEapConfig.altSubjectMatch);
403f1549183Sopenharmony_ci+    eapConfig.domainSuffixMatch = MallocCString(wifiEapConfig.domainSuffixMatch);
404f1549183Sopenharmony_ci+    eapConfig.realm = MallocCString(wifiEapConfig.realm);
405f1549183Sopenharmony_ci+    eapConfig.plmn = MallocCString(wifiEapConfig.plmn);
406f1549183Sopenharmony_ci+    eapConfig.eapSubId = wifiEapConfig.eapSubId;
407f1549183Sopenharmony_ci+    eapConfig.isNone = false;
408f1549183Sopenharmony_ci+}
409f1549183Sopenharmony_ci+
410f1549183Sopenharmony_ci static void DeviceConfig2C(WifiDeviceConfig &config, CWifiDeviceConfig &cfg)
411f1549183Sopenharmony_ci {
412f1549183Sopenharmony_ci     UpdateSecurityTypeAndPreSharedKey(config);
413f1549183Sopenharmony_ci@@ -288,32 +346,7 @@ static void DeviceConfig2C(WifiDeviceConfig &config, CWifiDeviceConfig &cfg)
414f1549183Sopenharmony_ci     SecTypeCj type = ConvertKeyMgmtToSecType(config.keyMgmt);
415f1549183Sopenharmony_ci     cfg.securityType = static_cast<int32_t>(type);
416f1549183Sopenharmony_ci     if (type == SecTypeCj::SEC_TYPE_EAP || type == SecTypeCj::SEC_TYPE_EAP_SUITE_B) {
417f1549183Sopenharmony_ci-        cfg.eapConfig.eapMethod = Str2EapMethod(config.wifiEapConfig.eap);
418f1549183Sopenharmony_ci-        cfg.eapConfig.phase2Method = static_cast<int>(config.wifiEapConfig.phase2Method);
419f1549183Sopenharmony_ci-        cfg.eapConfig.identity = MallocCString(config.wifiEapConfig.identity);
420f1549183Sopenharmony_ci-        cfg.eapConfig.anonymousIdentity = MallocCString(config.wifiEapConfig.anonymousIdentity);
421f1549183Sopenharmony_ci-        cfg.eapConfig.password = MallocCString(config.wifiEapConfig.password);
422f1549183Sopenharmony_ci-        cfg.eapConfig.caCertAlias = MallocCString(config.wifiEapConfig.caCertAlias);
423f1549183Sopenharmony_ci-        cfg.eapConfig.caPath = MallocCString(config.wifiEapConfig.caCertPath);
424f1549183Sopenharmony_ci-        cfg.eapConfig.clientCertAlias = MallocCString(config.wifiEapConfig.caCertAlias); // ?
425f1549183Sopenharmony_ci-        CArrUI8 arr{.head = nullptr, .size = 0};
426f1549183Sopenharmony_ci-        int64_t size = config.wifiEapConfig.certEntry.size();
427f1549183Sopenharmony_ci-        arr.head = static_cast<uint8_t *>(malloc(sizeof(uint8_t) * size));
428f1549183Sopenharmony_ci-        if (arr.head != nullptr) {
429f1549183Sopenharmony_ci-            uint32_t idx = 0;
430f1549183Sopenharmony_ci-            for (auto& each : config.wifiEapConfig.certEntry) {
431f1549183Sopenharmony_ci-                arr.head[idx] = each;
432f1549183Sopenharmony_ci-                idx++;
433f1549183Sopenharmony_ci-            }
434f1549183Sopenharmony_ci-        }
435f1549183Sopenharmony_ci-        cfg.eapConfig.certEntry = arr;
436f1549183Sopenharmony_ci-        cfg.eapConfig.certPassword = MallocCString(config.wifiEapConfig.certPassword);
437f1549183Sopenharmony_ci-        cfg.eapConfig.altSubjectMatch = MallocCString(config.wifiEapConfig.altSubjectMatch);
438f1549183Sopenharmony_ci-        cfg.eapConfig.domainSuffixMatch = MallocCString(config.wifiEapConfig.domainSuffixMatch);
439f1549183Sopenharmony_ci-        cfg.eapConfig.realm = MallocCString(config.wifiEapConfig.realm);
440f1549183Sopenharmony_ci-        cfg.eapConfig.plmn = MallocCString(config.wifiEapConfig.plmn);
441f1549183Sopenharmony_ci-        cfg.eapConfig.eapSubId = config.wifiEapConfig.eapSubId;
442f1549183Sopenharmony_ci-        cfg.eapConfig.isNone = false;
443f1549183Sopenharmony_ci+        EapConfig2C(config.wifiEapConfig, cfg.eapConfig);
444f1549183Sopenharmony_ci     }
445f1549183Sopenharmony_ci     if (type == SecTypeCj::SEC_TYPE_WAPI_CERT || type == SecTypeCj::SEC_TYPE_WAPI_PSK) {
446f1549183Sopenharmony_ci         cfg.wapiConfig.wapiPskType = config.wifiWapiConfig.wapiPskType;
447f1549183Sopenharmony_ci@@ -525,31 +558,35 @@ int32_t FfiWifiGetCurrentGroup(CWifiP2PGroupInfo &info)
448f1549183Sopenharmony_ci     }
449f1549183Sopenharmony_ci     WifiP2pGroupInfo groupInfo;
450f1549183Sopenharmony_ci     ErrCode code = cjWifiP2pPtr->GetCurrentGroup(groupInfo);
451f1549183Sopenharmony_ci-    if (code == WIFI_OPT_SUCCESS) {
452f1549183Sopenharmony_ci-        info.isP2pGo = groupInfo.IsGroupOwner();
453f1549183Sopenharmony_ci-        DeviceInfo2Cj(groupInfo.GetOwner(), info.ownerInfo);
454f1549183Sopenharmony_ci-        info.passphrase = MallocCString(groupInfo.GetPassphrase());
455f1549183Sopenharmony_ci-        info.interfaceName = MallocCString(groupInfo.GetInterface());
456f1549183Sopenharmony_ci-        info.groupName = MallocCString(groupInfo.GetGroupName());
457f1549183Sopenharmony_ci-        info.goIpAddress = MallocCString(groupInfo.GetGoIpAddress());
458f1549183Sopenharmony_ci-        info.networkId = groupInfo.GetNetworkId();
459f1549183Sopenharmony_ci-        info.frequency = groupInfo.GetFrequency();
460f1549183Sopenharmony_ci-        info.clientSize = 0;
461f1549183Sopenharmony_ci-        if (!groupInfo.IsClientDevicesEmpty()) {
462f1549183Sopenharmony_ci-            const std::vector<OHOS::Wifi::WifiP2pDevice>& vecDevices = groupInfo.GetClientDevices();
463f1549183Sopenharmony_ci-            int64_t size = static_cast<int64_t>(vecDevices.size());
464f1549183Sopenharmony_ci-            info.clientDevices = static_cast<CWifiP2pDevice *>(malloc(sizeof(CWifiP2pDevice) * size));
465f1549183Sopenharmony_ci-            if (info.clientDevices != nullptr) {
466f1549183Sopenharmony_ci-                info.clientSize = size;
467f1549183Sopenharmony_ci-                uint32_t idx = 0;
468f1549183Sopenharmony_ci-                for (auto& each : vecDevices) {
469f1549183Sopenharmony_ci-                    CWifiP2pDevice device;
470f1549183Sopenharmony_ci-                    DeviceInfo2Cj(each, device);
471f1549183Sopenharmony_ci-                    info.clientDevices[idx] = device;
472f1549183Sopenharmony_ci-                    idx++;
473f1549183Sopenharmony_ci-                }
474f1549183Sopenharmony_ci-            }
475f1549183Sopenharmony_ci-        }
476f1549183Sopenharmony_ci+    if (code != WIFI_OPT_SUCCESS) {
477f1549183Sopenharmony_ci+        return code;
478f1549183Sopenharmony_ci+    }
479f1549183Sopenharmony_ci+    info.isP2pGo = groupInfo.IsGroupOwner();
480f1549183Sopenharmony_ci+    DeviceInfo2Cj(groupInfo.GetOwner(), info.ownerInfo);
481f1549183Sopenharmony_ci+    info.passphrase = MallocCString(groupInfo.GetPassphrase());
482f1549183Sopenharmony_ci+    info.interfaceName = MallocCString(groupInfo.GetInterface());
483f1549183Sopenharmony_ci+    info.groupName = MallocCString(groupInfo.GetGroupName());
484f1549183Sopenharmony_ci+    info.goIpAddress = MallocCString(groupInfo.GetGoIpAddress());
485f1549183Sopenharmony_ci+    info.networkId = groupInfo.GetNetworkId();
486f1549183Sopenharmony_ci+    info.frequency = groupInfo.GetFrequency();
487f1549183Sopenharmony_ci+    info.clientSize = 0;
488f1549183Sopenharmony_ci+    info.clientDevices = nullptr;
489f1549183Sopenharmony_ci+    if (groupInfo.IsClientDevicesEmpty()) {
490f1549183Sopenharmony_ci+        return code;
491f1549183Sopenharmony_ci+    }
492f1549183Sopenharmony_ci+    const std::vector<OHOS::Wifi::WifiP2pDevice>& vecDevices = groupInfo.GetClientDevices();
493f1549183Sopenharmony_ci+    int64_t size = static_cast<int64_t>(vecDevices.size());
494f1549183Sopenharmony_ci+    info.clientDevices = static_cast<CWifiP2pDevice *>(malloc(sizeof(CWifiP2pDevice) * size));
495f1549183Sopenharmony_ci+    if (info.clientDevices == nullptr) {
496f1549183Sopenharmony_ci+        return code;
497f1549183Sopenharmony_ci+    }
498f1549183Sopenharmony_ci+    info.clientSize = size;
499f1549183Sopenharmony_ci+    uint32_t idx = 0;
500f1549183Sopenharmony_ci+    for (auto& each : vecDevices) {
501f1549183Sopenharmony_ci+        CWifiP2pDevice device;
502f1549183Sopenharmony_ci+        DeviceInfo2Cj(each, device);
503f1549183Sopenharmony_ci+        info.clientDevices[idx] = device;
504f1549183Sopenharmony_ci+        idx++;
505f1549183Sopenharmony_ci     }
506f1549183Sopenharmony_ci     return code;
507f1549183Sopenharmony_ci }
508f1549183Sopenharmony_ci@@ -669,7 +706,8 @@ int32_t FfiWifiAddCandidateConfig(CWifiDeviceConfig cfg, int32_t &ret)
509f1549183Sopenharmony_ci         config.wifiEapConfig.caCertPath = std::string(cfg.eapConfig.caPath);
510f1549183Sopenharmony_ci         config.wifiEapConfig.clientCert = std::string(cfg.eapConfig.clientCertAlias);
511f1549183Sopenharmony_ci         config.wifiEapConfig.privateKey = std::string(cfg.eapConfig.clientCertAlias);
512f1549183Sopenharmony_ci-        config.wifiEapConfig.certEntry = std::vector<uint8_t>(cfg.eapConfig.certEntry.head, cfg.eapConfig.certEntry.head + cfg.eapConfig.certEntry.size);
513f1549183Sopenharmony_ci+        config.wifiEapConfig.certEntry = std::vector<uint8_t>(cfg.eapConfig.certEntry.head,
514f1549183Sopenharmony_ci+            cfg.eapConfig.certEntry.head + cfg.eapConfig.certEntry.size);
515f1549183Sopenharmony_ci         if (strncpy_s(config.wifiEapConfig.certPassword, sizeof(config.wifiEapConfig.certPassword),
516f1549183Sopenharmony_ci             cfg.eapConfig.certPassword, strlen(cfg.eapConfig.certPassword)) != EOK) {
517f1549183Sopenharmony_ci             WIFI_LOGE("%{public}s: failed to copy", __func__);
518f1549183Sopenharmony_ci@@ -706,14 +744,13 @@ WifiDeviceConfigArr FfiWifiGetCandidateConfigs(int32_t &code)
519f1549183Sopenharmony_ci     int64_t size = static_cast<int64_t>(vecDeviceConfigs.size());
520f1549183Sopenharmony_ci     if (code == WIFI_OPT_SUCCESS && size > 0) {
521f1549183Sopenharmony_ci         WIFI_LOGI("Get candidate device configs size: %{public}zu", vecDeviceConfigs.size());
522f1549183Sopenharmony_ci-        // transform
523f1549183Sopenharmony_ci         arr.head = static_cast<CWifiDeviceConfig *>(malloc(sizeof(CWifiDeviceConfig) * size));
524f1549183Sopenharmony_ci         if (arr.head == nullptr) {
525f1549183Sopenharmony_ci             code = WIFI_OPT_FAILED;
526f1549183Sopenharmony_ci             return arr;
527f1549183Sopenharmony_ci         }
528f1549183Sopenharmony_ci         arr.size = size;
529f1549183Sopenharmony_ci-        for(int64_t i = 0; i < size; i++) {
530f1549183Sopenharmony_ci+        for (int64_t i = 0; i < size; i++) {
531f1549183Sopenharmony_ci             CWifiDeviceConfig cfg;
532f1549183Sopenharmony_ci             DeviceConfig2C(vecDeviceConfigs[i], cfg);
533f1549183Sopenharmony_ci             arr.head[i] = cfg;
534f1549183Sopenharmony_ci@@ -739,6 +776,5 @@ int32_t FfiWifiWifiOff(char* type)
535f1549183Sopenharmony_ci     }
536f1549183Sopenharmony_ci     return CjEventRegister::GetInstance().UnRegister(eventType);
537f1549183Sopenharmony_ci }
538f1549183Sopenharmony_ci-
539f1549183Sopenharmony_ci }
540f1549183Sopenharmony_ci-}
541f1549183Sopenharmony_ci\ No newline at end of file
542f1549183Sopenharmony_ci+} //OHOS::Wifi
543f1549183Sopenharmony_ci\ No newline at end of file
544f1549183Sopenharmony_ci-- 
545f1549183Sopenharmony_ci2.34.1
546f1549183Sopenharmony_ci
547