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 }