• 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 "client_bus_center.h"
17 
18 #include <securec.h>
19 #include <string.h>
20 
21 #include "ble_range.h"
22 #include "client_bus_center_manager.h"
23 #include "client_trans_session_manager.h"
24 #include "data_level.h"
25 #include "lnn_event.h"
26 #include "lnn_log.h"
27 #include "softbus_adapter_mem.h"
28 #include "softbus_client_frame_manager.h"
29 #include "softbus_def.h"
30 #include "softbus_error_code.h"
31 #include "softbus_type_def.h"
32 #include "softbus_utils.h"
33 
34 #define MODULE_LNN      "MODULE_LNN"
35 #define MODULE_CONN     "MODULE_CONN"
36 
37 static const char *g_dbPkgName = "distributeddata-default";
38 #define DM_PKG_NAME "ohos.distributedhardware.devicemanager"
39 static const char *g_msdpPkgName = "ohos.msdp.spatialawareness";
40 
CommonInit(const char * pkgName)41 static int32_t CommonInit(const char *pkgName)
42 {
43     if (InitSoftBus(pkgName) != SOFTBUS_OK) {
44         LNN_LOGE(LNN_INIT, "init softbus failed");
45         return SOFTBUS_NETWORK_NOT_INIT;
46     }
47     if (CheckPackageName(pkgName) != SOFTBUS_OK) {
48         LNN_LOGE(LNN_INIT, "check packageName failed");
49         return SOFTBUS_INVALID_PARAM;
50     }
51     return SOFTBUS_OK;
52 }
53 
IsValidNodeStateCb(INodeStateCb * callback)54 static bool IsValidNodeStateCb(INodeStateCb *callback)
55 {
56     if (callback == NULL) {
57         return false;
58     }
59     if (callback->events == 0) {
60         return false;
61     }
62     if ((callback->events & EVENT_NODE_STATE_ONLINE) != 0 &&
63         callback->onNodeOnline == NULL) {
64         return false;
65     }
66     if ((callback->events & EVENT_NODE_STATE_OFFLINE) != 0 &&
67         callback->onNodeOffline == NULL) {
68         return false;
69     }
70     if ((callback->events & EVENT_NODE_STATE_INFO_CHANGED) != 0 &&
71         callback->onNodeBasicInfoChanged == NULL) {
72         return false;
73     }
74     if ((callback->events & EVENT_NODE_STATUS_CHANGED) != 0 &&
75         callback->onNodeStatusChanged == NULL) {
76         return false;
77     }
78     if ((callback->events & EVENT_NODE_HICHAIN_PROOF_EXCEPTION) != 0 &&
79         callback->onHichainProofException == NULL) {
80         return false;
81     }
82     return true;
83 }
84 
PublishInfoCheck(const PublishInfo * info)85 static int32_t PublishInfoCheck(const PublishInfo *info)
86 {
87     if ((info->mode != DISCOVER_MODE_PASSIVE) && (info->mode != DISCOVER_MODE_ACTIVE)) {
88         LNN_LOGE(LNN_STATE, "mode is invalid");
89         return SOFTBUS_INVALID_PARAM;
90     }
91     if ((info->medium < AUTO) || (info->medium > COAP)) {
92         LNN_LOGE(LNN_STATE, "medium is invalid");
93         return SOFTBUS_INVALID_PARAM;
94     }
95     if ((info->freq < LOW) || (info->freq >= FREQ_BUTT)) {
96         LNN_LOGE(LNN_STATE, "freq is invalid");
97         return SOFTBUS_INVALID_PARAM;
98     }
99     if (info->capability == NULL) {
100         LNN_LOGE(LNN_STATE, "capability is invalid");
101         return SOFTBUS_INVALID_PARAM;
102     }
103     if ((info->capabilityData == NULL) && (info->dataLen != 0)) {
104         LNN_LOGE(LNN_STATE, "data is invalid");
105         return SOFTBUS_INVALID_PARAM;
106     }
107     if (info->dataLen == 0) {
108         return SOFTBUS_OK;
109     }
110     if ((info->capabilityData != NULL) &&
111         ((info->dataLen > MAX_CAPABILITYDATA_LEN) ||
112         (strnlen((char *)(info->capabilityData), MAX_CAPABILITYDATA_LEN) == MAX_CAPABILITYDATA_LEN))) {
113         LNN_LOGE(LNN_STATE, "data exceeds the maximum length");
114         return SOFTBUS_INVALID_PARAM;
115     }
116     return SOFTBUS_OK;
117 }
118 
SubscribeInfoCheck(const SubscribeInfo * info)119 static int32_t SubscribeInfoCheck(const SubscribeInfo *info)
120 {
121     if ((info->mode != DISCOVER_MODE_PASSIVE) && (info->mode != DISCOVER_MODE_ACTIVE)) {
122         LNN_LOGE(LNN_STATE, "mode is invalid");
123         return SOFTBUS_INVALID_PARAM;
124     }
125     if ((info->medium < AUTO) || (info->medium > USB)) {
126         LNN_LOGE(LNN_STATE, "medium is invalid");
127         return SOFTBUS_INVALID_PARAM;
128     }
129     if ((info->medium == USB) && (info->mode == DISCOVER_MODE_ACTIVE)) {
130         LNN_LOGE(LNN_STATE, "usb is not support active mode");
131         return SOFTBUS_INVALID_PARAM;
132     }
133     if ((info->freq < LOW) || (info->freq >= FREQ_BUTT)) {
134         LNN_LOGE(LNN_STATE, "freq is invalid");
135         return SOFTBUS_INVALID_PARAM;
136     }
137     if (info->capability == NULL) {
138         LNN_LOGE(LNN_STATE, "capability is invalid");
139         return SOFTBUS_INVALID_PARAM;
140     }
141     if ((info->capabilityData == NULL) && (info->dataLen != 0)) {
142         LNN_LOGE(LNN_STATE, "data is invalid");
143         return SOFTBUS_INVALID_PARAM;
144     }
145     if (info->dataLen == 0) {
146         return SOFTBUS_OK;
147     }
148     if ((info->capabilityData != NULL) &&
149         ((info->dataLen > MAX_CAPABILITYDATA_LEN) ||
150         (strnlen((char *)(info->capabilityData), MAX_CAPABILITYDATA_LEN) == MAX_CAPABILITYDATA_LEN))) {
151         LNN_LOGE(LNN_STATE, "data exceeds the maximum length");
152         return SOFTBUS_INVALID_PARAM;
153     }
154     return SOFTBUS_OK;
155 }
156 
DfxRecordSdkJoinLnnEnd(const char * packageName,int32_t reason)157 static void DfxRecordSdkJoinLnnEnd(const char *packageName, int32_t reason)
158 {
159     if (reason == SOFTBUS_OK) {
160         return;
161     }
162 
163     LnnEventExtra extra = { 0 };
164     LnnEventExtraInit(&extra);
165     extra.errcode = reason;
166     extra.result = EVENT_STAGE_RESULT_FAILED;
167 
168     char pkgName[PKG_NAME_SIZE_MAX] = { 0 };
169     if (packageName != NULL && IsValidString(packageName, PKG_NAME_SIZE_MAX - 1) && strncpy_s(pkgName,
170         PKG_NAME_SIZE_MAX, packageName, PKG_NAME_SIZE_MAX - 1) == EOK) {
171         extra.callerPkg = pkgName;
172     }
173     LNN_EVENT(EVENT_SCENE_LNN, EVENT_STAGE_LNN_JOIN_SDK, extra);
174 }
175 
DfxRecordSdkLeaveLnnEnd(const char * packageName,int32_t reason)176 static void DfxRecordSdkLeaveLnnEnd(const char *packageName, int32_t reason)
177 {
178     if (reason == SOFTBUS_OK) {
179         return;
180     }
181 
182     LnnEventExtra extra = { 0 };
183     LnnEventExtraInit(&extra);
184     extra.errcode = reason;
185     extra.result = EVENT_STAGE_RESULT_FAILED;
186 
187     char pkgName[PKG_NAME_SIZE_MAX] = { 0 };
188     if (packageName != NULL && IsValidString(packageName, PKG_NAME_SIZE_MAX - 1) && strncpy_s(pkgName,
189         PKG_NAME_SIZE_MAX, packageName, PKG_NAME_SIZE_MAX - 1) == EOK) {
190         extra.callerPkg = pkgName;
191     }
192     LNN_EVENT(EVENT_SCENE_LNN, EVENT_STAGE_LNN_LEAVE_SDK, extra);
193 }
194 
DfxRecordSdkShiftGearStart(const char * packageName,const GearMode * mode)195 static void DfxRecordSdkShiftGearStart(const char *packageName, const GearMode *mode)
196 {
197     LnnEventExtra extra = { 0 };
198     LnnEventExtraInit(&extra);
199     if (mode != NULL) {
200         extra.gearCycle = mode->cycle;
201         extra.gearDuration = mode->duration;
202     }
203     char pkgName[PKG_NAME_SIZE_MAX] = { 0 };
204     if (packageName != NULL && IsValidString(packageName, PKG_NAME_SIZE_MAX - 1) && strncpy_s(pkgName,
205         PKG_NAME_SIZE_MAX, packageName, PKG_NAME_SIZE_MAX - 1) == EOK) {
206         extra.callerPkg = pkgName;
207     }
208     LNN_EVENT(EVENT_SCENE_LNN, EVENT_STAGE_LNN_SHIFT_GEAR, extra);
209 }
210 
DfxRecordLnnDiscServerEnd(int32_t serverType,const char * packageName,int32_t reason)211 static void DfxRecordLnnDiscServerEnd(int32_t serverType, const char *packageName, int32_t reason)
212 {
213     if (reason == SOFTBUS_OK) {
214         return;
215     }
216 
217     LnnEventExtra extra = { 0 };
218     LnnEventExtraInit(&extra);
219     extra.discServerType = serverType;
220     extra.errcode = reason;
221     extra.result = EVENT_STAGE_RESULT_FAILED;
222 
223     char pkgName[PKG_NAME_SIZE_MAX] = { 0 };
224     if (packageName != NULL && IsValidString(packageName, PKG_NAME_SIZE_MAX - 1) && strncpy_s(pkgName,
225         PKG_NAME_SIZE_MAX, packageName, PKG_NAME_SIZE_MAX - 1) == EOK) {
226         extra.callerPkg = pkgName;
227     }
228     LNN_EVENT(EVENT_SCENE_LNN, EVENT_STAGE_LNN_DISC_SDK, extra);
229 }
230 
DfxRecordRegNodeStart(const char * packageName)231 static void DfxRecordRegNodeStart(const char *packageName)
232 {
233     LnnEventExtra extra = { 0 };
234     LnnEventExtraInit(&extra);
235     char pkgName[PKG_NAME_SIZE_MAX] = { 0 };
236     if (packageName != NULL && IsValidString(packageName, PKG_NAME_SIZE_MAX - 1) && strncpy_s(pkgName,
237         PKG_NAME_SIZE_MAX, packageName, PKG_NAME_SIZE_MAX - 1) == EOK) {
238         extra.callerPkg = pkgName;
239     }
240     LNN_EVENT(EVENT_SCENE_LNN, EVENT_STAGE_LNN_REG_NODE, extra);
241 }
242 
GetAllNodeDeviceInfo(const char * pkgName,NodeBasicInfo ** info,int32_t * infoNum)243 int32_t GetAllNodeDeviceInfo(const char *pkgName, NodeBasicInfo **info, int32_t *infoNum)
244 {
245     if (pkgName == NULL || info == NULL || infoNum == NULL) {
246         LNN_LOGE(LNN_STATE, "params are null");
247         return SOFTBUS_INVALID_PARAM;
248     }
249     int32_t ret = CommonInit(pkgName);
250     if (ret != SOFTBUS_OK) {
251         return ret;
252     }
253     return GetAllNodeDeviceInfoInner(pkgName, info, infoNum);
254 }
255 
FreeNodeInfo(NodeBasicInfo * info)256 void FreeNodeInfo(NodeBasicInfo *info)
257 {
258     if (info == NULL) {
259         return;
260     }
261     SoftBusFree(info);
262 }
263 
GetLocalNodeDeviceInfo(const char * pkgName,NodeBasicInfo * info)264 int32_t GetLocalNodeDeviceInfo(const char *pkgName, NodeBasicInfo *info)
265 {
266     if (pkgName == NULL || info == NULL) {
267         LNN_LOGE(LNN_STATE, "params are null");
268         return SOFTBUS_INVALID_PARAM;
269     }
270     int32_t ret = CommonInit(pkgName);
271     if (ret != SOFTBUS_OK) {
272         return ret;
273     }
274     return GetLocalNodeDeviceInfoInner(pkgName, info);
275 }
276 
GetNodeKeyInfo(const char * pkgName,const char * networkId,NodeDeviceInfoKey key,uint8_t * info,int32_t infoLen)277 int32_t GetNodeKeyInfo(const char *pkgName, const char *networkId, NodeDeviceInfoKey key,
278     uint8_t *info, int32_t infoLen)
279 {
280     if (pkgName == NULL || infoLen <= 0) {
281         LNN_LOGE(LNN_STATE, "pkgName is null");
282         return SOFTBUS_INVALID_PARAM;
283     }
284     if (!IsValidString(networkId, NETWORK_ID_BUF_LEN) || info == NULL) {
285         LNN_LOGE(LNN_STATE, "invalid params");
286         return SOFTBUS_INVALID_PARAM;
287     }
288     int32_t ret = CommonInit(pkgName);
289     if (ret != SOFTBUS_OK) {
290         return ret;
291     }
292     (void)memset_s(info, infoLen, 0, infoLen);
293     return GetNodeKeyInfoInner(pkgName, networkId, key, info, infoLen);
294 }
295 
SetNodeDataChangeFlag(const char * pkgName,const char * networkId,uint16_t dataChangeFlag)296 int32_t SetNodeDataChangeFlag(const char *pkgName, const char *networkId, uint16_t dataChangeFlag)
297 {
298     if (pkgName == NULL) {
299         LNN_LOGE(LNN_STATE, "pkgName is null");
300         return SOFTBUS_INVALID_PARAM;
301     }
302     if (!IsValidString(networkId, NETWORK_ID_BUF_LEN)) {
303         LNN_LOGE(LNN_STATE, "invalid params");
304         return SOFTBUS_INVALID_PARAM;
305     }
306     int32_t ret = CommonInit(pkgName);
307     if (ret != SOFTBUS_OK) {
308         return ret;
309     }
310     return SetNodeDataChangeFlagInner(pkgName, networkId, dataChangeFlag);
311 }
312 
RegDataLevelChangeCb(const char * pkgName,IDataLevelCb * callback)313 int32_t RegDataLevelChangeCb(const char *pkgName, IDataLevelCb *callback)
314 {
315     if (pkgName == NULL || callback == NULL) {
316         LNN_LOGE(LNN_STATE, "pkgName or callback is null");
317         return SOFTBUS_INVALID_PARAM;
318     }
319     if (strcmp(g_dbPkgName, pkgName) != 0) {
320         LNN_LOGE(LNN_STATE, "pkgName is invalid");
321         return SOFTBUS_INVALID_PARAM;
322     }
323     int32_t ret = CommonInit(pkgName);
324     if (ret != SOFTBUS_OK) {
325         LNN_LOGE(LNN_STATE, "CommonInit failed");
326         return ret;
327     }
328     return RegDataLevelChangeCbInner(pkgName, callback);
329 }
330 
UnregDataLevelChangeCb(const char * pkgName)331 int32_t UnregDataLevelChangeCb(const char *pkgName)
332 {
333     if (pkgName == NULL) {
334         LNN_LOGE(LNN_STATE, "pkgName is null");
335         return SOFTBUS_INVALID_PARAM;
336     }
337     if (strcmp(g_dbPkgName, pkgName) != 0) {
338         LNN_LOGE(LNN_STATE, "pkgName is invalid");
339         return SOFTBUS_INVALID_PARAM;
340     }
341     return UnregDataLevelChangeCbInner(pkgName);
342 }
343 
SetDataLevel(const DataLevel * dataLevel)344 int32_t SetDataLevel(const DataLevel *dataLevel)
345 {
346     if (dataLevel == NULL) {
347         LNN_LOGE(LNN_STATE, "invalid param");
348         return SOFTBUS_INVALID_PARAM;
349     }
350     LNN_LOGI(LNN_STATE, "SetDataLevel, dynamic: %{public}hu, static: %{public}hu, "
351         "switch: %{public}u, switchLen: %{public}hu", dataLevel->dynamicLevel, dataLevel->staticLevel,
352         dataLevel->switchLevel, dataLevel->switchLength);
353     return SetDataLevelInner(dataLevel);
354 }
355 
RegBleRangeCb(const char * pkgName,IBleRangeCb * callback)356 int32_t RegBleRangeCb(const char *pkgName, IBleRangeCb *callback)
357 {
358     LNN_LOGI(LNN_STATE, "enter");
359     if (pkgName == NULL || callback == NULL || callback->onBleRangeInfoReceived == NULL) {
360         LNN_LOGE(LNN_STATE, "pkgName or callback is null");
361         return SOFTBUS_INVALID_PARAM;
362     }
363     if (strcmp(g_msdpPkgName, pkgName) != 0) {
364         LNN_LOGE(LNN_STATE, "pkgName is invalid");
365         return SOFTBUS_INVALID_PARAM;
366     }
367     int32_t ret = CommonInit(pkgName);
368     if (ret != SOFTBUS_OK) {
369         LNN_LOGE(LNN_STATE, "CommonInit failed");
370         return ret;
371     }
372     return RegBleRangeCbInner(pkgName, callback);
373 }
374 
UnregBleRangeCb(const char * pkgName)375 int32_t UnregBleRangeCb(const char *pkgName)
376 {
377     if (pkgName == NULL) {
378         LNN_LOGE(LNN_STATE, "pkgName is null");
379         return SOFTBUS_INVALID_PARAM;
380     }
381     if (strcmp(g_msdpPkgName, pkgName) != 0) {
382         LNN_LOGE(LNN_STATE, "pkgName is invalid");
383         return SOFTBUS_INVALID_PARAM;
384     }
385     return UnregBleRangeCbInner(pkgName);
386 }
387 
JoinLNN(const char * pkgName,ConnectionAddr * target,OnJoinLNNResult cb,bool isForceJoin)388 int32_t JoinLNN(const char *pkgName, ConnectionAddr *target, OnJoinLNNResult cb, bool isForceJoin)
389 {
390     if (pkgName == NULL || target == NULL || cb == NULL) {
391         DfxRecordSdkJoinLnnEnd(pkgName, SOFTBUS_INVALID_PARAM);
392         LNN_LOGE(LNN_STATE, "params are NULL");
393         return SOFTBUS_INVALID_PARAM;
394     }
395     int32_t ret = CommonInit(pkgName);
396     if (ret != SOFTBUS_OK) {
397         DfxRecordSdkJoinLnnEnd(pkgName, ret);
398         return ret;
399     }
400     if (target->type == CONNECTION_ADDR_SESSION_WITH_KEY) {
401         ret = ClientGetChannelBySessionId(target->info.session.sessionId, &(target->info.session.channelId),
402             &(target->info.session.type), NULL);
403         if (ret != SOFTBUS_OK) {
404             DfxRecordSdkJoinLnnEnd(pkgName, ret);
405             LNN_LOGE(LNN_STATE, "get channel failed, sessionId=%{public}d", target->info.session.sessionId);
406             return ret;
407         }
408         if (strcmp(pkgName, DM_PKG_NAME) == 0) {
409             ret = ClientCancelAuthSessionTimer(target->info.session.sessionId);
410             if (ret != SOFTBUS_OK) {
411                 LNN_LOGE(LNN_STATE, "fail : cancel timer error, sessionId=%{public}d", target->info.session.sessionId);
412             }
413         }
414     }
415     ret = JoinLNNInner(pkgName, target, cb, isForceJoin);
416     DfxRecordSdkJoinLnnEnd(pkgName, ret);
417     return ret;
418 }
419 
LeaveLNN(const char * pkgName,const char * networkId,OnLeaveLNNResult cb)420 int32_t LeaveLNN(const char *pkgName, const char *networkId, OnLeaveLNNResult cb)
421 {
422     if (!IsValidString(networkId, NETWORK_ID_BUF_LEN) || cb == NULL || !IsValidString(pkgName, PKG_NAME_SIZE_MAX - 1)) {
423         DfxRecordSdkLeaveLnnEnd(pkgName, SOFTBUS_INVALID_PARAM);
424         LNN_LOGE(LNN_STATE, "networkId or cb is NULL");
425         return SOFTBUS_INVALID_PARAM;
426     }
427     int32_t ret = LeaveLNNInner(pkgName, networkId, cb);
428     DfxRecordSdkLeaveLnnEnd(pkgName, ret);
429     return ret;
430 }
431 
RegNodeDeviceStateCb(const char * pkgName,INodeStateCb * callback)432 int32_t RegNodeDeviceStateCb(const char *pkgName, INodeStateCb *callback)
433 {
434     DfxRecordRegNodeStart(pkgName);
435     if (pkgName == NULL || IsValidNodeStateCb(callback) == false) {
436         LNN_LOGE(LNN_STATE, "invalid parameters");
437         return SOFTBUS_INVALID_PARAM;
438     }
439     int32_t ret = CommonInit(pkgName);
440     if (ret != SOFTBUS_OK) {
441         return ret;
442     }
443     return RegNodeDeviceStateCbInner(pkgName, callback);
444 }
445 
UnregNodeDeviceStateCb(INodeStateCb * callback)446 int32_t UnregNodeDeviceStateCb(INodeStateCb *callback)
447 {
448     if (callback == NULL) {
449         LNN_LOGE(LNN_STATE, "para callback = null");
450         return SOFTBUS_INVALID_PARAM;
451     }
452     return UnregNodeDeviceStateCbInner(callback);
453 }
454 
StartTimeSync(const char * pkgName,const char * targetNetworkId,TimeSyncAccuracy accuracy,TimeSyncPeriod period,ITimeSyncCb * cb)455 int32_t StartTimeSync(const char *pkgName, const char *targetNetworkId, TimeSyncAccuracy accuracy,
456     TimeSyncPeriod period, ITimeSyncCb *cb)
457 {
458     if (pkgName == NULL || !IsValidString(targetNetworkId, NETWORK_ID_BUF_LEN) ||
459         cb == NULL || cb->onTimeSyncResult == NULL) {
460         LNN_LOGE(LNN_STATE, "invalid parameters");
461         return SOFTBUS_INVALID_PARAM;
462     }
463     int32_t ret = CommonInit(pkgName);
464     if (ret != SOFTBUS_OK) {
465         return ret;
466     }
467     return StartTimeSyncInner(pkgName, targetNetworkId, accuracy, period, cb);
468 }
469 
StopTimeSync(const char * pkgName,const char * targetNetworkId)470 int32_t StopTimeSync(const char *pkgName, const char *targetNetworkId)
471 {
472     if (pkgName == NULL || !IsValidString(targetNetworkId, NETWORK_ID_BUF_LEN)) {
473         LNN_LOGE(LNN_STATE, "invalid parameters");
474         return SOFTBUS_INVALID_PARAM;
475     }
476     int32_t ret = CommonInit(pkgName);
477     if (ret != SOFTBUS_OK) {
478         return ret;
479     }
480     return StopTimeSyncInner(pkgName, targetNetworkId);
481 }
482 
ValidatePkgName(const char * pkgName)483 static int32_t ValidatePkgName(const char *pkgName)
484 {
485     if (strcmp(pkgName, MODULE_LNN) == 0 || strcmp(pkgName, MODULE_CONN) == 0) {
486         LNN_LOGE(LNN_STATE, "package name is not allowed");
487         return SOFTBUS_INVALID_PARAM;
488     }
489     return SOFTBUS_OK;
490 }
491 
PublishLNN(const char * pkgName,const PublishInfo * info,const IPublishCb * cb)492 int32_t PublishLNN(const char *pkgName, const PublishInfo *info, const IPublishCb *cb)
493 {
494     if (pkgName == NULL || info == NULL || cb == NULL) {
495         DfxRecordLnnDiscServerEnd(DISC_SERVER_PUBLISH, pkgName, SOFTBUS_INVALID_PARAM);
496         LNN_LOGE(LNN_STATE, "invalid parameters");
497         return SOFTBUS_INVALID_PARAM;
498     }
499     if (ValidatePkgName(pkgName) != SOFTBUS_OK) {
500         return SOFTBUS_INVALID_PARAM;
501     }
502 
503     int32_t ret = CommonInit(pkgName);
504     if (ret != SOFTBUS_OK) {
505         DfxRecordLnnDiscServerEnd(DISC_SERVER_PUBLISH, pkgName, ret);
506         return ret;
507     }
508     if (PublishInfoCheck(info) != SOFTBUS_OK) {
509         DfxRecordLnnDiscServerEnd(DISC_SERVER_PUBLISH, pkgName, SOFTBUS_INVALID_PARAM);
510         return SOFTBUS_INVALID_PARAM;
511     }
512     ret = PublishLNNInner(pkgName, info, cb);
513     DfxRecordLnnDiscServerEnd(DISC_SERVER_PUBLISH, pkgName, ret);
514     return ret;
515 }
516 
StopPublishLNN(const char * pkgName,int32_t publishId)517 int32_t StopPublishLNN(const char *pkgName, int32_t publishId)
518 {
519     if (pkgName == NULL) {
520         DfxRecordLnnDiscServerEnd(DISC_SERVER_STOP_PUBLISH, pkgName, SOFTBUS_INVALID_PARAM);
521         LNN_LOGE(LNN_STATE, "invalid parameters");
522         return SOFTBUS_INVALID_PARAM;
523     }
524     if (ValidatePkgName(pkgName) != SOFTBUS_OK) {
525         return SOFTBUS_INVALID_PARAM;
526     }
527 
528     int32_t ret = CommonInit(pkgName);
529     if (ret != SOFTBUS_OK) {
530         DfxRecordLnnDiscServerEnd(DISC_SERVER_STOP_PUBLISH, pkgName, ret);
531         return ret;
532     }
533     ret = StopPublishLNNInner(pkgName, publishId);
534     DfxRecordLnnDiscServerEnd(DISC_SERVER_STOP_PUBLISH, pkgName, ret);
535     return ret;
536 }
537 
RefreshLNN(const char * pkgName,const SubscribeInfo * info,const IRefreshCallback * cb)538 int32_t RefreshLNN(const char *pkgName, const SubscribeInfo *info, const IRefreshCallback *cb)
539 {
540     if (pkgName == NULL || info == NULL || cb == NULL) {
541         DfxRecordLnnDiscServerEnd(DISC_SERVER_DISCOVERY, pkgName, SOFTBUS_INVALID_PARAM);
542         LNN_LOGE(LNN_STATE, "invalid parameters");
543         return SOFTBUS_INVALID_PARAM;
544     }
545     if (ValidatePkgName(pkgName) != SOFTBUS_OK) {
546         return SOFTBUS_INVALID_PARAM;
547     }
548 
549     int32_t ret = CommonInit(pkgName);
550     if (ret != SOFTBUS_OK) {
551         DfxRecordLnnDiscServerEnd(DISC_SERVER_DISCOVERY, pkgName, ret);
552         return ret;
553     }
554     if (SubscribeInfoCheck(info) != SOFTBUS_OK) {
555         DfxRecordLnnDiscServerEnd(DISC_SERVER_DISCOVERY, pkgName, SOFTBUS_INVALID_PARAM);
556         return SOFTBUS_INVALID_PARAM;
557     }
558     ret = RefreshLNNInner(pkgName, info, cb);
559     DfxRecordLnnDiscServerEnd(DISC_SERVER_DISCOVERY, pkgName, ret);
560     return ret;
561 }
562 
StopRefreshLNN(const char * pkgName,int32_t refreshId)563 int32_t StopRefreshLNN(const char *pkgName, int32_t refreshId)
564 {
565     if (pkgName == NULL) {
566         DfxRecordLnnDiscServerEnd(DISC_SERVER_STOP_DISCOVERY, pkgName, SOFTBUS_INVALID_PARAM);
567         LNN_LOGE(LNN_STATE, "invalid parameters");
568         return SOFTBUS_INVALID_PARAM;
569     }
570     if (ValidatePkgName(pkgName) != SOFTBUS_OK) {
571         return SOFTBUS_INVALID_PARAM;
572     }
573 
574     int32_t ret = CommonInit(pkgName);
575     if (ret != SOFTBUS_OK) {
576         DfxRecordLnnDiscServerEnd(DISC_SERVER_STOP_DISCOVERY, pkgName, ret);
577         return ret;
578     }
579     ret = StopRefreshLNNInner(pkgName, refreshId);
580     DfxRecordLnnDiscServerEnd(DISC_SERVER_STOP_DISCOVERY, pkgName, ret);
581     return ret;
582 }
583 
ActiveMetaNode(const char * pkgName,const MetaNodeConfigInfo * info,char * metaNodeId)584 int32_t ActiveMetaNode(const char *pkgName, const MetaNodeConfigInfo *info, char *metaNodeId)
585 {
586     if (pkgName == NULL || info == NULL || metaNodeId == NULL) {
587         LNN_LOGE(LNN_STATE, "invalid active meta node para");
588         return SOFTBUS_INVALID_PARAM;
589     }
590     int32_t ret = CommonInit(pkgName);
591     if (ret != SOFTBUS_OK) {
592         return ret;
593     }
594     return ActiveMetaNodeInner(pkgName, info, metaNodeId);
595 }
596 
DeactiveMetaNode(const char * pkgName,const char * metaNodeId)597 int32_t DeactiveMetaNode(const char *pkgName, const char *metaNodeId)
598 {
599     if (pkgName == NULL || metaNodeId == NULL) {
600         LNN_LOGE(LNN_STATE, "invalid deactive meta node para");
601         return SOFTBUS_INVALID_PARAM;
602     }
603     int32_t ret = CommonInit(pkgName);
604     if (ret != SOFTBUS_OK) {
605         return ret;
606     }
607     return DeactiveMetaNodeInner(pkgName, metaNodeId);
608 }
609 
GetAllMetaNodeInfo(const char * pkgName,MetaNodeInfo * infos,int32_t * infoNum)610 int32_t GetAllMetaNodeInfo(const char *pkgName, MetaNodeInfo *infos, int32_t *infoNum)
611 {
612     if (pkgName == NULL || infos == NULL || infoNum == NULL || *infoNum > MAX_META_NODE_NUM) {
613         LNN_LOGE(LNN_STATE, "invalid query meta node info para");
614         return SOFTBUS_INVALID_PARAM;
615     }
616     int32_t ret = CommonInit(pkgName);
617     if (ret != SOFTBUS_OK) {
618         return ret;
619     }
620     return GetAllMetaNodeInfoInner(pkgName, infos, infoNum);
621 }
622 
ShiftLNNGear(const char * pkgName,const char * callerId,const char * targetNetworkId,const GearMode * mode)623 int32_t ShiftLNNGear(const char *pkgName, const char *callerId, const char *targetNetworkId, const GearMode *mode)
624 {
625     DfxRecordSdkShiftGearStart(pkgName, mode);
626     if (pkgName == NULL || callerId == NULL || mode == NULL) {
627         LNN_LOGE(LNN_STATE, "invalid shift lnn gear para");
628         return SOFTBUS_INVALID_PARAM;
629     }
630     int32_t ret = CommonInit(pkgName);
631     if (ret != SOFTBUS_OK) {
632         return ret;
633     }
634     size_t len = strnlen(callerId, CALLER_ID_MAX_LEN);
635     if (len == 0 || len >= CALLER_ID_MAX_LEN) {
636         LNN_LOGE(LNN_STATE, "invalid shift lnn gear callerId len=%{public}zu", len);
637         return SOFTBUS_INVALID_PARAM;
638     }
639     if (targetNetworkId != NULL &&
640         strnlen(targetNetworkId, NETWORK_ID_BUF_LEN) != NETWORK_ID_BUF_LEN - 1) {
641         LNN_LOGE(LNN_STATE, "invalid shift lnn gear targetNetworkId");
642         return SOFTBUS_INVALID_PARAM;
643     }
644     return ShiftLNNGearInner(pkgName, callerId, targetNetworkId, mode);
645 }
646 
TriggerHbForMeasureDistance(const char * pkgName,const char * callerId,const HbMode * mode)647 int32_t TriggerHbForMeasureDistance(const char *pkgName, const char *callerId, const HbMode *mode)
648 {
649     if (pkgName == NULL || callerId == NULL || mode == NULL) {
650         LNN_LOGE(LNN_STATE, "invalid range para");
651         return SOFTBUS_INVALID_PARAM;
652     }
653     int32_t ret = CommonInit(pkgName);
654     if (ret != SOFTBUS_OK) {
655         return ret;
656     }
657     size_t len = strnlen(callerId, CALLER_ID_MAX_LEN);
658     if (len == 0 || len >= CALLER_ID_MAX_LEN) {
659         LNN_LOGE(LNN_STATE, "invalid range callerId len=%{public}zu", len);
660         return SOFTBUS_INVALID_PARAM;
661     }
662     return TriggerHbForMeasureDistanceInner(pkgName, callerId, mode);
663 }
664 
SyncTrustedRelationShip(const char * pkgName,const char * msg,uint32_t msgLen)665 int32_t SyncTrustedRelationShip(const char *pkgName, const char *msg, uint32_t msgLen)
666 {
667     if (pkgName == NULL || msg == NULL) {
668         LNN_LOGE(LNN_STATE, "invalid SyncTrustedRelationShip para");
669         return SOFTBUS_INVALID_PARAM;
670     }
671     int32_t ret = CommonInit(pkgName);
672     if (ret != SOFTBUS_OK) {
673         LNN_LOGE(LNN_STATE, "common init fail, ret=%{public}d", ret);
674         return ret;
675     }
676     return SyncTrustedRelationShipInner(pkgName, msg, msgLen);
677 }
678 
SetDisplayName(const char * pkgName,const char * nameData,uint32_t len)679 int32_t SetDisplayName(const char *pkgName, const char *nameData, uint32_t len)
680 {
681     if (!IsValidString(pkgName, PKG_NAME_SIZE_MAX - 1) || nameData == NULL) {
682         LNN_LOGE(LNN_STATE, "invalid SetDisplayName para");
683         return SOFTBUS_INVALID_PARAM;
684     }
685     int32_t ret = CommonInit(pkgName);
686     if (ret != SOFTBUS_OK) {
687         LNN_LOGE(LNN_STATE, "common init fail, ret=%{public}d", ret);
688         return ret;
689     }
690     return SetDisplayNameInner(pkgName, nameData, len);
691 }