• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2024 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_net_ledger.h"
17 
18 #include <string.h>
19 #include <securec.h>
20 
21 #include "anonymizer.h"
22 #include "auth_device_common_key.h"
23 #include "auth_interface.h"
24 #include "bus_center_event.h"
25 #include "bus_center_manager.h"
26 #include "lnn_ble_lpdevice.h"
27 #include "lnn_cipherkey_manager.h"
28 #include "lnn_data_cloud_sync.h"
29 #include "lnn_decision_db.h"
30 #include "lnn_device_info_recovery.h"
31 #include "lnn_distributed_net_ledger.h"
32 #include "lnn_event_monitor.h"
33 #include "lnn_event_monitor_impl.h"
34 #include "lnn_feature_capability.h"
35 #include "lnn_file_utils.h"
36 #include "lnn_huks_utils.h"
37 #include "lnn_local_net_ledger.h"
38 #include "lnn_log.h"
39 #include "lnn_meta_node_interface.h"
40 #include "lnn_meta_node_ledger.h"
41 #include "lnn_network_id.h"
42 #include "lnn_net_builder.h"
43 #include "lnn_p2p_info.h"
44 #include "lnn_settingdata_event_monitor.h"
45 #include "softbus_adapter_mem.h"
46 #include "softbus_def.h"
47 #include "softbus_error_code.h"
48 #include "softbus_utils.h"
49 #include "lnn_init_monitor.h"
50 
51 #define RETRY_TIMES                      5
52 #define DELAY_REG_DP_TIME                10000
53 static bool g_isRestore = false;
54 static bool g_isDeviceInfoSet = false;
55 
LnnInitNetLedger(void)56 int32_t LnnInitNetLedger(void)
57 {
58     if (LnnInitModuleNotifyWithRetrySync(INIT_DEPS_HUKS, LnnInitHuksInterface, RETRY_TIMES, DELAY_REG_DP_TIME) !=
59         SOFTBUS_OK) {
60         LNN_LOGE(LNN_LEDGER, "init huks interface fail");
61         return SOFTBUS_HUKS_INIT_FAILED;
62     }
63     if (LnnInitLocalLedger() != SOFTBUS_OK) {
64         LNN_LOGE(LNN_LEDGER, "init local net ledger fail!");
65         return SOFTBUS_NETWORK_LEDGER_INIT_FAILED;
66     }
67     if (LnnInitDistributedLedger() != SOFTBUS_OK) {
68         LNN_LOGE(LNN_LEDGER, "init distributed net ledger fail!");
69         return SOFTBUS_NETWORK_LEDGER_INIT_FAILED;
70     }
71     if (LnnInitMetaNodeLedger() != SOFTBUS_OK) {
72         LNN_LOGE(LNN_LEDGER, "init meta node ledger fail");
73         return SOFTBUS_NETWORK_LEDGER_INIT_FAILED;
74     }
75     if (LnnInitMetaNodeExtLedger() != SOFTBUS_OK) {
76         LNN_LOGE(LNN_LEDGER, "init meta node ext ledger fail");
77         return SOFTBUS_NETWORK_LEDGER_INIT_FAILED;
78     }
79     return SOFTBUS_OK;
80 }
81 
IsCapacityChange(NodeInfo * info)82 static bool IsCapacityChange(NodeInfo *info)
83 {
84     uint64_t softbusFeature = 0;
85     if (LnnGetLocalNumU64Info(NUM_KEY_FEATURE_CAPA, &softbusFeature) == SOFTBUS_OK) {
86         if (softbusFeature != info->feature) {
87             LNN_LOGW(LNN_LEDGER, "feature=%{public}" PRIu64 "->%{public}" PRIu64, info->feature, softbusFeature);
88             return true;
89         }
90     }
91     uint32_t authCapacity = 0;
92     if (LnnGetLocalNumU32Info(NUM_KEY_AUTH_CAP, &authCapacity) == SOFTBUS_OK) {
93         if (authCapacity != info->authCapacity) {
94             LNN_LOGW(LNN_LEDGER, "authCapacity=%{public}u->%{public}u", info->authCapacity, authCapacity);
95             return true;
96         }
97     }
98     uint32_t heartbeatCapacity = 0;
99     if (LnnGetLocalNumU32Info(NUM_KEY_HB_CAP, &heartbeatCapacity) == SOFTBUS_OK) {
100         if (heartbeatCapacity != info->heartbeatCapacity) {
101             LNN_LOGW(LNN_LEDGER, "hbCapacity=%{public}u->%{public}u", info->heartbeatCapacity, heartbeatCapacity);
102             return true;
103         }
104     }
105     uint32_t staticNetCap = 0;
106     if (LnnGetLocalNumU32Info(NUM_KEY_STATIC_NET_CAP, &staticNetCap) == SOFTBUS_OK) {
107         if (staticNetCap != info->staticNetCap) {
108             LNN_LOGW(LNN_LEDGER, "staticNetCap=%{public}u->%{public}u", info->staticNetCap, staticNetCap);
109             return true;
110         }
111     }
112     return false;
113 }
114 
IsLocalIrkInfoChange(NodeInfo * info)115 static bool IsLocalIrkInfoChange(NodeInfo *info)
116 {
117     unsigned char localIrk[LFINDER_IRK_LEN] = { 0 };
118     if (LnnGetLocalByteInfo(BYTE_KEY_IRK, localIrk, LFINDER_IRK_LEN) == SOFTBUS_OK) {
119         if (memcmp(info->rpaInfo.peerIrk, localIrk, LFINDER_IRK_LEN) != 0) {
120             LNN_LOGI(LNN_LEDGER, "local irk change");
121             if (memcpy_s(info->rpaInfo.peerIrk, LFINDER_IRK_LEN, localIrk, LFINDER_IRK_LEN) != EOK) {
122                 LNN_LOGE(LNN_LEDGER, "memcpy local irk fail");
123                 (void)memset_s(localIrk, LFINDER_IRK_LEN, 0, LFINDER_IRK_LEN);
124                 return true;
125             }
126             (void)memset_s(localIrk, LFINDER_IRK_LEN, 0, LFINDER_IRK_LEN);
127             return true;
128         }
129         LNN_LOGI(LNN_LEDGER, "local irk same");
130         (void)memset_s(localIrk, LFINDER_IRK_LEN, 0, LFINDER_IRK_LEN);
131         return false;
132     }
133     LNN_LOGI(LNN_LEDGER, "get local irk fail, ignore");
134     (void)memset_s(localIrk, LFINDER_IRK_LEN, 0, LFINDER_IRK_LEN);
135     return false;
136 }
137 
IsLocalBroadcastLinKeyChange(NodeInfo * info)138 static bool IsLocalBroadcastLinKeyChange(NodeInfo *info)
139 {
140     BroadcastCipherInfo linkKey;
141     (void)memset_s(&linkKey, sizeof(BroadcastCipherInfo), 0, sizeof(BroadcastCipherInfo));
142     if (LnnGetLocalByteInfo(BYTE_KEY_BROADCAST_CIPHER_KEY, linkKey.key, SESSION_KEY_LENGTH) == SOFTBUS_OK &&
143         LnnGetLocalByteInfo(BYTE_KEY_BROADCAST_CIPHER_IV, linkKey.iv, BROADCAST_IV_LEN) == SOFTBUS_OK) {
144         if (memcmp(info->cipherInfo.key, linkKey.key, SESSION_KEY_LENGTH) != 0 ||
145             memcmp(info->cipherInfo.iv, linkKey.iv, BROADCAST_IV_LEN) != 0) {
146             LNN_LOGI(LNN_LEDGER, "local link key change");
147             if (memcpy_s(info->cipherInfo.key, SESSION_KEY_LENGTH, linkKey.key, SESSION_KEY_LENGTH) != EOK ||
148                 memcpy_s(info->cipherInfo.iv, BROADCAST_IV_LEN, linkKey.iv, BROADCAST_IV_LEN) != EOK) {
149                 LNN_LOGE(LNN_LEDGER, "memcpy local link key fail");
150                 (void)memset_s(&linkKey, sizeof(BroadcastCipherInfo), 0, sizeof(BroadcastCipherInfo));
151                 return true;
152             }
153             (void)memset_s(&linkKey, sizeof(BroadcastCipherInfo), 0, sizeof(BroadcastCipherInfo));
154             return true;
155         }
156         LNN_LOGI(LNN_LEDGER, "local link key same");
157         (void)memset_s(&linkKey, sizeof(BroadcastCipherInfo), 0, sizeof(BroadcastCipherInfo));
158         return false;
159     }
160     LNN_LOGI(LNN_LEDGER, "get local link key fail, ignore");
161     (void)memset_s(&linkKey, sizeof(BroadcastCipherInfo), 0, sizeof(BroadcastCipherInfo));
162     return false;
163 }
164 
IsBleDirectlyOnlineFactorChange(NodeInfo * info)165 static bool IsBleDirectlyOnlineFactorChange(NodeInfo *info)
166 {
167     if (IsCapacityChange(info)) {
168         return true;
169     }
170     char softBusVersion[VERSION_MAX_LEN] = { 0 };
171     if (LnnGetLocalStrInfo(STRING_KEY_HICE_VERSION, softBusVersion, sizeof(softBusVersion)) == SOFTBUS_OK) {
172         if (strcmp(softBusVersion, info->softBusVersion) != 0) {
173             LNN_LOGW(LNN_LEDGER, "softbus version=%{public}s->%{public}s", softBusVersion, info->softBusVersion);
174             return true;
175         }
176     }
177     char *anonyNewUuid = NULL;
178     char uuid[UUID_BUF_LEN] = { 0 };
179     if ((LnnGetLocalStrInfo(STRING_KEY_UUID, uuid, UUID_BUF_LEN) == SOFTBUS_OK) && (strcmp(uuid, info->uuid) != 0)) {
180         Anonymize(info->uuid, &anonyNewUuid);
181         LNN_LOGW(LNN_LEDGER, "uuid change, new=%{public}s", AnonymizeWrapper(anonyNewUuid));
182         AnonymizeFree(anonyNewUuid);
183         return true;
184     }
185     int32_t osType = 0;
186     if (LnnGetLocalNumInfo(NUM_KEY_OS_TYPE, &osType) == SOFTBUS_OK) {
187         if (osType != info->deviceInfo.osType) {
188             LNN_LOGW(LNN_LEDGER, "osType=%{public}d->%{public}d", info->deviceInfo.osType, osType);
189             return true;
190         }
191     }
192     int32_t level = 0;
193     if ((LnnGetLocalNumInfo(NUM_KEY_DEVICE_SECURITY_LEVEL, &level) == SOFTBUS_OK) &&
194         (level != info->deviceSecurityLevel)) {
195         LNN_LOGW(LNN_LEDGER, "deviceSecurityLevel=%{public}d->%{public}d", info->deviceSecurityLevel, level);
196         return true;
197     }
198     if (IsLocalIrkInfoChange(info)) {
199         return true;
200     }
201     if (IsLocalBroadcastLinKeyChange(info)) {
202         return true;
203     }
204     return false;
205 }
206 
LnnSetLocalFeature(void)207 static void LnnSetLocalFeature(void)
208 {
209     if (IsSupportLpFeature()) {
210         uint64_t feature = 1 << BIT_BLE_SUPPORT_LP_HEARTBEAT;
211         if (LnnSetLocalNum64Info(NUM_KEY_FEATURE_CAPA, feature) != SOFTBUS_OK) {
212             LNN_LOGE(LNN_LEDGER, "set feature fail");
213         }
214     } else {
215         LNN_LOGE(LNN_LEDGER, "not support mlps");
216     }
217 }
218 
ProcessLocalDeviceInfo(void)219 static void ProcessLocalDeviceInfo(void)
220 {
221     g_isRestore = true;
222     NodeInfo info;
223     (void)memset_s(&info, sizeof(NodeInfo), 0, sizeof(NodeInfo));
224     (void)LnnGetLocalDevInfo(&info);
225     LnnDumpNodeInfo(&info, "load local deviceInfo success");
226     if (IsBleDirectlyOnlineFactorChange(&info)) {
227         info.stateVersion++;
228         LnnSaveLocalDeviceInfo(&info);
229     }
230     LNN_LOGI(LNN_LEDGER, "load local deviceInfo stateVersion=%{public}d", info.stateVersion);
231     if (LnnSetLocalNumInfo(NUM_KEY_STATE_VERSION, info.stateVersion) != SOFTBUS_OK) {
232         LNN_LOGE(LNN_LEDGER, "set state version fail");
233     }
234     if (LnnUpdateLocalNetworkId(info.networkId) != SOFTBUS_OK) {
235         LNN_LOGE(LNN_LEDGER, "set networkId fail");
236     }
237     if (LnnUpdateLocalDeviceName(&info.deviceInfo) != SOFTBUS_OK) {
238         LNN_LOGE(LNN_LEDGER, "set deviceName fail");
239     }
240     LnnNotifyNetworkIdChangeEvent(info.networkId);
241     LnnNotifyLocalNetworkIdChanged();
242     if (info.networkIdTimestamp != 0) {
243         LnnUpdateLocalNetworkIdTime(info.networkIdTimestamp);
244         LNN_LOGD(LNN_LEDGER, "update networkIdTimestamp=%" PRId64, info.networkIdTimestamp);
245     }
246 }
247 
LnnLedgerInfoStatusSet(void)248 void LnnLedgerInfoStatusSet(void)
249 {
250     if (g_isDeviceInfoSet) {
251         return;
252     }
253     const NodeInfo *node = LnnGetLocalNodeInfo();
254     if (node == NULL) {
255         LNN_LOGE(LNN_LEDGER, "node is null");
256         return;
257     }
258 
259     InitDepsStatus uuidStat = node->uuid[0] != '\0' ? DEPS_STATUS_SUCCESS : DEPS_STATUS_FAILED;
260     LnnInitDeviceInfoStatusSet(LEDGER_INFO_UUID, uuidStat);
261     InitDepsStatus udidStat = node->deviceInfo.deviceUdid[0] != '\0' ? DEPS_STATUS_SUCCESS : DEPS_STATUS_FAILED;
262     LnnInitDeviceInfoStatusSet(LEDGER_INFO_UDID, udidStat);
263     InitDepsStatus netStat = node->networkId[0] != '\0' ? DEPS_STATUS_SUCCESS : DEPS_STATUS_FAILED;
264     LnnInitDeviceInfoStatusSet(LEDGER_INFO_NETWORKID, netStat);
265 
266     if ((netStat == DEPS_STATUS_SUCCESS) && (udidStat == DEPS_STATUS_SUCCESS) && (netStat == DEPS_STATUS_SUCCESS)) {
267         LNN_LOGI(LNN_TEST, "Device info all ready.");
268         g_isDeviceInfoSet = true;
269         LnnInitSetDeviceInfoReady();
270     }
271 }
272 
RestoreLocalDeviceInfo(void)273 void RestoreLocalDeviceInfo(void)
274 {
275     LNN_LOGI(LNN_LEDGER, "restore local device info enter");
276     LnnSetLocalFeature();
277     if (g_isRestore) {
278         LNN_LOGI(LNN_LEDGER, "already init");
279         LnnLedgerInfoStatusSet();
280         return;
281     }
282     int32_t ret = LnnLoadLocalDeviceInfo();
283     if (ret != SOFTBUS_OK) {
284         LNN_LOGI(LNN_LEDGER, "get local device info fail, ret=%{public}d", ret);
285         if (ret == SOFTBUS_HUKS_UPDATE_ERR || ret == SOFTBUS_PARSE_JSON_ERR) {
286             LNN_LOGE(LNN_LEDGER, "replace mainboard, device storage data need update");
287             LnnRemoveStorageConfigPath(LNN_FILE_ID_UUID);
288             LnnRemoveStorageConfigPath(LNN_FILE_ID_IRK_KEY);
289             if (LnnUpdateLocalUuidAndIrk() != SOFTBUS_OK) {
290                 LNN_LOGE(LNN_LEDGER, "update local uuid or irk fail");
291             }
292         }
293         const NodeInfo *temp = LnnGetLocalNodeInfo();
294         if (LnnSaveLocalDeviceInfo(temp) != SOFTBUS_OK) {
295             LNN_LOGE(LNN_LEDGER, "save local device info fail");
296         } else {
297             LNN_LOGI(LNN_LEDGER, "save local device info success");
298         }
299     } else {
300         ProcessLocalDeviceInfo();
301     }
302     LnnLedgerInfoStatusSet();
303 
304     AuthLoadDeviceKey();
305     LnnLoadPtkInfo();
306     if (LnnLoadRemoteDeviceInfo() != SOFTBUS_OK) {
307         LNN_LOGE(LNN_LEDGER, "load remote deviceInfo fail");
308         return;
309     }
310     LoadBleBroadcastKey();
311     LnnLoadLocalBroadcastCipherKey();
312 }
313 
LnnInitNetLedgerDelay(void)314 int32_t LnnInitNetLedgerDelay(void)
315 {
316     LnnLoadLocalDeviceAccountIdInfo();
317     RestoreLocalDeviceInfo();
318     int32_t ret = LnnInitLocalLedgerDelay();
319     if (ret != SOFTBUS_OK) {
320         LNN_LOGE(LNN_LEDGER, "delay init local ledger fail");
321         return ret;
322     }
323     ret = LnnInitDecisionDbDelay();
324     if (ret != SOFTBUS_OK) {
325         LNN_LOGE(LNN_LEDGER, "delay init decision db fail");
326         return ret;
327     }
328     return SOFTBUS_OK;
329 }
330 
LnnInitEventMoniterDelay(void)331 int32_t LnnInitEventMoniterDelay(void)
332 {
333     int32_t ret = LnnInitCommonEventMonitorImpl();
334     if (ret != SOFTBUS_OK) {
335         LNN_LOGE(LNN_LEDGER, "delay init LnnInitCommonEventMonitorImpl fail");
336         return ret;
337     }
338     return SOFTBUS_OK;
339 }
340 
LnnDeinitNetLedger(void)341 void LnnDeinitNetLedger(void)
342 {
343     LnnDeinitMetaNodeLedger();
344     LnnDeinitDistributedLedger();
345     LnnDeinitLocalLedger();
346     LnnDeinitHuksInterface();
347     LnnDeinitMetaNodeExtLedger();
348     LnnDeInitCloudSyncModule();
349 }
350 
LnnGetNodeKeyInfoLocal(const char * networkId,int key,uint8_t * info,uint32_t infoLen)351 static int32_t LnnGetNodeKeyInfoLocal(const char *networkId, int key, uint8_t *info, uint32_t infoLen)
352 {
353     if (networkId == NULL || info == NULL) {
354         LNN_LOGE(LNN_LEDGER, "params are null");
355         return SOFTBUS_INVALID_PARAM;
356     }
357     switch (key) {
358         case NODE_KEY_UDID:
359             return LnnGetLocalStrInfo(STRING_KEY_DEV_UDID, (char *)info, infoLen);
360         case NODE_KEY_UUID:
361             return LnnGetLocalStrInfo(STRING_KEY_UUID, (char *)info, infoLen);
362         case NODE_KEY_MASTER_UDID:
363             return LnnGetLocalStrInfo(STRING_KEY_MASTER_NODE_UDID, (char *)info, infoLen);
364         case NODE_KEY_BR_MAC:
365             return LnnGetLocalStrInfo(STRING_KEY_BT_MAC, (char *)info, infoLen);
366         case NODE_KEY_IP_ADDRESS:
367             return LnnGetLocalStrInfo(STRING_KEY_WLAN_IP, (char *)info, infoLen);
368         case NODE_KEY_DEV_NAME:
369             return LnnGetLocalStrInfo(STRING_KEY_DEV_NAME, (char *)info, infoLen);
370         case NODE_KEY_BLE_OFFLINE_CODE:
371             return LnnGetLocalStrInfo(STRING_KEY_OFFLINE_CODE, (char *)info, infoLen);
372         case NODE_KEY_NETWORK_CAPABILITY:
373             return LnnGetLocalNumU32Info(NUM_KEY_NET_CAP, (uint32_t *)info);
374         case NODE_KEY_NETWORK_TYPE:
375             return LnnGetLocalNumInfo(NUM_KEY_DISCOVERY_TYPE, (int32_t *)info);
376         case NODE_KEY_DATA_CHANGE_FLAG:
377             return LnnGetLocalNum16Info(NUM_KEY_DATA_CHANGE_FLAG, (int16_t *)info);
378         case NODE_KEY_NODE_ADDRESS:
379             return LnnGetLocalStrInfo(STRING_KEY_NODE_ADDR, (char *)info, infoLen);
380         case NODE_KEY_P2P_IP_ADDRESS:
381             return LnnGetLocalStrInfo(STRING_KEY_P2P_IP, (char *)info, infoLen);
382         case NODE_KEY_DEVICE_SECURITY_LEVEL:
383             return LnnGetLocalNumInfo(NUM_KEY_DEVICE_SECURITY_LEVEL, (int32_t *)info);
384         case NODE_KEY_DEVICE_SCREEN_STATUS:
385             return LnnGetLocalBoolInfo(BOOL_KEY_SCREEN_STATUS, (bool *)info, NODE_SCREEN_STATUS_LEN);
386         case NODE_KEY_STATIC_NETWORK_CAP:
387             return LnnGetLocalNumU32Info(NUM_KEY_STATIC_NET_CAP, (uint32_t *)info);
388         default:
389             LNN_LOGE(LNN_LEDGER, "invalid node key type=%{public}d", key);
390             return SOFTBUS_INVALID_NUM;
391     }
392 }
393 
LnnGetNodeKeyInfoRemote(const char * networkId,int key,uint8_t * info,uint32_t infoLen)394 static int32_t LnnGetNodeKeyInfoRemote(const char *networkId, int key, uint8_t *info, uint32_t infoLen)
395 {
396     if (networkId == NULL || info == NULL) {
397         LNN_LOGE(LNN_LEDGER, "params are null");
398         return SOFTBUS_INVALID_PARAM;
399     }
400     switch (key) {
401         case NODE_KEY_UDID:
402             return LnnGetRemoteStrInfo(networkId, STRING_KEY_DEV_UDID, (char *)info, infoLen);
403         case NODE_KEY_UUID:
404             return LnnGetRemoteStrInfo(networkId, STRING_KEY_UUID, (char *)info, infoLen);
405         case NODE_KEY_BR_MAC:
406             return LnnGetRemoteStrInfo(networkId, STRING_KEY_BT_MAC, (char *)info, infoLen);
407         case NODE_KEY_IP_ADDRESS:
408             return LnnGetRemoteStrInfo(networkId, STRING_KEY_WLAN_IP, (char *)info, infoLen);
409         case NODE_KEY_DEV_NAME:
410             return LnnGetRemoteStrInfo(networkId, STRING_KEY_DEV_NAME, (char *)info, infoLen);
411         case NODE_KEY_BLE_OFFLINE_CODE:
412             return LnnGetRemoteStrInfo(networkId, STRING_KEY_OFFLINE_CODE, (char *)info, infoLen);
413         case NODE_KEY_NETWORK_CAPABILITY:
414             return LnnGetRemoteNumU32Info(networkId, NUM_KEY_NET_CAP, (uint32_t *)info);
415         case NODE_KEY_NETWORK_TYPE:
416             return LnnGetRemoteNumInfo(networkId, NUM_KEY_DISCOVERY_TYPE, (int32_t *)info);
417         case NODE_KEY_DATA_CHANGE_FLAG:
418             return LnnGetRemoteNum16Info(networkId, NUM_KEY_DATA_CHANGE_FLAG, (int16_t *)info);
419         case NODE_KEY_NODE_ADDRESS:
420             return LnnGetRemoteStrInfo(networkId, STRING_KEY_NODE_ADDR, (char *)info, infoLen);
421         case NODE_KEY_P2P_IP_ADDRESS:
422             return LnnGetRemoteStrInfo(networkId, STRING_KEY_P2P_IP, (char *)info, infoLen);
423         case NODE_KEY_DEVICE_SECURITY_LEVEL:
424             return LnnGetRemoteNumInfo(networkId, NUM_KEY_DEVICE_SECURITY_LEVEL, (int32_t *)info);
425         case NODE_KEY_DEVICE_SCREEN_STATUS:
426             return LnnGetRemoteBoolInfo(networkId, BOOL_KEY_SCREEN_STATUS, (bool*)info);
427         case NODE_KEY_STATIC_NETWORK_CAP:
428             return LnnGetRemoteNumU32Info(networkId, NUM_KEY_STATIC_NET_CAP, (uint32_t *)info);
429         default:
430             LNN_LOGE(LNN_LEDGER, "invalid node key type=%{public}d", key);
431             return SOFTBUS_INVALID_NUM;
432     }
433 }
434 
LnnGetNodeKeyInfo(const char * networkId,int key,uint8_t * info,uint32_t infoLen)435 int32_t LnnGetNodeKeyInfo(const char *networkId, int key, uint8_t *info, uint32_t infoLen)
436 {
437     bool isLocalNetworkId = false;
438     char localNetworkId[NETWORK_ID_BUF_LEN] = {0};
439     if (networkId == NULL || info == NULL) {
440         LNN_LOGE(LNN_LEDGER, "params are null");
441         return SOFTBUS_INVALID_PARAM;
442     }
443     if (LnnGetLocalStrInfo(STRING_KEY_NETWORKID, localNetworkId, NETWORK_ID_BUF_LEN) != SOFTBUS_OK) {
444         LNN_LOGE(LNN_LEDGER, "get local network id fail");
445         return SOFTBUS_NETWORK_GET_LOCAL_NODE_INFO_ERR;
446     }
447     if (strncmp(localNetworkId, networkId, NETWORK_ID_BUF_LEN) == 0) {
448         isLocalNetworkId = true;
449     }
450     if (isLocalNetworkId) {
451         return LnnGetNodeKeyInfoLocal(networkId, key, info, infoLen);
452     } else {
453         return LnnGetNodeKeyInfoRemote(networkId, key, info, infoLen);
454     }
455 }
456 
LnnGetPrivateNodeKeyInfoLocal(const char * networkId,InfoKey key,uint8_t * info,uint32_t infoLen)457 static int32_t LnnGetPrivateNodeKeyInfoLocal(const char *networkId, InfoKey key, uint8_t *info, uint32_t infoLen)
458 {
459     if (networkId == NULL || info == NULL) {
460         LNN_LOGE(LNN_LEDGER, "params are null");
461         return SOFTBUS_INVALID_PARAM;
462     }
463     switch (key) {
464         case BYTE_KEY_IRK:
465             return LnnGetLocalByteInfo(BYTE_KEY_IRK, info, infoLen);
466         case BYTE_KEY_BROADCAST_CIPHER_KEY:
467             return LnnGetLocalByteInfo(BYTE_KEY_BROADCAST_CIPHER_KEY, info, infoLen);
468         case BYTE_KEY_ACCOUNT_HASH:
469             return LnnGetLocalByteInfo(BYTE_KEY_ACCOUNT_HASH, info, infoLen);
470         case BYTE_KEY_REMOTE_PTK:
471             return LnnGetLocalByteInfo(BYTE_KEY_REMOTE_PTK, info, infoLen);
472         default:
473             LNN_LOGE(LNN_LEDGER, "invalid node key type=%{public}d", key);
474             return SOFTBUS_INVALID_PARAM;
475     }
476 }
477 
LnnGetPrivateNodeKeyInfoRemote(const char * networkId,InfoKey key,uint8_t * info,uint32_t infoLen)478 static int32_t LnnGetPrivateNodeKeyInfoRemote(const char *networkId, InfoKey key, uint8_t *info, uint32_t infoLen)
479 {
480     if (networkId == NULL || info == NULL) {
481         LNN_LOGE(LNN_LEDGER, "params are null");
482         return SOFTBUS_INVALID_PARAM;
483     }
484     switch (key) {
485         case BYTE_KEY_IRK:
486             return LnnGetRemoteByteInfo(networkId, BYTE_KEY_IRK, info, infoLen);
487         case BYTE_KEY_BROADCAST_CIPHER_KEY:
488             return LnnGetRemoteByteInfo(networkId, BYTE_KEY_BROADCAST_CIPHER_KEY, info, infoLen);
489         case BYTE_KEY_ACCOUNT_HASH:
490             return LnnGetRemoteByteInfo(networkId, BYTE_KEY_ACCOUNT_HASH, info, infoLen);
491         case BYTE_KEY_REMOTE_PTK:
492             return LnnGetRemoteByteInfo(networkId, BYTE_KEY_REMOTE_PTK, info, infoLen);
493         default:
494             LNN_LOGE(LNN_LEDGER, "invalid node key type=%{public}d", key);
495             return SOFTBUS_INVALID_PARAM;
496     }
497 }
498 
LnnGetPrivateNodeKeyInfo(const char * networkId,InfoKey key,uint8_t * info,uint32_t infoLen)499 static int32_t LnnGetPrivateNodeKeyInfo(const char *networkId, InfoKey key, uint8_t *info, uint32_t infoLen)
500 {
501     if (networkId == NULL || info == NULL) {
502         LNN_LOGE(LNN_LEDGER, "params are null");
503         return SOFTBUS_INVALID_PARAM;
504     }
505     bool isLocalNetworkId = false;
506     char localNetworkId[NETWORK_ID_BUF_LEN] = {0};
507     if (LnnGetLocalStrInfo(STRING_KEY_NETWORKID, localNetworkId, NETWORK_ID_BUF_LEN) != SOFTBUS_OK) {
508         LNN_LOGE(LNN_LEDGER, "get local network id fail");
509         return SOFTBUS_NOT_FIND;
510     }
511     if (strncmp(localNetworkId, networkId, NETWORK_ID_BUF_LEN) == 0) {
512         isLocalNetworkId = true;
513     }
514     if (isLocalNetworkId) {
515         return LnnGetPrivateNodeKeyInfoLocal(networkId, key, info, infoLen);
516     } else {
517         return LnnGetPrivateNodeKeyInfoRemote(networkId, key, info, infoLen);
518     }
519 }
520 
LnnSetNodeDataChangeFlag(const char * networkId,uint16_t dataChangeFlag)521 int32_t LnnSetNodeDataChangeFlag(const char *networkId, uint16_t dataChangeFlag)
522 {
523     bool isLocalNetworkId = false;
524     char localNetworkId[NETWORK_ID_BUF_LEN] = {0};
525     if (networkId == NULL) {
526         LNN_LOGE(LNN_LEDGER, "params are null");
527         return SOFTBUS_INVALID_PARAM;
528     }
529     if (LnnGetLocalStrInfo(STRING_KEY_NETWORKID, localNetworkId, NETWORK_ID_BUF_LEN) != SOFTBUS_OK) {
530         LNN_LOGE(LNN_LEDGER, "get local network id fail");
531         return SOFTBUS_NETWORK_GET_LOCAL_NODE_INFO_ERR;
532     }
533     if (strncmp(localNetworkId, networkId, NETWORK_ID_BUF_LEN) == 0) {
534         isLocalNetworkId = true;
535     }
536     if (isLocalNetworkId) {
537         return LnnSetLocalNum16Info(NUM_KEY_DATA_CHANGE_FLAG, (int16_t)dataChangeFlag);
538     }
539     LNN_LOGE(LNN_LEDGER, "remote networkId");
540     return SOFTBUS_NETWORK_INVALID_DEV_INFO;
541 }
542 
LnnSetDataLevel(const DataLevel * dataLevel,bool * isSwitchLevelChanged)543 int32_t LnnSetDataLevel(const DataLevel *dataLevel, bool *isSwitchLevelChanged)
544 {
545     if (dataLevel == NULL || isSwitchLevelChanged == NULL) {
546         LNN_LOGE(LNN_LEDGER, "LnnSetDataLevel data level or switch level change flag is null");
547         return SOFTBUS_INVALID_PARAM;
548     }
549     LNN_LOGI(LNN_LEDGER, "LnnSetDataLevel, dynamic: %{public}hu, static: %{public}hu, "
550         "switch: %{public}u, switchLen: %{public}hu", dataLevel->dynamicLevel, dataLevel->staticLevel,
551         dataLevel->switchLevel, dataLevel->switchLength);
552     uint16_t dynamicLevel = dataLevel->dynamicLevel;
553     if (LnnSetLocalNumU16Info(NUM_KEY_DATA_DYNAMIC_LEVEL, dynamicLevel) != SOFTBUS_OK) {
554         LNN_LOGE(LNN_LEDGER, "Set data dynamic level failed");
555         return SOFTBUS_NETWORK_SET_LEDGER_INFO_ERR;
556     }
557     uint16_t staticLevel = dataLevel->staticLevel;
558     if (LnnSetLocalNumU16Info(NUM_KEY_DATA_STATIC_LEVEL, staticLevel) != SOFTBUS_OK) {
559         LNN_LOGE(LNN_LEDGER, "Set data static level failed");
560         return SOFTBUS_NETWORK_SET_LEDGER_INFO_ERR;
561     }
562     uint32_t curSwitchLevel = 0;
563     if (LnnGetLocalNumU32Info(NUM_KEY_DATA_SWITCH_LEVEL, &curSwitchLevel) != SOFTBUS_OK) {
564         LNN_LOGE(LNN_LEDGER, "Get current data switch level faield");
565         return SOFTBUS_NETWORK_GET_LEDGER_INFO_ERR;
566     }
567     uint32_t switchLevel = dataLevel->switchLevel;
568     if (LnnSetLocalNumU32Info(NUM_KEY_DATA_SWITCH_LEVEL, switchLevel) != SOFTBUS_OK) {
569         LNN_LOGE(LNN_LEDGER, "Set data switch level faield");
570         return SOFTBUS_NETWORK_SET_LEDGER_INFO_ERR;
571     }
572     uint16_t switchLength = dataLevel->switchLength;
573     if (LnnSetLocalNumU16Info(NUM_KEY_DATA_SWITCH_LENGTH, switchLength) != SOFTBUS_OK) {
574         LNN_LOGE(LNN_LEDGER, "Set data switch length failed");
575         return SOFTBUS_NETWORK_SET_LEDGER_INFO_ERR;
576     }
577     *isSwitchLevelChanged = (curSwitchLevel != switchLevel);
578     return SOFTBUS_OK;
579 }
580 
LnnGetNodeKeyInfoLen(int32_t key)581 int32_t LnnGetNodeKeyInfoLen(int32_t key)
582 {
583     switch (key) {
584         case NODE_KEY_UDID:
585             return UDID_BUF_LEN;
586         case NODE_KEY_UUID:
587             return UUID_BUF_LEN;
588         case NODE_KEY_MASTER_UDID:
589             return UDID_BUF_LEN;
590         case NODE_KEY_BR_MAC:
591             return MAC_LEN;
592         case NODE_KEY_IP_ADDRESS:
593             return IP_LEN;
594         case NODE_KEY_DEV_NAME:
595             return DEVICE_NAME_BUF_LEN;
596         case NODE_KEY_NETWORK_CAPABILITY:
597             return LNN_COMMON_LEN;
598         case NODE_KEY_NETWORK_TYPE:
599             return LNN_COMMON_LEN;
600         case NODE_KEY_DATA_CHANGE_FLAG:
601             return DATA_CHANGE_FLAG_BUF_LEN;
602         case NODE_KEY_NODE_ADDRESS:
603             return SHORT_ADDRESS_MAX_LEN;
604         case NODE_KEY_P2P_IP_ADDRESS:
605             return IP_LEN;
606         case NODE_KEY_DEVICE_SECURITY_LEVEL:
607             return LNN_COMMON_LEN;
608         case NODE_KEY_DEVICE_SCREEN_STATUS:
609             return DATA_DEVICE_SCREEN_STATUS_LEN;
610         default:
611             LNN_LOGE(LNN_LEDGER, "invalid node key type=%{public}d", key);
612             return SOFTBUS_INVALID_NUM;
613     }
614 }
615 
SoftbusDumpPrintAccountId(int fd,NodeBasicInfo * nodeInfo)616 static int32_t SoftbusDumpPrintAccountId(int fd, NodeBasicInfo *nodeInfo)
617 {
618     if (nodeInfo == NULL) {
619         LNN_LOGE(LNN_LEDGER, "Invalid parameter");
620         return SOFTBUS_INVALID_PARAM;
621     }
622     char accountHash[SHA_256_HASH_LEN] = {0};
623     if (LnnGetPrivateNodeKeyInfo(nodeInfo->networkId, BYTE_KEY_ACCOUNT_HASH,
624         (uint8_t *)&accountHash, SHA_256_HASH_LEN) != SOFTBUS_OK) {
625         LNN_LOGE(LNN_LEDGER, "LnnGetNodeKeyInfo account hash failed");
626         return SOFTBUS_NOT_FIND;
627     }
628     char accountHashStr[SHA_256_HEX_HASH_LEN] = {0};
629     if (ConvertBytesToHexString(accountHashStr, SHA_256_HEX_HASH_LEN,
630         (unsigned char *)accountHash, SHA_256_HASH_LEN) != SOFTBUS_OK) {
631         LNN_LOGE(LNN_LEDGER, "convert account to string fail.");
632         return SOFTBUS_BYTE_CONVERT_FAIL;
633     }
634     char *anonyAccountHash = NULL;
635     Anonymize(accountHashStr, &anonyAccountHash);
636     SOFTBUS_DPRINTF(fd, "AccountHash->%s\n", AnonymizeWrapper(anonyAccountHash));
637     AnonymizeFree(anonyAccountHash);
638     return SOFTBUS_OK;
639 }
640 
SoftbusDumpPrintUdid(int fd,NodeBasicInfo * nodeInfo)641 int32_t SoftbusDumpPrintUdid(int fd, NodeBasicInfo *nodeInfo)
642 {
643     if (nodeInfo == NULL) {
644         LNN_LOGE(LNN_LEDGER, "Invalid parameter");
645         return SOFTBUS_INVALID_PARAM;
646     }
647     NodeDeviceInfoKey key;
648     key = NODE_KEY_UDID;
649     unsigned char udid[UDID_BUF_LEN] = {0};
650 
651     if (LnnGetNodeKeyInfo(nodeInfo->networkId, key, udid, UDID_BUF_LEN) != SOFTBUS_OK) {
652         LNN_LOGE(LNN_LEDGER, "LnnGetNodeKeyInfo Udid failed");
653         return SOFTBUS_NOT_FIND;
654     }
655     char *anonyUdid = NULL;
656     Anonymize((char *)udid, &anonyUdid);
657     SOFTBUS_DPRINTF(fd, "  %-15s->%s\n", "Udid", AnonymizeWrapper(anonyUdid));
658     AnonymizeFree(anonyUdid);
659     return SOFTBUS_OK;
660 }
661 
SoftbusDumpPrintUuid(int fd,NodeBasicInfo * nodeInfo)662 int32_t SoftbusDumpPrintUuid(int fd, NodeBasicInfo *nodeInfo)
663 {
664     if (nodeInfo == NULL) {
665         LNN_LOGE(LNN_LEDGER, "Invalid parameter");
666         return SOFTBUS_INVALID_PARAM;
667     }
668     NodeDeviceInfoKey key;
669     key = NODE_KEY_UUID;
670     unsigned char uuid[UUID_BUF_LEN] = {0};
671 
672     if (LnnGetNodeKeyInfo(nodeInfo->networkId, key, uuid, UUID_BUF_LEN) != SOFTBUS_OK) {
673         LNN_LOGE(LNN_LEDGER, "LnnGetNodeKeyInfo Uuid failed");
674         return SOFTBUS_NOT_FIND;
675     }
676     char *anonyUuid = NULL;
677     Anonymize((char *)uuid, &anonyUuid);
678     SOFTBUS_DPRINTF(fd, "  %-15s->%s\n", "Uuid", AnonymizeWrapper(anonyUuid));
679     AnonymizeFree(anonyUuid);
680     return SOFTBUS_OK;
681 }
682 
SoftbusDumpPrintMac(int fd,NodeBasicInfo * nodeInfo)683 int32_t SoftbusDumpPrintMac(int fd, NodeBasicInfo *nodeInfo)
684 {
685     if (nodeInfo == NULL) {
686         LNN_LOGE(LNN_LEDGER, "Invalid parameter");
687         return SOFTBUS_INVALID_PARAM;
688     }
689     NodeDeviceInfoKey key;
690     key = NODE_KEY_BR_MAC;
691     unsigned char brMac[BT_MAC_LEN] = {0};
692     char newBrMac[BT_MAC_LEN] = {0};
693 
694     if (LnnGetNodeKeyInfo(nodeInfo->networkId, key, brMac, BT_MAC_LEN) != SOFTBUS_OK) {
695         LNN_LOGE(LNN_LEDGER, "LnnGetNodeKeyInfo brMac failed");
696         return SOFTBUS_NOT_FIND;
697     }
698     DataMasking((char *)brMac, BT_MAC_LEN, MAC_DELIMITER, newBrMac);
699     SOFTBUS_DPRINTF(fd, "  %-15s->%s\n", "BrMac", newBrMac);
700     return SOFTBUS_OK;
701 }
702 
SoftbusDumpPrintIp(int fd,NodeBasicInfo * nodeInfo)703 int32_t SoftbusDumpPrintIp(int fd, NodeBasicInfo *nodeInfo)
704 {
705     if (nodeInfo == NULL) {
706         LNN_LOGE(LNN_LEDGER, "Invalid parameter");
707         return SOFTBUS_INVALID_PARAM;
708     }
709     NodeDeviceInfoKey key;
710     key = NODE_KEY_IP_ADDRESS;
711     char ipAddr[IP_STR_MAX_LEN] = {0};
712     char newIpAddr[IP_STR_MAX_LEN] = {0};
713 
714     if (LnnGetNodeKeyInfo(nodeInfo->networkId, key, (uint8_t *)ipAddr, IP_STR_MAX_LEN) != SOFTBUS_OK) {
715         LNN_LOGE(LNN_LEDGER, "LnnGetNodeKeyInfo ipAddr failed");
716         return SOFTBUS_NOT_FIND;
717     }
718     DataMasking((char *)ipAddr, IP_STR_MAX_LEN, IP_DELIMITER, newIpAddr);
719     SOFTBUS_DPRINTF(fd, "  %-15s->%s\n", "IpAddr", newIpAddr);
720     return SOFTBUS_OK;
721 }
722 
SoftbusDumpPrintDynamicNetCap(int fd,NodeBasicInfo * nodeInfo)723 int32_t SoftbusDumpPrintDynamicNetCap(int fd, NodeBasicInfo *nodeInfo)
724 {
725     if (nodeInfo == NULL) {
726         LNN_LOGE(LNN_LEDGER, "Invalid parameter");
727         return SOFTBUS_INVALID_PARAM;
728     }
729     NodeDeviceInfoKey key;
730     key = NODE_KEY_NETWORK_CAPABILITY;
731     int32_t netCapacity = 0;
732     if (LnnGetNodeKeyInfo(nodeInfo->networkId, key, (uint8_t *)&netCapacity, sizeof(netCapacity)) != SOFTBUS_OK) {
733         LNN_LOGE(LNN_LEDGER, "LnnGetNodeKeyInfo netCapacity failed");
734         return SOFTBUS_NOT_FIND;
735     }
736     SOFTBUS_DPRINTF(fd, "  %-15s->%d\n", "NetCapacity", netCapacity);
737     return SOFTBUS_OK;
738 }
739 
SoftbusDumpPrintNetType(int fd,NodeBasicInfo * nodeInfo)740 int32_t SoftbusDumpPrintNetType(int fd, NodeBasicInfo *nodeInfo)
741 {
742     if (nodeInfo == NULL) {
743         LNN_LOGE(LNN_LEDGER, "Invalid parameter");
744         return SOFTBUS_INVALID_PARAM;
745     }
746     NodeDeviceInfoKey key;
747     key = NODE_KEY_NETWORK_TYPE;
748     int32_t netType = 0;
749     if (LnnGetNodeKeyInfo(nodeInfo->networkId, key, (uint8_t *)&netType, sizeof(netType)) != SOFTBUS_OK) {
750         LNN_LOGE(LNN_LEDGER, "LnnGetNodeKeyInfo netType failed");
751         return SOFTBUS_NOT_FIND;
752     }
753     SOFTBUS_DPRINTF(fd, "  %-15s->%d\n", "NetType", netType);
754     return SOFTBUS_OK;
755 }
756 
SoftbusDumpPrintDeviceLevel(int fd,NodeBasicInfo * nodeInfo)757 static int32_t SoftbusDumpPrintDeviceLevel(int fd, NodeBasicInfo *nodeInfo)
758 {
759     if (nodeInfo == NULL) {
760         LNN_LOGE(LNN_LEDGER, "Invalid parameter");
761         return SOFTBUS_INVALID_PARAM;
762     }
763     NodeDeviceInfoKey key;
764     key = NODE_KEY_DEVICE_SECURITY_LEVEL;
765     int32_t securityLevel = 0;
766     if (LnnGetNodeKeyInfo(nodeInfo->networkId, key, (uint8_t *)&securityLevel, sizeof(securityLevel)) != SOFTBUS_OK) {
767         LNN_LOGE(LNN_LEDGER, "LnnGetNodeKeyInfo securityLevel failed");
768         return SOFTBUS_NOT_FIND;
769     }
770     SOFTBUS_DPRINTF(fd, "  %-15s->%d\n", "SecurityLevel", securityLevel);
771     return SOFTBUS_OK;
772 }
773 
SoftbusDumpPrintScreenStatus(int fd,NodeBasicInfo * nodeInfo)774 static int32_t SoftbusDumpPrintScreenStatus(int fd, NodeBasicInfo *nodeInfo)
775 {
776     if (nodeInfo == NULL) {
777         LNN_LOGE(LNN_LEDGER, "Invalid parameter");
778         return SOFTBUS_INVALID_PARAM;
779     }
780     bool isScreenOn = false;
781     if (LnnGetNodeKeyInfo(nodeInfo->networkId, NODE_KEY_DEVICE_SCREEN_STATUS, (uint8_t *)&isScreenOn,
782         DATA_DEVICE_SCREEN_STATUS_LEN) != SOFTBUS_OK) {
783         LNN_LOGE(LNN_LEDGER, "LnnGetNodeKeyInfo isScreenOn failed");
784         return SOFTBUS_NOT_FIND;
785     }
786     SOFTBUS_DPRINTF(fd, "  %-15s->%s\n", "isScreenOn", isScreenOn ? "on" : "off");
787     return SOFTBUS_OK;
788 }
789 
SoftbusDumpPrintStaticNetCap(int fd,NodeBasicInfo * nodeInfo)790 static int32_t SoftbusDumpPrintStaticNetCap(int fd, NodeBasicInfo *nodeInfo)
791 {
792     if (nodeInfo == NULL) {
793         LNN_LOGE(LNN_LEDGER, "Invalid parameter");
794         return SOFTBUS_INVALID_PARAM;
795     }
796     NodeDeviceInfoKey key;
797     key = NODE_KEY_STATIC_NETWORK_CAP;
798     uint32_t staticNetCap = 0;
799     if (LnnGetNodeKeyInfo(nodeInfo->networkId, key, (uint8_t *)&staticNetCap, sizeof(staticNetCap)) != SOFTBUS_OK) {
800         LNN_LOGE(LNN_LEDGER, "LnnGetNodeKeyInfo staticNetCap failed");
801         return SOFTBUS_NOT_FIND;
802     }
803     SOFTBUS_DPRINTF(fd, "  %-15s->%u\n", "StaticNetCap", staticNetCap);
804     return SOFTBUS_OK;
805 }
806 
SoftbusDumpPrintIrk(int fd,NodeBasicInfo * nodeInfo)807 static int32_t SoftbusDumpPrintIrk(int fd, NodeBasicInfo *nodeInfo)
808 {
809     if (nodeInfo == NULL) {
810         LNN_LOGE(LNN_LEDGER, "Invalid parameter");
811         return SOFTBUS_INVALID_PARAM;
812     }
813     uint8_t irk[LFINDER_IRK_LEN] = {0};
814     if (LnnGetPrivateNodeKeyInfo(nodeInfo->networkId, BYTE_KEY_IRK,
815         (uint8_t *)&irk, LFINDER_IRK_LEN) != SOFTBUS_OK) {
816         LNN_LOGE(LNN_LEDGER, "LnnGetPrivateNodeKeyInfo irk failed");
817         return SOFTBUS_NOT_FIND;
818     }
819     char peerIrkStr[LFINDER_IRK_STR_LEN] = {0};
820     if (ConvertBytesToHexString(peerIrkStr, LFINDER_IRK_STR_LEN, irk, LFINDER_IRK_LEN) != SOFTBUS_OK) {
821         LNN_LOGE(LNN_LEDGER, "convert irk to string fail.");
822         (void)memset_s(irk, LFINDER_IRK_LEN, 0, LFINDER_IRK_LEN);
823         return SOFTBUS_BYTE_CONVERT_FAIL;
824     }
825     char *anonyIrk = NULL;
826     Anonymize(peerIrkStr, &anonyIrk);
827     SOFTBUS_DPRINTF(fd, "  %-15s->%s\n", "IRK", AnonymizeWrapper(anonyIrk));
828     AnonymizeFree(anonyIrk);
829     (void)memset_s(irk, LFINDER_IRK_LEN, 0, LFINDER_IRK_LEN);
830     (void)memset_s(peerIrkStr, LFINDER_IRK_STR_LEN, 0, LFINDER_IRK_STR_LEN);
831     return SOFTBUS_OK;
832 }
833 
SoftbusDumpPrintBroadcastCipher(int fd,NodeBasicInfo * nodeInfo)834 static int32_t SoftbusDumpPrintBroadcastCipher(int fd, NodeBasicInfo *nodeInfo)
835 {
836     if (nodeInfo == NULL) {
837         LNN_LOGE(LNN_LEDGER, "Invalid parameter");
838         return SOFTBUS_INVALID_PARAM;
839     }
840     unsigned char broadcastCipher[SESSION_KEY_LENGTH] = {0};
841     if (LnnGetPrivateNodeKeyInfo(nodeInfo->networkId, BYTE_KEY_BROADCAST_CIPHER_KEY,
842         (uint8_t *)&broadcastCipher, SESSION_KEY_LENGTH) != SOFTBUS_OK) {
843         LNN_LOGE(LNN_LEDGER, "LnnGetPrivateNodeKeyInfo broadcastCipher failed");
844         return SOFTBUS_NOT_FIND;
845     }
846     char broadcastCipherStr[SESSION_KEY_STR_LEN] = {0};
847     if (ConvertBytesToHexString(broadcastCipherStr, SESSION_KEY_STR_LEN,
848         broadcastCipher, SESSION_KEY_LENGTH) != SOFTBUS_OK) {
849         LNN_LOGE(LNN_LEDGER, "convert broadcastCipher to string fail.");
850         (void)memset_s(broadcastCipher, SESSION_KEY_LENGTH, 0, SESSION_KEY_LENGTH);
851         return SOFTBUS_BYTE_CONVERT_FAIL;
852     }
853     char *anonyBroadcastCipher = NULL;
854     Anonymize((char *)broadcastCipherStr, &anonyBroadcastCipher);
855     SOFTBUS_DPRINTF(fd, "  %-15s->%s\n", "BroadcastCipher", AnonymizeWrapper(anonyBroadcastCipher));
856     AnonymizeFree(anonyBroadcastCipher);
857     (void)memset_s(broadcastCipher, SESSION_KEY_LENGTH, 0, SESSION_KEY_LENGTH);
858     (void)memset_s(broadcastCipherStr, SESSION_KEY_STR_LEN, 0, SESSION_KEY_STR_LEN);
859     return SOFTBUS_OK;
860 }
861 
SoftbusDumpPrintRemotePtk(int fd,NodeBasicInfo * nodeInfo)862 static int32_t SoftbusDumpPrintRemotePtk(int fd, NodeBasicInfo *nodeInfo)
863 {
864     if (nodeInfo == NULL) {
865         LNN_LOGE(LNN_LEDGER, "Invalid parameter");
866         return SOFTBUS_INVALID_PARAM;
867     }
868     char remotePtk[PTK_DEFAULT_LEN] = {0};
869     if (LnnGetPrivateNodeKeyInfo(nodeInfo->networkId, BYTE_KEY_REMOTE_PTK,
870         (uint8_t *)&remotePtk, PTK_DEFAULT_LEN) != SOFTBUS_OK) {
871         LNN_LOGE(LNN_LEDGER, "LnnGetPrivateNodeKeyInfo ptk failed");
872         return SOFTBUS_NOT_FIND;
873     }
874     char remotePtkStr[PTK_STR_LEN] = {0};
875     if (ConvertBytesToHexString(remotePtkStr, PTK_STR_LEN,
876         (unsigned char *)remotePtk, PTK_DEFAULT_LEN) != SOFTBUS_OK) {
877         LNN_LOGE(LNN_LEDGER, "convert remotePtk to string fail.");
878         (void)memset_s(remotePtk, PTK_DEFAULT_LEN, 0, PTK_DEFAULT_LEN);
879         return SOFTBUS_BYTE_CONVERT_FAIL;
880     }
881     char *anonyRemotePtk = NULL;
882     Anonymize(remotePtkStr, &anonyRemotePtk);
883     SOFTBUS_DPRINTF(fd, "  %-15s->%s\n", "RemotePtk", AnonymizeWrapper(anonyRemotePtk));
884     AnonymizeFree(anonyRemotePtk);
885     (void)memset_s(remotePtk, PTK_DEFAULT_LEN, 0, PTK_DEFAULT_LEN);
886     (void)memset_s(remotePtkStr, PTK_STR_LEN, 0, PTK_STR_LEN);
887     return SOFTBUS_OK;
888 }
889 
SoftbusDumpPrintLocalPtk(int fd,NodeBasicInfo * nodeInfo)890 static int32_t SoftbusDumpPrintLocalPtk(int fd, NodeBasicInfo *nodeInfo)
891 {
892     if (nodeInfo == NULL) {
893         LNN_LOGE(LNN_LEDGER, "Invalid parameter");
894         return SOFTBUS_INVALID_PARAM;
895     }
896     char peerUuid[UUID_BUF_LEN] = {0};
897     if (LnnGetRemoteStrInfo(nodeInfo->networkId, STRING_KEY_UUID, peerUuid, UUID_BUF_LEN) != SOFTBUS_OK) {
898         LNN_LOGE(LNN_LEDGER, "gey peerUuid failed");
899         return SOFTBUS_NOT_FIND;
900     }
901     char localPtk[PTK_DEFAULT_LEN] = {0};
902     if (LnnGetLocalPtkByUuid(peerUuid, localPtk, PTK_DEFAULT_LEN) != SOFTBUS_OK) {
903         LNN_LOGE(LNN_LEDGER, "LnnGetLocalPtkByUuid failed");
904         return SOFTBUS_NOT_FIND;
905     }
906     char localPtkStr[PTK_STR_LEN] = {0};
907     if (ConvertBytesToHexString(localPtkStr, PTK_STR_LEN,
908         (unsigned char *)localPtk, PTK_DEFAULT_LEN) != SOFTBUS_OK) {
909         LNN_LOGE(LNN_LEDGER, "convert localPtk to string fail.");
910         (void)memset_s(localPtk, PTK_DEFAULT_LEN, 0, PTK_DEFAULT_LEN);
911         return SOFTBUS_BYTE_CONVERT_FAIL;
912     }
913     char *anonyLocalPtk = NULL;
914     Anonymize(localPtkStr, &anonyLocalPtk);
915     SOFTBUS_DPRINTF(fd, "  %-15s->%s\n", "LocalPtk", AnonymizeWrapper(anonyLocalPtk));
916     AnonymizeFree(anonyLocalPtk);
917     (void)memset_s(localPtk, PTK_DEFAULT_LEN, 0, PTK_DEFAULT_LEN);
918     (void)memset_s(localPtkStr, PTK_STR_LEN, 0, PTK_STR_LEN);
919     return SOFTBUS_OK;
920 }
921 
SoftbusDumpDeviceInfo(int fd,NodeBasicInfo * nodeInfo)922 static void SoftbusDumpDeviceInfo(int fd, NodeBasicInfo *nodeInfo)
923 {
924     SOFTBUS_DPRINTF(fd, "DeviceInfo:\n");
925     if (fd <= 0 || nodeInfo == NULL) {
926         LNN_LOGE(LNN_LEDGER, "Invalid parameter");
927         return;
928     }
929     char *anonyNetworkId = NULL;
930     Anonymize(nodeInfo->networkId, &anonyNetworkId);
931     SOFTBUS_DPRINTF(fd, "  %-15s->%s\n", "NetworkId", AnonymizeWrapper(anonyNetworkId));
932     AnonymizeFree(anonyNetworkId);
933     if (SoftbusDumpPrintUdid(fd, nodeInfo) != SOFTBUS_OK) {
934         LNN_LOGE(LNN_LEDGER, "SoftbusDumpPrintUdid failed");
935     }
936     if (SoftbusDumpPrintUuid(fd, nodeInfo) != SOFTBUS_OK) {
937         LNN_LOGE(LNN_LEDGER, "SoftbusDumpPrintUuid failed");
938     }
939     if (SoftbusDumpPrintDynamicNetCap(fd, nodeInfo) != SOFTBUS_OK) {
940         LNN_LOGE(LNN_LEDGER, "SoftbusDumpPrintDynamicNetCap failed");
941     }
942     if (SoftbusDumpPrintNetType(fd, nodeInfo) != SOFTBUS_OK) {
943         LNN_LOGE(LNN_LEDGER, "SoftbusDumpPrintNetType failed");
944     }
945     if (SoftbusDumpPrintDeviceLevel(fd, nodeInfo) != SOFTBUS_OK) {
946         LNN_LOGE(LNN_LEDGER, "SoftbusDumpPrintDeviceLevel failed");
947     }
948     if (SoftbusDumpPrintScreenStatus(fd, nodeInfo) != SOFTBUS_OK) {
949         LNN_LOGE(LNN_LEDGER, "SoftbusDumpPrintScreenStatus failed");
950     }
951     if (SoftbusDumpPrintStaticNetCap(fd, nodeInfo) != SOFTBUS_OK) {
952         LNN_LOGE(LNN_LEDGER, "SoftbusDumpPrintStaticNetCap failed");
953     }
954 }
955 
SoftbusDumpDeviceAddr(int fd,NodeBasicInfo * nodeInfo)956 static void SoftbusDumpDeviceAddr(int fd, NodeBasicInfo *nodeInfo)
957 {
958     SOFTBUS_DPRINTF(fd, "DeviceAddr:\n");
959     if (fd <= 0 || nodeInfo == NULL) {
960         LNN_LOGE(LNN_LEDGER, "Invalid parameter");
961         return;
962     }
963     if (SoftbusDumpPrintMac(fd, nodeInfo) != SOFTBUS_OK) {
964         LNN_LOGE(LNN_LEDGER, "SoftbusDumpPrintMac failed");
965     }
966     if (SoftbusDumpPrintIp(fd, nodeInfo) != SOFTBUS_OK) {
967         LNN_LOGE(LNN_LEDGER, "SoftbusDumpPrintIp failed");
968     }
969 }
970 
SoftbusDumpDeviceCipher(int fd,NodeBasicInfo * nodeInfo)971 static void SoftbusDumpDeviceCipher(int fd, NodeBasicInfo *nodeInfo)
972 {
973     SOFTBUS_DPRINTF(fd, "DeviceCipher:\n");
974     if (fd <= 0 || nodeInfo == NULL) {
975         LNN_LOGE(LNN_LEDGER, "Invalid parameter");
976         return;
977     }
978     if (SoftbusDumpPrintIrk(fd, nodeInfo) != SOFTBUS_OK) {
979         LNN_LOGE(LNN_LEDGER, "SoftbusDumpPrintIrk failed");
980     }
981     if (SoftbusDumpPrintBroadcastCipher(fd, nodeInfo) != SOFTBUS_OK) {
982         LNN_LOGE(LNN_LEDGER, "SoftbusDumpPrintBroadcastCipher failed");
983     }
984     if (SoftbusDumpPrintRemotePtk(fd, nodeInfo) != SOFTBUS_OK) {
985         LNN_LOGE(LNN_LEDGER, "SoftbusDumpPrintRemotePtk failed");
986     }
987     if (SoftbusDumpPrintLocalPtk(fd, nodeInfo) != SOFTBUS_OK) {
988         LNN_LOGE(LNN_LEDGER, "SoftbusDumpPrintLocalPtk failed");
989     }
990 }
991 
SoftBusDumpBusCenterPrintInfo(int fd,NodeBasicInfo * nodeInfo)992 void SoftBusDumpBusCenterPrintInfo(int fd, NodeBasicInfo *nodeInfo)
993 {
994     if (fd <= 0 || nodeInfo == NULL) {
995         LNN_LOGE(LNN_LEDGER, "param is null");
996         return;
997     }
998     char *anonyDeviceName = NULL;
999     Anonymize(nodeInfo->deviceName, &anonyDeviceName);
1000     SOFTBUS_DPRINTF(fd, "DeviceName->%s\n", AnonymizeWrapper(anonyDeviceName));
1001     AnonymizeFree(anonyDeviceName);
1002     SoftbusDumpPrintAccountId(fd, nodeInfo);
1003     SoftbusDumpDeviceInfo(fd, nodeInfo);
1004     SoftbusDumpDeviceAddr(fd, nodeInfo);
1005     SoftbusDumpDeviceCipher(fd, nodeInfo);
1006 }
1007 
LnnClearLocalPtkList(void)1008 static void LnnClearLocalPtkList(void)
1009 {
1010     LnnClearPtkList();
1011 }
1012 
LnnUpdateLocalDeviceInfo(void)1013 int32_t LnnUpdateLocalDeviceInfo(void)
1014 {
1015     char networkId[NETWORK_ID_BUF_LEN] = { 0 };
1016 
1017     ClearDeviceInfo();
1018     AuthClearDeviceKey();
1019     LnnClearLocalPtkList();
1020 
1021     int32_t ret = LnnUpdateLocalUuidAndIrk();
1022     if (ret != SOFTBUS_OK) {
1023         LNN_LOGE(LNN_LEDGER, "update local uuid or irk failed");
1024         return ret;
1025     }
1026     ret = LnnGenLocalNetworkId(networkId, NETWORK_ID_BUF_LEN);
1027     if (ret != SOFTBUS_OK) {
1028         LNN_LOGE(LNN_LEDGER, "get local networkId failed");
1029         return ret;
1030     }
1031     ret = LnnSetLocalStrInfo(STRING_KEY_NETWORKID, networkId);
1032     if (ret != SOFTBUS_OK) {
1033         LNN_LOGE(LNN_LEDGER, "set local networkId failed");
1034         return ret;
1035     }
1036     ret = GenerateNewLocalCipherKey();
1037     if (ret != SOFTBUS_OK) {
1038         LNN_LOGE(LNN_LEDGER, "generate new local cipher key failed");
1039         return ret;
1040     }
1041     LnnRemoveDb();
1042     ret = InitTrustedDevInfoTable();
1043     if (ret != SOFTBUS_OK) {
1044         LNN_LOGE(LNN_LEDGER, "init trusted device info failed");
1045         return ret;
1046     }
1047     ret = LnnGenBroadcastCipherInfo();
1048     if (ret != SOFTBUS_OK) {
1049         LNN_LOGE(LNN_LEDGER, "generate cipher failed");
1050         return ret;
1051     }
1052     return SOFTBUS_OK;
1053 }
1054