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 }