• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 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 "auth_device_common_key.h"
22 #include "bus_center_manager.h"
23 #include "lnn_cipherkey_manager.h"
24 #include "lnn_decision_db.h"
25 #include "lnn_distributed_net_ledger.h"
26 #include "lnn_huks_utils.h"
27 #include "lnn_local_net_ledger.h"
28 #include "lnn_meta_node_ledger.h"
29 #include "lnn_device_info_recovery.h"
30 #include "softbus_adapter_mem.h"
31 #include "softbus_def.h"
32 #include "softbus_errcode.h"
33 #include "softbus_log.h"
34 #include "softbus_utils.h"
35 
LnnInitNetLedger(void)36 NO_SANITIZE("cfi") int32_t LnnInitNetLedger(void)
37 {
38     if (LnnInitLocalLedger() != SOFTBUS_OK) {
39         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "init local net ledger fail!");
40         return SOFTBUS_ERR;
41     }
42     if (LnnInitDistributedLedger() != SOFTBUS_OK) {
43         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "init distributed net ledger fail!");
44         return SOFTBUS_ERR;
45     }
46     if (LnnInitMetaNodeLedger() != SOFTBUS_OK) {
47         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "init meta node ledger fail!");
48         return SOFTBUS_ERR;
49     }
50     if (LnnInitHuksInterface() != SOFTBUS_OK) {
51         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "init huks interface fail!");
52         return SOFTBUS_ERR;
53     }
54     return SOFTBUS_OK;
55 }
56 
LnnRestoreLocalDeviceInfo()57 static void LnnRestoreLocalDeviceInfo()
58 {
59     LLOGI("restore local device info enter.");
60     if (LnnLoadLocalDeviceInfo() != SOFTBUS_OK) {
61         LLOGI("get local device info fail");
62         const NodeInfo *temp = LnnGetLocalNodeInfo();
63         if (LnnSaveLocalDeviceInfo(temp) != SOFTBUS_OK) {
64             LLOGE("save local device info fail");
65         }
66         LLOGI("save local device info success.");
67     } else {
68         NodeInfo info;
69         (void)memset_s(&info, sizeof(NodeInfo), 0, sizeof(NodeInfo));
70         (void)LnnGetLocalDevInfo(&info);
71         LLOGI("load local deviceInfo success, networkId:%s", AnonymizesNetworkID(info.networkId));
72         int64_t accountId = 0;
73         if (LnnGetLocalNum64Info(NUM_KEY_ACCOUNT_LONG, &accountId) == SOFTBUS_OK) {
74             if (accountId != info.accountId) {
75                 info.stateVersion++;
76             }
77         }
78         LLOGI("load local deviceInfo stateVersion=%d", info.stateVersion);
79         if (LnnSetLocalNumInfo(NUM_KEY_STATE_VERSION, info.stateVersion) != SOFTBUS_OK) {
80             LLOGE("set state version fail");
81         }
82         if (LnnUpdateLocalNetworkId(info.networkId) != SOFTBUS_OK) {
83             LLOGE("set networkId fail");
84         }
85     }
86     AuthLoadDeviceKey();
87     if (LnnLoadRemoteDeviceInfo() != SOFTBUS_OK) {
88         LLOGE("load remote deviceInfo fail");
89         return;
90     }
91     LoadBleBroadcastKey();
92     LLOGI("load remote deviceInfo devicekey success");
93 }
94 
LnnInitNetLedgerDelay(void)95 int32_t LnnInitNetLedgerDelay(void)
96 {
97     if (LnnInitLocalLedgerDelay() != SOFTBUS_OK) {
98         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "delay init local ledger fail!");
99         return SOFTBUS_ERR;
100     }
101     if (LnnInitDecisionDbDelay() != SOFTBUS_OK) {
102         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "delay init decision db fail!");
103         return SOFTBUS_ERR;
104     }
105     LnnRestoreLocalDeviceInfo();
106     return SOFTBUS_OK;
107 }
108 
LnnDeinitNetLedger(void)109 NO_SANITIZE("cfi") void LnnDeinitNetLedger(void)
110 {
111     LnnDeinitMetaNodeLedger();
112     LnnDeinitDistributedLedger();
113     LnnDeinitLocalLedger();
114     LnnDeinitHuksInterface();
115 }
116 
LnnGetNodeKeyInfoLocal(const char * networkId,int key,uint8_t * info,uint32_t infoLen)117 static int32_t LnnGetNodeKeyInfoLocal(const char *networkId, int key, uint8_t *info, uint32_t infoLen)
118 {
119     if (networkId == NULL || info == NULL) {
120         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "params are null");
121         return SOFTBUS_ERR;
122     }
123     switch (key) {
124         case NODE_KEY_UDID:
125             return LnnGetLocalStrInfo(STRING_KEY_DEV_UDID, (char *)info, infoLen);
126         case NODE_KEY_UUID:
127             return LnnGetLocalStrInfo(STRING_KEY_UUID, (char *)info, infoLen);
128         case NODE_KEY_MASTER_UDID:
129             return LnnGetLocalStrInfo(STRING_KEY_MASTER_NODE_UDID, (char *)info, infoLen);
130         case NODE_KEY_BR_MAC:
131             return LnnGetLocalStrInfo(STRING_KEY_BT_MAC, (char *)info, infoLen);
132         case NODE_KEY_IP_ADDRESS:
133             return LnnGetLocalStrInfo(STRING_KEY_WLAN_IP, (char *)info, infoLen);
134         case NODE_KEY_DEV_NAME:
135             return LnnGetLocalStrInfo(STRING_KEY_DEV_NAME, (char *)info, infoLen);
136         case NODE_KEY_BLE_OFFLINE_CODE:
137             return LnnGetLocalStrInfo(STRING_KEY_OFFLINE_CODE, (char *)info, infoLen);
138         case NODE_KEY_NETWORK_CAPABILITY:
139             return LnnGetLocalNumInfo(NUM_KEY_NET_CAP, (int32_t *)info);
140         case NODE_KEY_NETWORK_TYPE:
141             return LnnGetLocalNumInfo(NUM_KEY_DISCOVERY_TYPE, (int32_t *)info);
142         case NODE_KEY_DATA_CHANGE_FLAG:
143             return LnnGetLocalNum16Info(NUM_KEY_DATA_CHANGE_FLAG, (int16_t *)info);
144         case NODE_KEY_NODE_ADDRESS:
145             return LnnGetLocalStrInfo(STRING_KEY_NODE_ADDR, (char *)info, infoLen);
146         default:
147             SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "invalid node key type: %d", key);
148             return SOFTBUS_ERR;
149     }
150 }
151 
LnnGetNodeKeyInfoRemote(const char * networkId,int key,uint8_t * info,uint32_t infoLen)152 static int32_t LnnGetNodeKeyInfoRemote(const char *networkId, int key, uint8_t *info, uint32_t infoLen)
153 {
154     if (networkId == NULL || info == NULL) {
155         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "params are null");
156         return SOFTBUS_ERR;
157     }
158     switch (key) {
159         case NODE_KEY_UDID:
160             return LnnGetRemoteStrInfo(networkId, STRING_KEY_DEV_UDID, (char *)info, infoLen);
161         case NODE_KEY_UUID:
162             return LnnGetRemoteStrInfo(networkId, STRING_KEY_UUID, (char *)info, infoLen);
163         case NODE_KEY_BR_MAC:
164             return LnnGetRemoteStrInfo(networkId, STRING_KEY_BT_MAC, (char *)info, infoLen);
165         case NODE_KEY_IP_ADDRESS:
166             return LnnGetRemoteStrInfo(networkId, STRING_KEY_WLAN_IP, (char *)info, infoLen);
167         case NODE_KEY_DEV_NAME:
168             return LnnGetRemoteStrInfo(networkId, STRING_KEY_DEV_NAME, (char *)info, infoLen);
169         case NODE_KEY_BLE_OFFLINE_CODE:
170             return LnnGetRemoteStrInfo(networkId, STRING_KEY_OFFLINE_CODE, (char *)info, infoLen);
171         case NODE_KEY_NETWORK_CAPABILITY:
172             return LnnGetRemoteNumInfo(networkId, NUM_KEY_NET_CAP, (int32_t *)info);
173         case NODE_KEY_NETWORK_TYPE:
174             return LnnGetRemoteNumInfo(networkId, NUM_KEY_DISCOVERY_TYPE, (int32_t *)info);
175         case NODE_KEY_DATA_CHANGE_FLAG:
176             return LnnGetRemoteNum16Info(networkId, NUM_KEY_DATA_CHANGE_FLAG, (int16_t *)info);
177         case NODE_KEY_NODE_ADDRESS:
178             return LnnGetRemoteStrInfo(networkId, STRING_KEY_NODE_ADDR, (char *)info, infoLen);
179         default:
180             SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "invalid node key type: %d", key);
181             return SOFTBUS_ERR;
182     }
183 }
184 
LnnGetNodeKeyInfo(const char * networkId,int key,uint8_t * info,uint32_t infoLen)185 int32_t LnnGetNodeKeyInfo(const char *networkId, int key, uint8_t *info, uint32_t infoLen)
186 {
187     bool isLocalNetworkId = false;
188     char localNetworkId[NETWORK_ID_BUF_LEN] = {0};
189     if (networkId == NULL || info == NULL) {
190         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "params are null");
191         return SOFTBUS_ERR;
192     }
193     if (LnnGetLocalStrInfo(STRING_KEY_NETWORKID, localNetworkId, NETWORK_ID_BUF_LEN) != SOFTBUS_OK) {
194         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "get local network id fail");
195         return SOFTBUS_ERR;
196     }
197     if (strncmp(localNetworkId, networkId, NETWORK_ID_BUF_LEN) == 0) {
198         isLocalNetworkId = true;
199     }
200     if (isLocalNetworkId) {
201         return LnnGetNodeKeyInfoLocal(networkId, key, info, infoLen);
202     } else {
203         return LnnGetNodeKeyInfoRemote(networkId, key, info, infoLen);
204     }
205 }
206 
LnnSetNodeDataChangeFlag(const char * networkId,uint16_t dataChangeFlag)207 NO_SANITIZE("cfi") int32_t LnnSetNodeDataChangeFlag(const char *networkId, uint16_t dataChangeFlag)
208 {
209     bool isLocalNetworkId = false;
210     char localNetworkId[NETWORK_ID_BUF_LEN] = {0};
211     if (networkId == NULL) {
212         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "params are null");
213         return SOFTBUS_ERR;
214     }
215     if (LnnGetLocalStrInfo(STRING_KEY_NETWORKID, localNetworkId, NETWORK_ID_BUF_LEN) != SOFTBUS_OK) {
216         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "get local network id fail");
217         return SOFTBUS_ERR;
218     }
219     if (strncmp(localNetworkId, networkId, NETWORK_ID_BUF_LEN) == 0) {
220         isLocalNetworkId = true;
221     }
222     if (isLocalNetworkId) {
223         return LnnSetLocalNum16Info(NUM_KEY_DATA_CHANGE_FLAG, dataChangeFlag);
224     }
225     SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "remote networkId");
226     return SOFTBUS_ERR;
227 }
228 
LnnGetNodeKeyInfoLen(int32_t key)229 NO_SANITIZE("cfi") int32_t LnnGetNodeKeyInfoLen(int32_t key)
230 {
231     switch (key) {
232         case NODE_KEY_UDID:
233             return UDID_BUF_LEN;
234         case NODE_KEY_UUID:
235             return UUID_BUF_LEN;
236         case NODE_KEY_MASTER_UDID:
237             return UDID_BUF_LEN;
238         case NODE_KEY_BR_MAC:
239             return MAC_LEN;
240         case NODE_KEY_IP_ADDRESS:
241             return IP_LEN;
242         case NODE_KEY_DEV_NAME:
243             return DEVICE_NAME_BUF_LEN;
244         case NODE_KEY_NETWORK_CAPABILITY:
245             return LNN_COMMON_LEN;
246         case NODE_KEY_NETWORK_TYPE:
247             return LNN_COMMON_LEN;
248         case NODE_KEY_DATA_CHANGE_FLAG:
249             return DATA_CHANGE_FLAG_BUF_LEN;
250         case NODE_KEY_NODE_ADDRESS:
251             return SHORT_ADDRESS_MAX_LEN;
252         default:
253             SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "invalid node key type: %d", key);
254             return SOFTBUS_ERR;
255     }
256 }
257 
SoftbusDumpPrintUdid(int fd,NodeBasicInfo * nodeInfo)258 NO_SANITIZE("cfi") int32_t SoftbusDumpPrintUdid(int fd, NodeBasicInfo *nodeInfo)
259 {
260     NodeDeviceInfoKey key;
261     key = NODE_KEY_UDID;
262     unsigned char udid[UDID_BUF_LEN] = {0};
263     char newUdid[UDID_BUF_LEN] = {0};
264 
265     if (LnnGetNodeKeyInfo(nodeInfo->networkId, key, udid, UDID_BUF_LEN) != 0) {
266         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "LnnGetNodeKeyInfo Udid failed!");
267         return SOFTBUS_ERR;
268     }
269     DataMasking((char *)udid, UDID_BUF_LEN, ID_DELIMITER, newUdid);
270     SOFTBUS_DPRINTF(fd, "Udid = %s\n", newUdid);
271     return SOFTBUS_OK;
272 }
273 
SoftbusDumpPrintUuid(int fd,NodeBasicInfo * nodeInfo)274 NO_SANITIZE("cfi") int32_t SoftbusDumpPrintUuid(int fd, NodeBasicInfo *nodeInfo)
275 {
276     NodeDeviceInfoKey key;
277     key = NODE_KEY_UUID;
278     unsigned char uuid[UUID_BUF_LEN] = {0};
279     char newUuid[UUID_BUF_LEN] = {0};
280 
281     if (LnnGetNodeKeyInfo(nodeInfo->networkId, key, uuid, UUID_BUF_LEN) != 0) {
282         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "LnnGetNodeKeyInfo Uuid failed!");
283         return SOFTBUS_ERR;
284     }
285     DataMasking((char *)uuid, UUID_BUF_LEN, ID_DELIMITER, newUuid);
286     SOFTBUS_DPRINTF(fd, "Uuid = %s\n", newUuid);
287     return SOFTBUS_OK;
288 }
289 
SoftbusDumpPrintMac(int fd,NodeBasicInfo * nodeInfo)290 NO_SANITIZE("cfi") int32_t SoftbusDumpPrintMac(int fd, NodeBasicInfo *nodeInfo)
291 {
292     NodeDeviceInfoKey key;
293     key = NODE_KEY_BR_MAC;
294     unsigned char brMac[BT_MAC_LEN] = {0};
295     char newBrMac[BT_MAC_LEN] = {0};
296 
297     if (LnnGetNodeKeyInfo(nodeInfo->networkId, key, brMac, BT_MAC_LEN) != 0) {
298         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "LnnGetNodeKeyInfo brMac failed!");
299         return SOFTBUS_ERR;
300     }
301     DataMasking((char *)brMac, BT_MAC_LEN, MAC_DELIMITER, newBrMac);
302     SOFTBUS_DPRINTF(fd, "BrMac = %s\n", newBrMac);
303     return SOFTBUS_OK;
304 }
305 
SoftbusDumpPrintIp(int fd,NodeBasicInfo * nodeInfo)306 NO_SANITIZE("cfi") int32_t SoftbusDumpPrintIp(int fd, NodeBasicInfo *nodeInfo)
307 {
308     NodeDeviceInfoKey key;
309     key = NODE_KEY_IP_ADDRESS;
310     char ipAddr[IP_STR_MAX_LEN] = {0};
311     char newIpAddr[IP_STR_MAX_LEN] = {0};
312 
313     if (LnnGetNodeKeyInfo(nodeInfo->networkId, key, (uint8_t *)ipAddr, IP_STR_MAX_LEN) != 0) {
314         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "LnnGetNodeKeyInfo ipAddr failed!");
315         return SOFTBUS_ERR;
316     }
317     DataMasking((char *)ipAddr, IP_STR_MAX_LEN, IP_DELIMITER, newIpAddr);
318     SOFTBUS_DPRINTF(fd, "IpAddr = %s\n", newIpAddr);
319     return SOFTBUS_OK;
320 }
321 
SoftbusDumpPrintNetCapacity(int fd,NodeBasicInfo * nodeInfo)322 NO_SANITIZE("cfi") int32_t SoftbusDumpPrintNetCapacity(int fd, NodeBasicInfo *nodeInfo)
323 {
324     NodeDeviceInfoKey key;
325     key = NODE_KEY_NETWORK_CAPABILITY;
326     int32_t netCapacity = 0;
327     if (LnnGetNodeKeyInfo(nodeInfo->networkId, key, (uint8_t *)&netCapacity, LNN_COMMON_LEN) != 0) {
328         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "LnnGetNodeKeyInfo netCapacity failed!");
329         return SOFTBUS_ERR;
330     }
331     SOFTBUS_DPRINTF(fd, "NetCapacity = %d\n", netCapacity);
332     return SOFTBUS_OK;
333 }
334 
SoftbusDumpPrintNetType(int fd,NodeBasicInfo * nodeInfo)335 NO_SANITIZE("cfi") int32_t SoftbusDumpPrintNetType(int fd, NodeBasicInfo *nodeInfo)
336 {
337     NodeDeviceInfoKey key;
338     key = NODE_KEY_NETWORK_TYPE;
339     int32_t netType = 0;
340     if (LnnGetNodeKeyInfo(nodeInfo->networkId, key, (uint8_t *)&netType, LNN_COMMON_LEN) != 0) {
341         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "LnnGetNodeKeyInfo netType failed!");
342         return SOFTBUS_ERR;
343     }
344     SOFTBUS_DPRINTF(fd, "NetType = %d\n", netType);
345     return SOFTBUS_OK;
346 }
347 
SoftBusDumpBusCenterPrintInfo(int fd,NodeBasicInfo * nodeInfo)348 NO_SANITIZE("cfi") void SoftBusDumpBusCenterPrintInfo(int fd, NodeBasicInfo *nodeInfo)
349 {
350     if (fd <= 0 || nodeInfo == NULL) {
351         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "param is null");
352         return;
353     }
354     SOFTBUS_DPRINTF(fd, "DeviceName = %s\n", nodeInfo->deviceName);
355     char networkId[NETWORK_ID_BUF_LEN] = {0};
356     DataMasking(nodeInfo->networkId, NETWORK_ID_BUF_LEN, ID_DELIMITER, networkId);
357     SOFTBUS_DPRINTF(fd, "NetworkId = %s\n", networkId);
358     if (SoftbusDumpPrintUdid(fd, nodeInfo) != SOFTBUS_OK) {
359         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "SoftbusDumpPrintUdid failed!");
360         return;
361     }
362     if (SoftbusDumpPrintUuid(fd, nodeInfo) != SOFTBUS_OK) {
363         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "SoftbusDumpPrintUuid failed!");
364         return;
365     }
366     if (SoftbusDumpPrintMac(fd, nodeInfo) != SOFTBUS_OK) {
367         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "SoftbusDumpPrintMac failed!");
368         return;
369     }
370     if (SoftbusDumpPrintIp(fd, nodeInfo) != SOFTBUS_OK) {
371         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "SoftbusDumpPrintIp failed!");
372         return;
373     }
374     if (SoftbusDumpPrintNetCapacity(fd, nodeInfo) != SOFTBUS_OK) {
375         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "SoftbusDumpPrintNetCapacity failed!");
376         return;
377     }
378     if (SoftbusDumpPrintNetType(fd, nodeInfo) != SOFTBUS_OK) {
379         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "SoftbusDumpPrintNetType failed!");
380         return;
381     }
382 }
383