1 /*
2 * Copyright (c) 2021-2025 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "lnn_node_info.h"
17
18 #include <string.h>
19
20 #include <securec.h>
21
22 #include "anonymizer.h"
23 #include "lnn_log.h"
24 #include "softbus_adapter_crypto.h"
25 #include "softbus_error_code.h"
26 #include "softbus_utils.h"
27
28 #define DYNAMIC_LEVEL_INVALID 0xFFFF
29 #define STATIC_LEVEL_INVALID 0xFFFF
30 #define SWITCH_LEVEL_INVALID 0xFFFFFFFF
31 #define SWTICH_LENGTH_INVALID 0xFFFF
32 #define SWITCH_MAX_LENGTH 24
33
LnnHasDiscoveryType(const NodeInfo * info,DiscoveryType type)34 bool LnnHasDiscoveryType(const NodeInfo *info, DiscoveryType type)
35 {
36 if (info == NULL || type >= DISCOVERY_TYPE_COUNT) {
37 LNN_LOGE(LNN_LEDGER, "para error");
38 return false;
39 }
40 if (((uint32_t)info->discoveryType & (1 << (uint32_t)type)) != 0) {
41 return true;
42 }
43 return false;
44 }
45
LnnGetDeviceUdid(const NodeInfo * info)46 const char *LnnGetDeviceUdid(const NodeInfo *info)
47 {
48 if (info == NULL) {
49 return NULL;
50 }
51 return info->deviceInfo.deviceUdid;
52 }
53
LnnSetDeviceUdid(NodeInfo * info,const char * udid)54 int32_t LnnSetDeviceUdid(NodeInfo *info, const char *udid)
55 {
56 if (info == NULL || udid == NULL) {
57 return SOFTBUS_INVALID_PARAM;
58 }
59 if (strncpy_s(info->deviceInfo.deviceUdid, UDID_BUF_LEN, udid, strlen(udid)) != EOK) {
60 LNN_LOGE(LNN_LEDGER, "STR COPY ERROR");
61 return SOFTBUS_MEM_ERR;
62 }
63 return SOFTBUS_OK;
64 }
65
LnnGetDeviceUuid(const NodeInfo * info)66 const char *LnnGetDeviceUuid(const NodeInfo *info)
67 {
68 if (info == NULL) {
69 return NULL;
70 }
71 return info->uuid;
72 }
73
LnnSetDiscoveryType(NodeInfo * info,DiscoveryType type)74 int32_t LnnSetDiscoveryType(NodeInfo *info, DiscoveryType type)
75 {
76 if (info == NULL || type >= DISCOVERY_TYPE_COUNT) {
77 LNN_LOGE(LNN_LEDGER, "para error");
78 return SOFTBUS_INVALID_PARAM;
79 }
80 info->discoveryType = (uint32_t)info->discoveryType | (1 << (uint32_t)type);
81 return SOFTBUS_OK;
82 }
83
LnnClearDiscoveryType(NodeInfo * info,DiscoveryType type)84 int32_t LnnClearDiscoveryType(NodeInfo *info, DiscoveryType type)
85 {
86 if (info == NULL || type >= DISCOVERY_TYPE_COUNT) {
87 LNN_LOGE(LNN_LEDGER, "para error");
88 return SOFTBUS_INVALID_PARAM;
89 }
90 info->discoveryType = (uint32_t)info->discoveryType & ~(1 << (uint32_t)type);
91 return SOFTBUS_OK;
92 }
93
LnnIsNodeOnline(const NodeInfo * info)94 bool LnnIsNodeOnline(const NodeInfo *info)
95 {
96 if (info == NULL) {
97 LNN_LOGE(LNN_LEDGER, "para error");
98 return false;
99 }
100 return (info->status == STATUS_ONLINE);
101 }
102
LnnSetNodeConnStatus(NodeInfo * info,ConnectStatus status)103 void LnnSetNodeConnStatus(NodeInfo *info, ConnectStatus status)
104 {
105 if (info == NULL) {
106 LNN_LOGE(LNN_LEDGER, "para error");
107 return;
108 }
109 info->status = status;
110 }
111
LnnGetBtMac(const NodeInfo * info)112 const char *LnnGetBtMac(const NodeInfo *info)
113 {
114 if (info == NULL) {
115 LNN_LOGE(LNN_LEDGER, "para error");
116 return DEFAULT_MAC;
117 }
118 return info->connectInfo.macAddr;
119 }
120
LnnSetBtMac(NodeInfo * info,const char * mac)121 void LnnSetBtMac(NodeInfo *info, const char *mac)
122 {
123 if (info == NULL || mac == NULL) {
124 LNN_LOGE(LNN_LEDGER, "PARA ERROR");
125 return;
126 }
127 if (strncpy_s(info->connectInfo.macAddr, MAC_LEN, mac, strlen(mac)) != EOK) {
128 LNN_LOGE(LNN_LEDGER, "str copy error");
129 }
130 return;
131 }
132
LnnGetBleMac(const NodeInfo * info)133 const char *LnnGetBleMac(const NodeInfo *info)
134 {
135 if (info == NULL) {
136 LNN_LOGE(LNN_LEDGER, "PARA ERROR");
137 return DEFAULT_MAC;
138 }
139 return info->connectInfo.bleMacAddr;
140 }
141
LnnSetBleMac(NodeInfo * info,const char * mac)142 void LnnSetBleMac(NodeInfo *info, const char *mac)
143 {
144 if (info == NULL || mac == NULL) {
145 LNN_LOGE(LNN_LEDGER, "PARA ERROR");
146 return;
147 }
148 if (strcpy_s(info->connectInfo.bleMacAddr, MAC_LEN, mac) != EOK) {
149 LNN_LOGE(LNN_LEDGER, "str copy error");
150 }
151 }
152
LnnGetNetIfName(const NodeInfo * info,int32_t ifnameIdx)153 const char *LnnGetNetIfName(const NodeInfo *info, int32_t ifnameIdx)
154 {
155 if (info == NULL || isIfnameIdxInvalid(ifnameIdx)) {
156 LNN_LOGE(LNN_LEDGER, "para error");
157 return DEFAULT_IFNAME;
158 }
159 return info->connectInfo.ifInfo[ifnameIdx].netIfName;
160 }
161
LnnSetNetIfName(NodeInfo * info,const char * netIfName,int32_t ifnameIdx)162 void LnnSetNetIfName(NodeInfo *info, const char *netIfName, int32_t ifnameIdx)
163 {
164 if (info == NULL || netIfName == NULL || isIfnameIdxInvalid(ifnameIdx)) {
165 LNN_LOGE(LNN_LEDGER, "PARA ERROR");
166 return;
167 }
168 if (strncpy_s(info->connectInfo.ifInfo[ifnameIdx].netIfName, NET_IF_NAME_LEN,
169 netIfName, strlen(netIfName)) != EOK) {
170 LNN_LOGE(LNN_LEDGER, "str copy error");
171 }
172 }
173
LnnGetWiFiIp(const NodeInfo * info,int32_t ifnameIdx)174 const char *LnnGetWiFiIp(const NodeInfo *info, int32_t ifnameIdx)
175 {
176 if (info == NULL || isIfnameIdxInvalid(ifnameIdx)) {
177 LNN_LOGE(LNN_LEDGER, "PARA error");
178 return DEFAULT_IP;
179 }
180 return info->connectInfo.ifInfo[ifnameIdx].deviceIp;
181 }
182
LnnSetWiFiIp(NodeInfo * info,const char * ip,int32_t ifnameIdx)183 void LnnSetWiFiIp(NodeInfo *info, const char *ip, int32_t ifnameIdx)
184 {
185 if (info == NULL || ip == NULL || isIfnameIdxInvalid(ifnameIdx)) {
186 LNN_LOGE(LNN_LEDGER, "PARA ERROR");
187 return;
188 }
189 if (strncpy_s(info->connectInfo.ifInfo[ifnameIdx].deviceIp, sizeof(info->connectInfo.ifInfo[ifnameIdx].deviceIp),
190 ip, strlen(ip)) != EOK) {
191 LNN_LOGE(LNN_LEDGER, "STR COPY ERROR");
192 }
193 }
194
LnnGetMasterUdid(const NodeInfo * info)195 const char *LnnGetMasterUdid(const NodeInfo *info)
196 {
197 if (info == NULL) {
198 LNN_LOGE(LNN_LEDGER, "PARA ERROR");
199 return NULL;
200 }
201 return info->masterUdid;
202 }
203
LnnSetMasterUdid(NodeInfo * info,const char * udid)204 int32_t LnnSetMasterUdid(NodeInfo *info, const char *udid)
205 {
206 if (info == NULL || udid == NULL) {
207 LNN_LOGE(LNN_LEDGER, "PARA ERROR");
208 return SOFTBUS_INVALID_PARAM;
209 }
210 if (strncpy_s(info->masterUdid, UDID_BUF_LEN, udid, strlen(udid)) != EOK) {
211 LNN_LOGE(LNN_LEDGER, "STR COPY ERROR");
212 return SOFTBUS_STRCPY_ERR;
213 }
214 return SOFTBUS_OK;
215 }
216
LnnGetAuthPort(const NodeInfo * info,int32_t ifnameIdx)217 int32_t LnnGetAuthPort(const NodeInfo *info, int32_t ifnameIdx)
218 {
219 if (info == NULL || isIfnameIdxInvalid(ifnameIdx)) {
220 LNN_LOGE(LNN_LEDGER, "para error");
221 return SOFTBUS_INVALID_PARAM;
222 }
223 return info->connectInfo.ifInfo[ifnameIdx].authPort;
224 }
225
LnnSetAuthPort(NodeInfo * info,int32_t port,int32_t ifnameIdx)226 int32_t LnnSetAuthPort(NodeInfo *info, int32_t port, int32_t ifnameIdx)
227 {
228 if (info == NULL || isIfnameIdxInvalid(ifnameIdx)) {
229 LNN_LOGE(LNN_LEDGER, "para error");
230 return SOFTBUS_INVALID_PARAM;
231 }
232 info->connectInfo.ifInfo[ifnameIdx].authPort = port;
233 return SOFTBUS_OK;
234 }
235
LnnGetSessionPort(const NodeInfo * info,int32_t ifnameIdx)236 int32_t LnnGetSessionPort(const NodeInfo *info, int32_t ifnameIdx)
237 {
238 if (info == NULL || isIfnameIdxInvalid(ifnameIdx)) {
239 LNN_LOGE(LNN_LEDGER, "para error");
240 return SOFTBUS_INVALID_PARAM;
241 }
242 return info->connectInfo.ifInfo[ifnameIdx].sessionPort;
243 }
244
LnnSetSessionPort(NodeInfo * info,int32_t port,int32_t ifnameIdx)245 int32_t LnnSetSessionPort(NodeInfo *info, int32_t port, int32_t ifnameIdx)
246 {
247 if (info == NULL || isIfnameIdxInvalid(ifnameIdx)) {
248 LNN_LOGE(LNN_LEDGER, "para error");
249 return SOFTBUS_INVALID_PARAM;
250 }
251 info->connectInfo.ifInfo[ifnameIdx].sessionPort = port;
252 return SOFTBUS_OK;
253 }
254
LnnGetProxyPort(const NodeInfo * info,int32_t ifnameIdx)255 int32_t LnnGetProxyPort(const NodeInfo *info, int32_t ifnameIdx)
256 {
257 if (info == NULL || isIfnameIdxInvalid(ifnameIdx)) {
258 LNN_LOGE(LNN_LEDGER, "para error");
259 return SOFTBUS_INVALID_PARAM;
260 }
261 return info->connectInfo.ifInfo[ifnameIdx].proxyPort;
262 }
263
LnnSetProxyPort(NodeInfo * info,int32_t port,int32_t ifnameIdx)264 int32_t LnnSetProxyPort(NodeInfo *info, int32_t port, int32_t ifnameIdx)
265 {
266 if (info == NULL || isIfnameIdxInvalid(ifnameIdx)) {
267 LNN_LOGE(LNN_LEDGER, "para error");
268 return SOFTBUS_INVALID_PARAM;
269 }
270 info->connectInfo.ifInfo[ifnameIdx].proxyPort = port;
271 return SOFTBUS_OK;
272 }
273
LnnSetP2pRole(NodeInfo * info,int32_t p2pRole)274 int32_t LnnSetP2pRole(NodeInfo *info, int32_t p2pRole)
275 {
276 if (info == NULL) {
277 LNN_LOGE(LNN_LEDGER, "invalid param");
278 return SOFTBUS_INVALID_PARAM;
279 }
280 info->p2pInfo.p2pRole = p2pRole;
281 return SOFTBUS_OK;
282 }
283
LnnGetP2pRole(const NodeInfo * info)284 int32_t LnnGetP2pRole(const NodeInfo *info)
285 {
286 if (info == NULL) {
287 LNN_LOGE(LNN_LEDGER, "invalid param");
288 return 0;
289 }
290 return info->p2pInfo.p2pRole;
291 }
292
LnnSetWifiCfg(NodeInfo * info,const char * wifiCfg)293 int32_t LnnSetWifiCfg(NodeInfo *info, const char *wifiCfg)
294 {
295 if (info == NULL || wifiCfg == NULL) {
296 LNN_LOGE(LNN_LEDGER, "invalid param");
297 return SOFTBUS_INVALID_PARAM;
298 }
299 if (strcpy_s(info->p2pInfo.wifiCfg, sizeof(info->p2pInfo.wifiCfg), wifiCfg) != EOK) {
300 LNN_LOGE(LNN_LEDGER, "strcpy_s wifi cfg err");
301 return SOFTBUS_MEM_ERR;
302 }
303 return SOFTBUS_OK;
304 }
305
LnnGetWifiCfg(const NodeInfo * info)306 const char *LnnGetWifiCfg(const NodeInfo *info)
307 {
308 if (info == NULL) {
309 LNN_LOGE(LNN_LEDGER, "invalid param");
310 return NULL;
311 }
312 return info->p2pInfo.wifiCfg;
313 }
314
LnnSetChanList5g(NodeInfo * info,const char * chanList5g)315 int32_t LnnSetChanList5g(NodeInfo *info, const char *chanList5g)
316 {
317 if (info == NULL || chanList5g == NULL) {
318 LNN_LOGE(LNN_LEDGER, "invalid param");
319 return SOFTBUS_INVALID_PARAM;
320 }
321 if (strcpy_s(info->p2pInfo.chanList5g, sizeof(info->p2pInfo.chanList5g), chanList5g) != EOK) {
322 LNN_LOGE(LNN_LEDGER, "strcpy_s chan list 5g err");
323 return SOFTBUS_MEM_ERR;
324 }
325 return SOFTBUS_OK;
326 }
327
LnnGetChanList5g(const NodeInfo * info)328 const char *LnnGetChanList5g(const NodeInfo *info)
329 {
330 if (info == NULL) {
331 LNN_LOGE(LNN_LEDGER, "invalid param");
332 return NULL;
333 }
334 return info->p2pInfo.chanList5g;
335 }
336
LnnSetStaFrequency(NodeInfo * info,int32_t staFrequency)337 int32_t LnnSetStaFrequency(NodeInfo *info, int32_t staFrequency)
338 {
339 if (info == NULL) {
340 LNN_LOGE(LNN_LEDGER, "invalid param");
341 return SOFTBUS_INVALID_PARAM;
342 }
343 info->p2pInfo.staFrequency = staFrequency;
344 return SOFTBUS_OK;
345 }
346
LnnGetStaFrequency(const NodeInfo * info)347 int32_t LnnGetStaFrequency(const NodeInfo *info)
348 {
349 if (info == NULL) {
350 LNN_LOGE(LNN_LEDGER, "invalid param");
351 return 0;
352 }
353 return info->p2pInfo.staFrequency;
354 }
355
LnnSetP2pMac(NodeInfo * info,const char * p2pMac)356 int32_t LnnSetP2pMac(NodeInfo *info, const char *p2pMac)
357 {
358 if (info == NULL || p2pMac == NULL) {
359 LNN_LOGE(LNN_LEDGER, "invalid param");
360 return SOFTBUS_INVALID_PARAM;
361 }
362 if (strcpy_s(info->p2pInfo.p2pMac, sizeof(info->p2pInfo.p2pMac), p2pMac) != EOK) {
363 LNN_LOGE(LNN_LEDGER, "strcpy_s p2p mac err");
364 return SOFTBUS_MEM_ERR;
365 }
366 return SOFTBUS_OK;
367 }
368
LnnGetP2pMac(const NodeInfo * info)369 const char *LnnGetP2pMac(const NodeInfo *info)
370 {
371 if (info == NULL) {
372 LNN_LOGE(LNN_LEDGER, "invalid param");
373 return NULL;
374 }
375 return info->p2pInfo.p2pMac;
376 }
377
LnnGetWifiDirectAddr(const NodeInfo * info)378 const char *LnnGetWifiDirectAddr(const NodeInfo *info)
379 {
380 if (info == NULL) {
381 LNN_LOGE(LNN_LEDGER, "invalid param");
382 return NULL;
383 }
384 return info->wifiDirectAddr;
385 }
386
LnnSetDataChangeFlag(NodeInfo * info,uint16_t dataChangeFlag)387 int32_t LnnSetDataChangeFlag(NodeInfo *info, uint16_t dataChangeFlag)
388 {
389 if (info == NULL) {
390 LNN_LOGE(LNN_LEDGER, "invalid param");
391 return SOFTBUS_INVALID_PARAM;
392 }
393 info->dataChangeFlag = dataChangeFlag;
394 return SOFTBUS_OK;
395 }
396
LnnGetDataChangeFlag(const NodeInfo * info)397 uint16_t LnnGetDataChangeFlag(const NodeInfo *info)
398 {
399 if (info == NULL) {
400 LNN_LOGE(LNN_LEDGER, "invalid param");
401 return 0;
402 }
403 return info->dataChangeFlag;
404 }
405
LnnGetDataDynamicLevel(const NodeInfo * info)406 uint16_t LnnGetDataDynamicLevel(const NodeInfo *info)
407 {
408 if (info == NULL) {
409 LNN_LOGE(LNN_LEDGER, "invalid param");
410 return DYNAMIC_LEVEL_INVALID;
411 }
412 return info->dataDynamicLevel;
413 }
414
LnnSetDataDynamicLevel(NodeInfo * info,uint16_t dataDynamicLevel)415 int32_t LnnSetDataDynamicLevel(NodeInfo *info, uint16_t dataDynamicLevel)
416 {
417 if (info == NULL) {
418 LNN_LOGE(LNN_LEDGER, "invalid param");
419 return SOFTBUS_INVALID_PARAM;
420 }
421 info->dataDynamicLevel = dataDynamicLevel;
422 return SOFTBUS_OK;
423 }
424
LnnGetDataStaticLevel(const NodeInfo * info)425 uint16_t LnnGetDataStaticLevel(const NodeInfo *info)
426 {
427 if (info == NULL) {
428 LNN_LOGE(LNN_LEDGER, "invalid param");
429 return STATIC_LEVEL_INVALID;
430 }
431 return info->dataStaticLevel;
432 }
433
LnnSetDataStaticLevel(NodeInfo * info,uint16_t dataStaticLevel)434 int32_t LnnSetDataStaticLevel(NodeInfo *info, uint16_t dataStaticLevel)
435 {
436 if (info == NULL) {
437 LNN_LOGE(LNN_LEDGER, "invalid param");
438 return SOFTBUS_INVALID_PARAM;
439 }
440 info->dataStaticLevel = dataStaticLevel;
441 return SOFTBUS_OK;
442 }
443
LnnGetDataSwitchLevel(const NodeInfo * info)444 uint32_t LnnGetDataSwitchLevel(const NodeInfo *info)
445 {
446 if (info == NULL) {
447 LNN_LOGE(LNN_LEDGER, "invalid param");
448 return SWITCH_LEVEL_INVALID;
449 }
450 return info->dataSwitchLevel;
451 }
452
LnnSetDataSwitchLevel(NodeInfo * info,uint32_t dataSwitchLevel)453 int32_t LnnSetDataSwitchLevel(NodeInfo *info, uint32_t dataSwitchLevel)
454 {
455 if (info == NULL) {
456 LNN_LOGE(LNN_LEDGER, "invalid param");
457 return SOFTBUS_INVALID_PARAM;
458 }
459 info->dataSwitchLevel = dataSwitchLevel;
460 return SOFTBUS_OK;
461 }
462
LnnGetDataSwitchLength(const NodeInfo * info)463 uint16_t LnnGetDataSwitchLength(const NodeInfo *info)
464 {
465 if (info == NULL) {
466 LNN_LOGE(LNN_LEDGER, "invalid param");
467 return SWTICH_LENGTH_INVALID;
468 }
469 return info->dataSwitchLength;
470 }
471
LnnSetDataSwitchLength(NodeInfo * info,uint16_t dataSwitchLength)472 int32_t LnnSetDataSwitchLength(NodeInfo *info, uint16_t dataSwitchLength)
473 {
474 if (info == NULL) {
475 LNN_LOGE(LNN_LEDGER, "invalid param");
476 return SOFTBUS_INVALID_PARAM;
477 }
478 info->dataSwitchLength = dataSwitchLength;
479 return SOFTBUS_OK;
480 }
481
LnnSetP2pGoMac(NodeInfo * info,const char * goMac)482 int32_t LnnSetP2pGoMac(NodeInfo *info, const char *goMac)
483 {
484 if (info == NULL || goMac == NULL) {
485 LNN_LOGE(LNN_LEDGER, "invalid param");
486 return SOFTBUS_INVALID_PARAM;
487 }
488
489 if (strcpy_s(info->p2pInfo.goMac, sizeof(info->p2pInfo.goMac), goMac) != EOK) {
490 LNN_LOGE(LNN_LEDGER, "strcpy_s go mac err");
491 return SOFTBUS_MEM_ERR;
492 }
493 return SOFTBUS_OK;
494 }
495
LnnGetP2pGoMac(const NodeInfo * info)496 const char *LnnGetP2pGoMac(const NodeInfo *info)
497 {
498 if (info == NULL) {
499 LNN_LOGE(LNN_LEDGER, "invalid param");
500 return NULL;
501 }
502 return info->p2pInfo.goMac;
503 }
504
LnnGetSupportedProtocols(const NodeInfo * info)505 uint64_t LnnGetSupportedProtocols(const NodeInfo *info)
506 {
507 if (info == NULL) {
508 LNN_LOGE(LNN_LEDGER, "para error");
509 return 0;
510 }
511 return info->supportedProtocols;
512 }
513
LnnSetSupportedProtocols(NodeInfo * info,uint64_t protocols)514 int32_t LnnSetSupportedProtocols(NodeInfo *info, uint64_t protocols)
515 {
516 if (info == NULL) {
517 LNN_LOGE(LNN_LEDGER, "para error");
518 return SOFTBUS_INVALID_PARAM;
519 }
520 info->supportedProtocols = protocols;
521 return SOFTBUS_OK;
522 }
523
LnnSetWifiDirectAddr(NodeInfo * info,const char * wifiDirectAddr)524 int32_t LnnSetWifiDirectAddr(NodeInfo *info, const char *wifiDirectAddr)
525 {
526 if (info == NULL || wifiDirectAddr == NULL) {
527 LNN_LOGE(LNN_LEDGER, "invalid param");
528 return SOFTBUS_INVALID_PARAM;
529 }
530 if (strcpy_s(info->wifiDirectAddr, sizeof(info->wifiDirectAddr), wifiDirectAddr) != EOK) {
531 LNN_LOGE(LNN_LEDGER, "strcpy_s wifidirect addr err");
532 return SOFTBUS_MEM_ERR;
533 }
534 return SOFTBUS_OK;
535 }
536
LnnSetStaticCapability(NodeInfo * info,uint8_t * cap,uint32_t len)537 int32_t LnnSetStaticCapability(NodeInfo *info, uint8_t *cap, uint32_t len)
538 {
539 if (info == NULL || cap == NULL) {
540 LNN_LOGE(LNN_LEDGER, "param is null");
541 return SOFTBUS_INVALID_PARAM;
542 }
543 if (len <= 0 || len > STATIC_CAP_LEN) {
544 LNN_LOGE(LNN_LEDGER, "length error");
545 return SOFTBUS_INVALID_PARAM;
546 }
547 if (memcpy_s(info->staticCapability, STATIC_CAP_LEN, cap, len) != EOK) {
548 LNN_LOGE(LNN_LEDGER, "memcpy static cap err");
549 return SOFTBUS_MEM_ERR;
550 }
551 return SOFTBUS_OK;
552 }
553
LnnGetStaticCapability(NodeInfo * info,uint8_t * cap,uint32_t len)554 int32_t LnnGetStaticCapability(NodeInfo *info, uint8_t *cap, uint32_t len)
555 {
556 if (info == NULL || cap == NULL) {
557 LNN_LOGE(LNN_LEDGER, "param err");
558 return SOFTBUS_INVALID_PARAM;
559 }
560 if (len < 0 || len > STATIC_CAP_LEN) {
561 LNN_LOGE(LNN_LEDGER, "param err");
562 return SOFTBUS_INVALID_PARAM;
563 }
564 if (memcpy_s(cap, len, info->staticCapability, info->staticCapLen) != EOK) {
565 LNN_LOGE(LNN_LEDGER, "memcpy static cap err");
566 return SOFTBUS_MEM_ERR;
567 }
568 return SOFTBUS_OK;
569 }
570
LnnSetUserIdCheckSum(NodeInfo * info,uint8_t * data,uint32_t len)571 int32_t LnnSetUserIdCheckSum(NodeInfo *info, uint8_t *data, uint32_t len)
572 {
573 if (info == NULL || data == NULL) {
574 LNN_LOGE(LNN_LEDGER, "param is null");
575 return SOFTBUS_INVALID_PARAM;
576 }
577 if (len != USERID_CHECKSUM_LEN) {
578 LNN_LOGE(LNN_LEDGER, "length error");
579 return SOFTBUS_INVALID_PARAM;
580 }
581 if (memcpy_s(info->userIdCheckSum, USERID_CHECKSUM_LEN, data, len) != EOK) {
582 LNN_LOGE(LNN_LEDGER, "memcpy useridchecksum err");
583 return SOFTBUS_MEM_ERR;
584 }
585 return SOFTBUS_OK;
586 }
587
LnnGetUserIdCheckSum(NodeInfo * info,uint8_t * data,uint32_t len)588 int32_t LnnGetUserIdCheckSum(NodeInfo *info, uint8_t *data, uint32_t len)
589 {
590 if (info == NULL || data == NULL) {
591 LNN_LOGE(LNN_LEDGER, "param err");
592 return SOFTBUS_INVALID_PARAM;
593 }
594 if (len != USERID_CHECKSUM_LEN) {
595 LNN_LOGE(LNN_LEDGER, "param err");
596 return SOFTBUS_INVALID_PARAM;
597 }
598 if (memcpy_s(data, len, info->userIdCheckSum, len) != EOK) {
599 LNN_LOGE(LNN_LEDGER, "memcpy useridchecksum err");
600 return SOFTBUS_MEM_ERR;
601 }
602 return SOFTBUS_OK;
603 }
604
LnnSetPtk(NodeInfo * info,const char * remotePtk)605 int32_t LnnSetPtk(NodeInfo *info, const char *remotePtk)
606 {
607 if (info == NULL || remotePtk == NULL) {
608 LNN_LOGE(LNN_LEDGER, "invalid param");
609 return SOFTBUS_INVALID_PARAM;
610 }
611 if (memcpy_s(info->remotePtk, PTK_DEFAULT_LEN, remotePtk, PTK_DEFAULT_LEN) != EOK) {
612 LNN_LOGE(LNN_LEDGER, "memcpy ptk err");
613 return SOFTBUS_MEM_ERR;
614 }
615 return SOFTBUS_OK;
616 }
617
LnnDumpRemotePtk(const char * oldPtk,const char * newPtk,const char * log)618 void LnnDumpRemotePtk(const char *oldPtk, const char *newPtk, const char *log)
619 {
620 char ptkStr[PTK_STR_LEN] = { 0 };
621 char oldPtkStr[PTK_STR_LEN] = { 0 };
622
623 if (log == NULL) {
624 return;
625 }
626 if (newPtk != NULL &&
627 ConvertBytesToUpperCaseHexString(ptkStr, PTK_STR_LEN, (unsigned char *)newPtk, PTK_DEFAULT_LEN) != SOFTBUS_OK) {
628 LNN_LOGE(LNN_LEDGER, "convert new ptk fail");
629 }
630 if (oldPtk != NULL &&
631 ConvertBytesToUpperCaseHexString(oldPtkStr, PTK_STR_LEN, (unsigned char *)oldPtk, PTK_DEFAULT_LEN) !=
632 SOFTBUS_OK) {
633 LNN_LOGE(LNN_LEDGER, "convert old ptk fail");
634 }
635 char *anonyPtk = NULL;
636 char *anonyOldPtk = NULL;
637 LnnAnonymizePtk(ptkStr, PTK_STR_LEN, &anonyPtk);
638 LnnAnonymizePtk(oldPtkStr, PTK_STR_LEN, &anonyOldPtk);
639 LNN_LOGI(LNN_LEDGER, "log=%{public}s, dump newPtk=%{public}s, oldPtk=%{public}s",
640 log, AnonymizeWrapper(anonyPtk), AnonymizeWrapper(anonyOldPtk));
641 AnonymizeFree(anonyPtk);
642 AnonymizeFree(anonyOldPtk);
643 (void)memset_s(ptkStr, PTK_STR_LEN, 0, PTK_STR_LEN);
644 (void)memset_s(oldPtkStr, PTK_STR_LEN, 0, PTK_STR_LEN);
645 }
646
LnnDumpNodeInfo(const NodeInfo * deviceInfo,const char * log)647 void LnnDumpNodeInfo(const NodeInfo *deviceInfo, const char *log)
648 {
649 if (deviceInfo == NULL || log == NULL) {
650 LNN_LOGE(LNN_LEDGER, "invalid param");
651 return;
652 }
653 char *anonyNetworkId = NULL;
654 char *anonyUdid = NULL;
655 char *anonyDeviceName = NULL;
656 char *anonyBtMac = NULL;
657 Anonymize(deviceInfo->networkId, &anonyNetworkId);
658 Anonymize(deviceInfo->deviceInfo.deviceUdid, &anonyUdid);
659 AnonymizeDeviceName(deviceInfo->deviceInfo.deviceName, &anonyDeviceName);
660 Anonymize(deviceInfo->connectInfo.macAddr, &anonyBtMac);
661 LNN_LOGI(LNN_LEDGER, "log=%{public}s, stateVersion=%{public}d, networkId=%{public}s, udid=%{public}s, "
662 "deviceName=%{public}s, btMac=%{public}s, networkIdTimestamp=%{public}" PRId64, log, deviceInfo->stateVersion,
663 AnonymizeWrapper(anonyNetworkId), AnonymizeWrapper(anonyUdid), AnonymizeWrapper(anonyDeviceName),
664 AnonymizeWrapper(anonyBtMac), deviceInfo->networkIdTimestamp);
665 AnonymizeFree(anonyNetworkId);
666 AnonymizeFree(anonyUdid);
667 AnonymizeFree(anonyDeviceName);
668 AnonymizeFree(anonyBtMac);
669 }
670
LnnSetScreenStatus(NodeInfo * info,bool isScreenOn)671 int32_t LnnSetScreenStatus(NodeInfo *info, bool isScreenOn)
672 {
673 if (info == NULL) {
674 LNN_LOGE(LNN_LEDGER, "invalid param");
675 return SOFTBUS_INVALID_PARAM;
676 }
677 info->isScreenOn = isScreenOn;
678 LNN_LOGI(LNN_LEDGER, "set local screen status to %{public}s", isScreenOn ? "on" : "off");
679 return SOFTBUS_OK;
680 }
681
isIfnameIdxInvalid(int32_t ifnameIdx)682 bool isIfnameIdxInvalid(int32_t ifnameIdx)
683 {
684 return (ifnameIdx < MIN_IF || ifnameIdx > MAX_IF) ? true : false;
685 }
686
LnnAnonymizePtk(const char * ptk,uint32_t len,char ** anonymizedStr)687 void LnnAnonymizePtk(const char *ptk, uint32_t len, char **anonymizedStr)
688 {
689 if (ptk == NULL || len != PTK_STR_LEN || anonymizedStr == NULL) {
690 LNN_LOGE(LNN_LEDGER, "Invalid parameter");
691 return;
692 }
693 char emptyByte[PTK_DEFAULT_LEN] = { 0 };
694 char emptyStr[PTK_STR_LEN] = { 0 };
695 if (ConvertBytesToHexString(emptyStr, PTK_STR_LEN, (unsigned char *)emptyByte, PTK_DEFAULT_LEN) != SOFTBUS_OK) {
696 LNN_LOGE(LNN_LEDGER, "convert emptyByte to string fail.");
697 return;
698 }
699 if (memcmp(ptk, emptyStr, PTK_STR_LEN) == 0) {
700 Anonymize(ptk, anonymizedStr);
701 return;
702 }
703 uint8_t ptkHash[SHA_256_HASH_LEN] = { 0 };
704 if (SoftBusGenerateStrHash((const unsigned char *)ptk, len, ptkHash) != SOFTBUS_OK) {
705 LNN_LOGE(LNN_LEDGER, "generate ptkHash fail");
706 return;
707 }
708 char ptkStr[PTK_STR_LEN] = { 0 };
709 if (ConvertBytesToHexString(ptkStr, PTK_STR_LEN, (unsigned char *)ptkHash, SHA_256_HASH_LEN) != SOFTBUS_OK) {
710 LNN_LOGE(LNN_LEDGER, "convert ptk to string fail.");
711 (void)memset_s(ptkHash, SHA_256_HASH_LEN, 0, SHA_256_HASH_LEN);
712 return;
713 }
714 Anonymize(ptkStr, anonymizedStr);
715 (void)memset_s(ptkHash, SHA_256_HASH_LEN, 0, SHA_256_HASH_LEN);
716 (void)memset_s(ptkStr, PTK_STR_LEN, 0, PTK_STR_LEN);
717 }
718
LnnAnonymizeBroadcastCipher(const char * broadcastCipher,uint32_t len,char ** anonymizedStr)719 void LnnAnonymizeBroadcastCipher(const char *broadcastCipher, uint32_t len, char **anonymizedStr)
720 {
721 if (broadcastCipher == NULL || len != SESSION_KEY_STR_LEN || anonymizedStr == NULL) {
722 LNN_LOGE(LNN_LEDGER, "Invalid parameter");
723 return;
724 }
725 unsigned char emptyByte[SESSION_KEY_LENGTH] = { 0 };
726 char emptyStr[SESSION_KEY_STR_LEN] = { 0 };
727 if (ConvertBytesToHexString(emptyStr, SESSION_KEY_STR_LEN, emptyByte, SESSION_KEY_LENGTH) != SOFTBUS_OK) {
728 LNN_LOGE(LNN_LEDGER, "convert emptyByte to string fail.");
729 return;
730 }
731 if (memcmp(broadcastCipher, emptyStr, SESSION_KEY_STR_LEN) == 0) {
732 Anonymize(broadcastCipher, anonymizedStr);
733 return;
734 }
735 uint8_t broadcastCipherHash[SHA_256_HASH_LEN] = { 0 };
736 if (SoftBusGenerateStrHash((const unsigned char *)broadcastCipher, len, broadcastCipherHash) != SOFTBUS_OK) {
737 LNN_LOGE(LNN_LEDGER, "generate broadcastCipherHash fail");
738 return;
739 }
740 char hashStr[SESSION_KEY_STR_LEN] = { 0 };
741 if (ConvertBytesToHexString(hashStr, SESSION_KEY_STR_LEN, broadcastCipherHash, SHA_256_HASH_LEN) != SOFTBUS_OK) {
742 LNN_LOGE(LNN_LEDGER, "convert broadcastCipher to string fail.");
743 (void)memset_s(broadcastCipherHash, SHA_256_HASH_LEN, 0, SHA_256_HASH_LEN);
744 return;
745 }
746 Anonymize(hashStr, anonymizedStr);
747 (void)memset_s(broadcastCipherHash, SHA_256_HASH_LEN, 0, SHA_256_HASH_LEN);
748 (void)memset_s(hashStr, SESSION_KEY_STR_LEN, 0, SESSION_KEY_STR_LEN);
749 }
750
LnnAnonymizeIrk(const char * irk,uint32_t len,char ** anonymizedStr)751 void LnnAnonymizeIrk(const char *irk, uint32_t len, char **anonymizedStr)
752 {
753 if (irk == NULL || len != LFINDER_IRK_STR_LEN || anonymizedStr == NULL) {
754 LNN_LOGE(LNN_LEDGER, "Invalid parameter");
755 return;
756 }
757 uint8_t emptyByte[LFINDER_IRK_LEN] = { 0 };
758 char emptyStr[LFINDER_IRK_STR_LEN] = { 0 };
759 if (ConvertBytesToHexString(emptyStr, LFINDER_IRK_STR_LEN, emptyByte, LFINDER_IRK_LEN) != SOFTBUS_OK) {
760 LNN_LOGE(LNN_LEDGER, "convert emptyByte to string fail.");
761 return;
762 }
763 if (memcmp(irk, emptyStr, LFINDER_IRK_STR_LEN) == 0) {
764 Anonymize(irk, anonymizedStr);
765 return;
766 }
767 uint8_t irkHash[SHA_256_HASH_LEN] = { 0 };
768 if (SoftBusGenerateStrHash((const unsigned char *)irk, len, irkHash) != SOFTBUS_OK) {
769 LNN_LOGE(LNN_LEDGER, "generate irkHash fail");
770 return;
771 }
772 char irkStr[LFINDER_IRK_STR_LEN] = { 0 };
773 if (ConvertBytesToHexString(irkStr, LFINDER_IRK_STR_LEN, (unsigned char *)irkHash, LFINDER_IRK_LEN) != SOFTBUS_OK) {
774 LNN_LOGE(LNN_LEDGER, "convert irk to string fail.");
775 (void)memset_s(irkHash, SHA_256_HASH_LEN, 0, SHA_256_HASH_LEN);
776 return;
777 }
778 Anonymize(irkStr, anonymizedStr);
779 (void)memset_s(irkHash, SHA_256_HASH_LEN, 0, SHA_256_HASH_LEN);
780 (void)memset_s(irkStr, LFINDER_IRK_STR_LEN, 0, LFINDER_IRK_STR_LEN);
781 }