• 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 
RegisterRangeCallbackForMsdp(const char * pkgName,IRangeCallback * callback)356 int32_t RegisterRangeCallbackForMsdp(const char *pkgName, IRangeCallback *callback)
357 {
358     LNN_LOGI(LNN_STATE, "enter");
359     if (pkgName == NULL || callback == NULL || callback->onRangeResult == NULL ||
360         callback->onRangeStateChange == NULL) {
361         LNN_LOGE(LNN_STATE, "pkgName or callback is null");
362         return SOFTBUS_INVALID_PARAM;
363     }
364     if (strcmp(g_msdpPkgName, pkgName) != 0) {
365         LNN_LOGE(LNN_STATE, "pkgName is invalid");
366         return SOFTBUS_INVALID_PARAM;
367     }
368     int32_t ret = CommonInit(pkgName);
369     if (ret != SOFTBUS_OK) {
370         LNN_LOGE(LNN_STATE, "CommonInit failed");
371         return ret;
372     }
373     return RegRangeCbForMsdpInner(pkgName, callback);
374 }
375 
UnregisterRangeCallbackForMsdp(const char * pkgName)376 int32_t UnregisterRangeCallbackForMsdp(const char *pkgName)
377 {
378     if (pkgName == NULL) {
379         LNN_LOGE(LNN_STATE, "pkgName is null");
380         return SOFTBUS_INVALID_PARAM;
381     }
382     if (strcmp(g_msdpPkgName, pkgName) != 0) {
383         LNN_LOGE(LNN_STATE, "pkgName is invalid");
384         return SOFTBUS_INVALID_PARAM;
385     }
386     return UnregRangeCbForMsdpInner(pkgName);
387 }
388 
JoinLNN(const char * pkgName,ConnectionAddr * target,OnJoinLNNResult cb,bool isForceJoin)389 int32_t JoinLNN(const char *pkgName, ConnectionAddr *target, OnJoinLNNResult cb, bool isForceJoin)
390 {
391     if (pkgName == NULL || target == NULL || cb == NULL) {
392         DfxRecordSdkJoinLnnEnd(pkgName, SOFTBUS_INVALID_PARAM);
393         LNN_LOGE(LNN_STATE, "params are NULL");
394         return SOFTBUS_INVALID_PARAM;
395     }
396     int32_t ret = CommonInit(pkgName);
397     if (ret != SOFTBUS_OK) {
398         DfxRecordSdkJoinLnnEnd(pkgName, ret);
399         return ret;
400     }
401     if (target->type == CONNECTION_ADDR_SESSION_WITH_KEY) {
402         ret = ClientGetChannelBySessionId(target->info.session.sessionId, &(target->info.session.channelId),
403             &(target->info.session.type), NULL);
404         if (ret != SOFTBUS_OK) {
405             DfxRecordSdkJoinLnnEnd(pkgName, ret);
406             LNN_LOGE(LNN_STATE, "get channel failed, sessionId=%{public}d", target->info.session.sessionId);
407             return ret;
408         }
409         if (strcmp(pkgName, DM_PKG_NAME) == 0) {
410             ret = ClientCancelAuthSessionTimer(target->info.session.sessionId);
411             if (ret != SOFTBUS_OK) {
412                 LNN_LOGE(LNN_STATE, "fail : cancel timer error, sessionId=%{public}d", target->info.session.sessionId);
413             }
414         }
415     }
416     ret = JoinLNNInner(pkgName, target, cb, isForceJoin);
417     DfxRecordSdkJoinLnnEnd(pkgName, ret);
418     return ret;
419 }
420 
LeaveLNN(const char * pkgName,const char * networkId,OnLeaveLNNResult cb)421 int32_t LeaveLNN(const char *pkgName, const char *networkId, OnLeaveLNNResult cb)
422 {
423     if (!IsValidString(networkId, NETWORK_ID_BUF_LEN) || cb == NULL || !IsValidString(pkgName, PKG_NAME_SIZE_MAX - 1)) {
424         DfxRecordSdkLeaveLnnEnd(pkgName, SOFTBUS_INVALID_PARAM);
425         LNN_LOGE(LNN_STATE, "networkId or cb is NULL");
426         return SOFTBUS_INVALID_PARAM;
427     }
428     int32_t ret = LeaveLNNInner(pkgName, networkId, cb);
429     DfxRecordSdkLeaveLnnEnd(pkgName, ret);
430     return ret;
431 }
432 
RegNodeDeviceStateCb(const char * pkgName,INodeStateCb * callback)433 int32_t RegNodeDeviceStateCb(const char *pkgName, INodeStateCb *callback)
434 {
435     DfxRecordRegNodeStart(pkgName);
436     if (pkgName == NULL || IsValidNodeStateCb(callback) == false) {
437         LNN_LOGE(LNN_STATE, "invalid parameters");
438         return SOFTBUS_INVALID_PARAM;
439     }
440     int32_t ret = CommonInit(pkgName);
441     if (ret != SOFTBUS_OK) {
442         return ret;
443     }
444     return RegNodeDeviceStateCbInner(pkgName, callback);
445 }
446 
UnregNodeDeviceStateCb(INodeStateCb * callback)447 int32_t UnregNodeDeviceStateCb(INodeStateCb *callback)
448 {
449     if (callback == NULL) {
450         LNN_LOGE(LNN_STATE, "para callback = null");
451         return SOFTBUS_INVALID_PARAM;
452     }
453     return UnregNodeDeviceStateCbInner(callback);
454 }
455 
StartTimeSync(const char * pkgName,const char * targetNetworkId,TimeSyncAccuracy accuracy,TimeSyncPeriod period,ITimeSyncCb * cb)456 int32_t StartTimeSync(const char *pkgName, const char *targetNetworkId, TimeSyncAccuracy accuracy,
457     TimeSyncPeriod period, ITimeSyncCb *cb)
458 {
459     if (pkgName == NULL || !IsValidString(targetNetworkId, NETWORK_ID_BUF_LEN) ||
460         cb == NULL || cb->onTimeSyncResult == NULL) {
461         LNN_LOGE(LNN_STATE, "invalid parameters");
462         return SOFTBUS_INVALID_PARAM;
463     }
464     int32_t ret = CommonInit(pkgName);
465     if (ret != SOFTBUS_OK) {
466         return ret;
467     }
468     return StartTimeSyncInner(pkgName, targetNetworkId, accuracy, period, cb);
469 }
470 
StopTimeSync(const char * pkgName,const char * targetNetworkId)471 int32_t StopTimeSync(const char *pkgName, const char *targetNetworkId)
472 {
473     if (pkgName == NULL || !IsValidString(targetNetworkId, NETWORK_ID_BUF_LEN)) {
474         LNN_LOGE(LNN_STATE, "invalid parameters");
475         return SOFTBUS_INVALID_PARAM;
476     }
477     int32_t ret = CommonInit(pkgName);
478     if (ret != SOFTBUS_OK) {
479         return ret;
480     }
481     return StopTimeSyncInner(pkgName, targetNetworkId);
482 }
483 
ValidatePkgName(const char * pkgName)484 static int32_t ValidatePkgName(const char *pkgName)
485 {
486     if (strcmp(pkgName, MODULE_LNN) == 0 || strcmp(pkgName, MODULE_CONN) == 0) {
487         LNN_LOGE(LNN_STATE, "package name is not allowed");
488         return SOFTBUS_INVALID_PARAM;
489     }
490     return SOFTBUS_OK;
491 }
492 
PublishLNN(const char * pkgName,const PublishInfo * info,const IPublishCb * cb)493 int32_t PublishLNN(const char *pkgName, const PublishInfo *info, const IPublishCb *cb)
494 {
495     if (pkgName == NULL || info == NULL || cb == NULL) {
496         DfxRecordLnnDiscServerEnd(DISC_SERVER_PUBLISH, pkgName, SOFTBUS_INVALID_PARAM);
497         LNN_LOGE(LNN_STATE, "invalid parameters");
498         return SOFTBUS_INVALID_PARAM;
499     }
500     if (ValidatePkgName(pkgName) != SOFTBUS_OK) {
501         return SOFTBUS_INVALID_PARAM;
502     }
503 
504     int32_t ret = CommonInit(pkgName);
505     if (ret != SOFTBUS_OK) {
506         DfxRecordLnnDiscServerEnd(DISC_SERVER_PUBLISH, pkgName, ret);
507         return ret;
508     }
509     if (PublishInfoCheck(info) != SOFTBUS_OK) {
510         DfxRecordLnnDiscServerEnd(DISC_SERVER_PUBLISH, pkgName, SOFTBUS_INVALID_PARAM);
511         return SOFTBUS_INVALID_PARAM;
512     }
513     ret = PublishLNNInner(pkgName, info, cb);
514     DfxRecordLnnDiscServerEnd(DISC_SERVER_PUBLISH, pkgName, ret);
515     return ret;
516 }
517 
StopPublishLNN(const char * pkgName,int32_t publishId)518 int32_t StopPublishLNN(const char *pkgName, int32_t publishId)
519 {
520     if (pkgName == NULL) {
521         DfxRecordLnnDiscServerEnd(DISC_SERVER_STOP_PUBLISH, pkgName, SOFTBUS_INVALID_PARAM);
522         LNN_LOGE(LNN_STATE, "invalid parameters");
523         return SOFTBUS_INVALID_PARAM;
524     }
525     if (ValidatePkgName(pkgName) != SOFTBUS_OK) {
526         return SOFTBUS_INVALID_PARAM;
527     }
528 
529     int32_t ret = CommonInit(pkgName);
530     if (ret != SOFTBUS_OK) {
531         DfxRecordLnnDiscServerEnd(DISC_SERVER_STOP_PUBLISH, pkgName, ret);
532         return ret;
533     }
534     ret = StopPublishLNNInner(pkgName, publishId);
535     DfxRecordLnnDiscServerEnd(DISC_SERVER_STOP_PUBLISH, pkgName, ret);
536     return ret;
537 }
538 
RefreshLNN(const char * pkgName,const SubscribeInfo * info,const IRefreshCallback * cb)539 int32_t RefreshLNN(const char *pkgName, const SubscribeInfo *info, const IRefreshCallback *cb)
540 {
541     if (pkgName == NULL || info == NULL || cb == NULL) {
542         DfxRecordLnnDiscServerEnd(DISC_SERVER_DISCOVERY, pkgName, SOFTBUS_INVALID_PARAM);
543         LNN_LOGE(LNN_STATE, "invalid parameters");
544         return SOFTBUS_INVALID_PARAM;
545     }
546     if (ValidatePkgName(pkgName) != SOFTBUS_OK) {
547         return SOFTBUS_INVALID_PARAM;
548     }
549 
550     int32_t ret = CommonInit(pkgName);
551     if (ret != SOFTBUS_OK) {
552         DfxRecordLnnDiscServerEnd(DISC_SERVER_DISCOVERY, pkgName, ret);
553         return ret;
554     }
555     if (SubscribeInfoCheck(info) != SOFTBUS_OK) {
556         DfxRecordLnnDiscServerEnd(DISC_SERVER_DISCOVERY, pkgName, SOFTBUS_INVALID_PARAM);
557         return SOFTBUS_INVALID_PARAM;
558     }
559     ret = RefreshLNNInner(pkgName, info, cb);
560     DfxRecordLnnDiscServerEnd(DISC_SERVER_DISCOVERY, pkgName, ret);
561     return ret;
562 }
563 
StopRefreshLNN(const char * pkgName,int32_t refreshId)564 int32_t StopRefreshLNN(const char *pkgName, int32_t refreshId)
565 {
566     if (pkgName == NULL) {
567         DfxRecordLnnDiscServerEnd(DISC_SERVER_STOP_DISCOVERY, pkgName, SOFTBUS_INVALID_PARAM);
568         LNN_LOGE(LNN_STATE, "invalid parameters");
569         return SOFTBUS_INVALID_PARAM;
570     }
571     if (ValidatePkgName(pkgName) != SOFTBUS_OK) {
572         return SOFTBUS_INVALID_PARAM;
573     }
574 
575     int32_t ret = CommonInit(pkgName);
576     if (ret != SOFTBUS_OK) {
577         DfxRecordLnnDiscServerEnd(DISC_SERVER_STOP_DISCOVERY, pkgName, ret);
578         return ret;
579     }
580     ret = StopRefreshLNNInner(pkgName, refreshId);
581     DfxRecordLnnDiscServerEnd(DISC_SERVER_STOP_DISCOVERY, pkgName, ret);
582     return ret;
583 }
584 
ActiveMetaNode(const char * pkgName,const MetaNodeConfigInfo * info,char * metaNodeId)585 int32_t ActiveMetaNode(const char *pkgName, const MetaNodeConfigInfo *info, char *metaNodeId)
586 {
587     if (pkgName == NULL || info == NULL || metaNodeId == NULL) {
588         LNN_LOGE(LNN_STATE, "invalid active meta node para");
589         return SOFTBUS_INVALID_PARAM;
590     }
591     int32_t ret = CommonInit(pkgName);
592     if (ret != SOFTBUS_OK) {
593         return ret;
594     }
595     return ActiveMetaNodeInner(pkgName, info, metaNodeId);
596 }
597 
DeactiveMetaNode(const char * pkgName,const char * metaNodeId)598 int32_t DeactiveMetaNode(const char *pkgName, const char *metaNodeId)
599 {
600     if (pkgName == NULL || metaNodeId == NULL) {
601         LNN_LOGE(LNN_STATE, "invalid deactive meta node para");
602         return SOFTBUS_INVALID_PARAM;
603     }
604     int32_t ret = CommonInit(pkgName);
605     if (ret != SOFTBUS_OK) {
606         return ret;
607     }
608     return DeactiveMetaNodeInner(pkgName, metaNodeId);
609 }
610 
GetAllMetaNodeInfo(const char * pkgName,MetaNodeInfo * infos,int32_t * infoNum)611 int32_t GetAllMetaNodeInfo(const char *pkgName, MetaNodeInfo *infos, int32_t *infoNum)
612 {
613     if (pkgName == NULL || infos == NULL || infoNum == NULL || *infoNum > MAX_META_NODE_NUM) {
614         LNN_LOGE(LNN_STATE, "invalid query meta node info para");
615         return SOFTBUS_INVALID_PARAM;
616     }
617     int32_t ret = CommonInit(pkgName);
618     if (ret != SOFTBUS_OK) {
619         return ret;
620     }
621     return GetAllMetaNodeInfoInner(pkgName, infos, infoNum);
622 }
623 
ShiftLNNGear(const char * pkgName,const char * callerId,const char * targetNetworkId,const GearMode * mode)624 int32_t ShiftLNNGear(const char *pkgName, const char *callerId, const char *targetNetworkId, const GearMode *mode)
625 {
626     DfxRecordSdkShiftGearStart(pkgName, mode);
627     if (pkgName == NULL || callerId == NULL || mode == NULL) {
628         LNN_LOGE(LNN_STATE, "invalid shift lnn gear para");
629         return SOFTBUS_INVALID_PARAM;
630     }
631     int32_t ret = CommonInit(pkgName);
632     if (ret != SOFTBUS_OK) {
633         return ret;
634     }
635     size_t len = strnlen(callerId, CALLER_ID_MAX_LEN);
636     if (len == 0 || len >= CALLER_ID_MAX_LEN) {
637         LNN_LOGE(LNN_STATE, "invalid shift lnn gear callerId len=%{public}zu", len);
638         return SOFTBUS_INVALID_PARAM;
639     }
640     if (targetNetworkId != NULL &&
641         strnlen(targetNetworkId, NETWORK_ID_BUF_LEN) != NETWORK_ID_BUF_LEN - 1) {
642         LNN_LOGE(LNN_STATE, "invalid shift lnn gear targetNetworkId");
643         return SOFTBUS_INVALID_PARAM;
644     }
645     return ShiftLNNGearInner(pkgName, callerId, targetNetworkId, mode);
646 }
647 
TriggerRangeForMsdp(const char * pkgName,const RangeConfig * config)648 int32_t TriggerRangeForMsdp(const char *pkgName, const RangeConfig *config)
649 {
650     if (pkgName == NULL || config == NULL) {
651         LNN_LOGE(LNN_STATE, "invalid range para");
652         return SOFTBUS_INVALID_PARAM;
653     }
654     int32_t ret = CommonInit(pkgName);
655     if (ret != SOFTBUS_OK) {
656         return ret;
657     }
658     return TriggerRangeForMsdpInner(pkgName, config);
659 }
660 
StopRangeForMsdp(const char * pkgName,const RangeConfig * config)661 int32_t StopRangeForMsdp(const char *pkgName, const RangeConfig *config)
662 {
663     if (pkgName == NULL || config == NULL) {
664         LNN_LOGE(LNN_STATE, "invalid range para");
665         return SOFTBUS_INVALID_PARAM;
666     }
667     return StopRangeForMsdpInner(pkgName, config);
668 }
669 
SyncTrustedRelationShip(const char * pkgName,const char * msg,uint32_t msgLen)670 int32_t SyncTrustedRelationShip(const char *pkgName, const char *msg, uint32_t msgLen)
671 {
672     if (pkgName == NULL || msg == NULL) {
673         LNN_LOGE(LNN_STATE, "invalid SyncTrustedRelationShip para");
674         return SOFTBUS_INVALID_PARAM;
675     }
676     int32_t ret = CommonInit(pkgName);
677     if (ret != SOFTBUS_OK) {
678         LNN_LOGE(LNN_STATE, "common init fail, ret=%{public}d", ret);
679         return ret;
680     }
681     return SyncTrustedRelationShipInner(pkgName, msg, msgLen);
682 }
683 
SetDisplayName(const char * pkgName,const char * nameData,uint32_t len)684 int32_t SetDisplayName(const char *pkgName, const char *nameData, uint32_t len)
685 {
686     if (!IsValidString(pkgName, PKG_NAME_SIZE_MAX - 1) || nameData == NULL) {
687         LNN_LOGE(LNN_STATE, "invalid SetDisplayName para");
688         return SOFTBUS_INVALID_PARAM;
689     }
690     int32_t ret = CommonInit(pkgName);
691     if (ret != SOFTBUS_OK) {
692         LNN_LOGE(LNN_STATE, "common init fail, ret=%{public}d", ret);
693         return ret;
694     }
695     return SetDisplayNameInner(pkgName, nameData, len);
696 }