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