• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "client_bus_center.h"
17 
18 #include <securec.h>
19 #include <string.h>
20 
21 #include "client_trans_session_manager.h"
22 #include "softbus_adapter_mem.h"
23 #include "softbus_client_frame_manager.h"
24 #include "softbus_def.h"
25 #include "softbus_errcode.h"
26 #include "softbus_log.h"
27 #include "softbus_type_def.h"
28 #include "softbus_utils.h"
29 
CommonInit(const char * pkgName)30 static int32_t CommonInit(const char *pkgName)
31 {
32     if (InitSoftBus(pkgName) != SOFTBUS_OK) {
33         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "init softbus failed");
34         return SOFTBUS_NETWORK_NOT_INIT;
35     }
36     if (CheckPackageName(pkgName) != SOFTBUS_OK) {
37         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "check packageName failed");
38         return SOFTBUS_INVALID_PARAM;
39     }
40     return SOFTBUS_OK;
41 }
42 
IsValidNodeStateCb(INodeStateCb * callback)43 static bool IsValidNodeStateCb(INodeStateCb *callback)
44 {
45     if (callback == NULL) {
46         return false;
47     }
48     if (callback->events == 0) {
49         return false;
50     }
51     if ((callback->events & EVENT_NODE_STATE_ONLINE) != 0 &&
52         callback->onNodeOnline == NULL) {
53         return false;
54     }
55     if ((callback->events & EVENT_NODE_STATE_OFFLINE) != 0 &&
56         callback->onNodeOffline == NULL) {
57         return false;
58     }
59     if ((callback->events & EVENT_NODE_STATE_INFO_CHANGED) != 0 &&
60         callback->onNodeBasicInfoChanged == NULL) {
61         return false;
62     }
63     if ((callback->events & EVENT_NODE_STATUS_CHANGED) != 0 &&
64         callback->onNodeStatusChanged == NULL) {
65         return false;
66     }
67     return true;
68 }
69 
PublishInfoCheck(const PublishInfo * info)70 static int32_t PublishInfoCheck(const PublishInfo *info)
71 {
72     if ((info->mode != DISCOVER_MODE_PASSIVE) && (info->mode != DISCOVER_MODE_ACTIVE)) {
73         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "mode is invalid");
74         return SOFTBUS_INVALID_PARAM;
75     }
76     if ((info->medium < AUTO) || (info->medium > COAP)) {
77         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "medium is invalid");
78         return SOFTBUS_INVALID_PARAM;
79     }
80     if ((info->freq < LOW) || (info->freq > SUPER_HIGH)) {
81         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "freq is invalid");
82         return SOFTBUS_INVALID_PARAM;
83     }
84     if (info->capability == NULL) {
85         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "capability is invalid");
86         return SOFTBUS_INVALID_PARAM;
87     }
88     if ((info->capabilityData == NULL) && (info->dataLen != 0)) {
89         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "data is invalid");
90         return SOFTBUS_INVALID_PARAM;
91     }
92     if (info->dataLen == 0) {
93         return SOFTBUS_OK;
94     }
95     if ((info->capabilityData != NULL) &&
96         ((info->dataLen > MAX_CAPABILITYDATA_LEN) ||
97         (strnlen((char *)(info->capabilityData), MAX_CAPABILITYDATA_LEN) == MAX_CAPABILITYDATA_LEN))) {
98         SoftBusLog(SOFTBUS_LOG_DISC, SOFTBUS_LOG_ERROR, "data exceeds the maximum length");
99         return SOFTBUS_INVALID_PARAM;
100     }
101     return SOFTBUS_OK;
102 }
103 
SubscribeInfoCheck(const SubscribeInfo * info)104 static int32_t SubscribeInfoCheck(const SubscribeInfo *info)
105 {
106     if ((info->mode != DISCOVER_MODE_PASSIVE) && (info->mode != DISCOVER_MODE_ACTIVE)) {
107         SoftBusLog(SOFTBUS_LOG_DISC, SOFTBUS_LOG_ERROR, "mode is invalid");
108         return SOFTBUS_INVALID_PARAM;
109     }
110     if ((info->medium < AUTO) || (info->medium > COAP)) {
111         SoftBusLog(SOFTBUS_LOG_DISC, SOFTBUS_LOG_ERROR, "medium is invalid");
112         return SOFTBUS_INVALID_PARAM;
113     }
114     if ((info->freq < LOW) || (info->freq > SUPER_HIGH)) {
115         SoftBusLog(SOFTBUS_LOG_DISC, SOFTBUS_LOG_ERROR, "freq is invalid");
116         return SOFTBUS_INVALID_PARAM;
117     }
118     if (info->capability == NULL) {
119         SoftBusLog(SOFTBUS_LOG_DISC, SOFTBUS_LOG_ERROR, "capability is invalid");
120         return SOFTBUS_INVALID_PARAM;
121     }
122     if ((info->capabilityData == NULL) && (info->dataLen != 0)) {
123         SoftBusLog(SOFTBUS_LOG_DISC, SOFTBUS_LOG_ERROR, "data is invalid");
124         return SOFTBUS_INVALID_PARAM;
125     }
126     if (info->dataLen == 0) {
127         return SOFTBUS_OK;
128     }
129     if ((info->capabilityData != NULL) &&
130         ((info->dataLen > MAX_CAPABILITYDATA_LEN) ||
131         (strnlen((char *)(info->capabilityData), MAX_CAPABILITYDATA_LEN) == MAX_CAPABILITYDATA_LEN))) {
132         SoftBusLog(SOFTBUS_LOG_DISC, SOFTBUS_LOG_ERROR, "data exceeds the maximum length");
133         return SOFTBUS_INVALID_PARAM;
134     }
135     return SOFTBUS_OK;
136 }
137 
GetAllNodeDeviceInfo(const char * pkgName,NodeBasicInfo ** info,int32_t * infoNum)138 int32_t GetAllNodeDeviceInfo(const char *pkgName, NodeBasicInfo **info, int32_t *infoNum)
139 {
140     if (pkgName == NULL || info == NULL || infoNum == NULL) {
141         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "fail: params are null");
142         return SOFTBUS_INVALID_PARAM;
143     }
144     int32_t ret = CommonInit(pkgName);
145     if (ret != SOFTBUS_OK) {
146         return ret;
147     }
148     return GetAllNodeDeviceInfoInner(pkgName, info, infoNum);
149 }
150 
FreeNodeInfo(NodeBasicInfo * info)151 void FreeNodeInfo(NodeBasicInfo *info)
152 {
153     if (info == NULL) {
154         return;
155     }
156     SoftBusFree(info);
157 }
158 
GetLocalNodeDeviceInfo(const char * pkgName,NodeBasicInfo * info)159 int32_t GetLocalNodeDeviceInfo(const char *pkgName, NodeBasicInfo *info)
160 {
161     if (pkgName == NULL || info == NULL) {
162         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "fail: params are null");
163         return SOFTBUS_INVALID_PARAM;
164     }
165     int32_t ret = CommonInit(pkgName);
166     if (ret != SOFTBUS_OK) {
167         return ret;
168     }
169     return GetLocalNodeDeviceInfoInner(pkgName, info);
170 }
171 
GetNodeKeyInfo(const char * pkgName,const char * networkId,NodeDeviceInfoKey key,uint8_t * info,int32_t infoLen)172 int32_t GetNodeKeyInfo(const char *pkgName, const char *networkId, NodeDeviceInfoKey key,
173     uint8_t *info, int32_t infoLen)
174 {
175     if (pkgName == NULL) {
176         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "fail: pkgName is null");
177         return SOFTBUS_INVALID_PARAM;
178     }
179     if (!IsValidString(networkId, NETWORK_ID_BUF_LEN) || info == NULL) {
180         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "invalid params");
181         return SOFTBUS_INVALID_PARAM;
182     }
183     int32_t ret = CommonInit(pkgName);
184     if (ret != SOFTBUS_OK) {
185         return ret;
186     }
187     (void)memset_s(info, infoLen, 0, infoLen);
188     return GetNodeKeyInfoInner(pkgName, networkId, key, info, infoLen);
189 }
190 
SetNodeDataChangeFlag(const char * pkgName,const char * networkId,uint16_t dataChangeFlag)191 int32_t SetNodeDataChangeFlag(const char *pkgName, const char *networkId, uint16_t dataChangeFlag)
192 {
193     if (pkgName == NULL) {
194         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "fail: pkgName is null");
195         return SOFTBUS_INVALID_PARAM;
196     }
197     if (!IsValidString(networkId, NETWORK_ID_BUF_LEN)) {
198         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "invalid params");
199         return SOFTBUS_INVALID_PARAM;
200     }
201     int32_t ret = CommonInit(pkgName);
202     if (ret != SOFTBUS_OK) {
203         return ret;
204     }
205     return SetNodeDataChangeFlagInner(pkgName, networkId, dataChangeFlag);
206 }
207 
JoinLNN(const char * pkgName,ConnectionAddr * target,OnJoinLNNResult cb)208 int32_t JoinLNN(const char *pkgName, ConnectionAddr *target, OnJoinLNNResult cb)
209 {
210     if (pkgName == NULL || target == NULL || cb == NULL) {
211         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "fail : params are NULL!");
212         return SOFTBUS_INVALID_PARAM;
213     }
214     int32_t ret = CommonInit(pkgName);
215     if (ret != SOFTBUS_OK) {
216         return ret;
217     }
218     return JoinLNNInner(pkgName, target, cb);
219 }
220 
JoinMetaNode(const char * pkgName,ConnectionAddr * target,CustomData * customData,OnJoinMetaNodeResult cb)221 int32_t JoinMetaNode(const char *pkgName, ConnectionAddr *target, CustomData *customData, OnJoinMetaNodeResult cb)
222 {
223     if (pkgName == NULL || target == NULL || customData == NULL || cb == NULL) {
224         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "fail : params are NULL!");
225         return SOFTBUS_INVALID_PARAM;
226     }
227     int32_t ret = CommonInit(pkgName);
228     if (ret != SOFTBUS_OK) {
229         return ret;
230     }
231     if (target->type == CONNECTION_ADDR_SESSION) {
232         ret = ClientGetChannelBySessionId(target->info.session.sessionId, &target->info.session.channelId,
233             &target->info.session.type, NULL);
234         if (ret != SOFTBUS_OK) {
235             SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "fail : get channel error!");
236             return ret;
237         }
238     }
239     return JoinMetaNodeInner(pkgName, target, customData, cb);
240 }
241 
LeaveLNN(const char * pkgName,const char * networkId,OnLeaveLNNResult cb)242 int32_t LeaveLNN(const char *pkgName, const char *networkId, OnLeaveLNNResult cb)
243 {
244     if (!IsValidString(networkId, NETWORK_ID_BUF_LEN) || cb == NULL || !IsValidString(pkgName, PKG_NAME_SIZE_MAX - 1)) {
245         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "fail : networkId or cb is NULL!");
246         return SOFTBUS_INVALID_PARAM;
247     }
248     return LeaveLNNInner(pkgName, networkId, cb);
249 }
250 
LeaveMetaNode(const char * pkgName,const char * networkId,OnLeaveMetaNodeResult cb)251 int32_t LeaveMetaNode(const char *pkgName, const char *networkId, OnLeaveMetaNodeResult cb)
252 {
253     if (!IsValidString(networkId, NETWORK_ID_BUF_LEN) || cb == NULL || !IsValidString(pkgName, PKG_NAME_SIZE_MAX - 1)) {
254         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "fail : networkId or cb is NULL!");
255         return SOFTBUS_INVALID_PARAM;
256     }
257     return LeaveMetaNodeInner(pkgName, networkId, cb);
258 }
259 
RegNodeDeviceStateCb(const char * pkgName,INodeStateCb * callback)260 int32_t RegNodeDeviceStateCb(const char *pkgName, INodeStateCb *callback)
261 {
262     if (pkgName == NULL || IsValidNodeStateCb(callback) == false) {
263         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "fail: invalid parameters");
264         return SOFTBUS_INVALID_PARAM;
265     }
266     int32_t ret = CommonInit(pkgName);
267     if (ret != SOFTBUS_OK) {
268         return ret;
269     }
270     return RegNodeDeviceStateCbInner(pkgName, callback);
271 }
272 
UnregNodeDeviceStateCb(INodeStateCb * callback)273 int32_t UnregNodeDeviceStateCb(INodeStateCb *callback)
274 {
275     if (callback == NULL) {
276         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "para callback = null!");
277         return SOFTBUS_INVALID_PARAM;
278     }
279     return UnregNodeDeviceStateCbInner(callback);
280 }
281 
StartTimeSync(const char * pkgName,const char * targetNetworkId,TimeSyncAccuracy accuracy,TimeSyncPeriod period,ITimeSyncCb * cb)282 int32_t StartTimeSync(const char *pkgName, const char *targetNetworkId, TimeSyncAccuracy accuracy,
283     TimeSyncPeriod period, ITimeSyncCb *cb)
284 {
285     if (pkgName == NULL || !IsValidString(targetNetworkId, NETWORK_ID_BUF_LEN) ||
286         cb == NULL || cb->onTimeSyncResult == NULL) {
287         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "fail: invalid parameters");
288         return SOFTBUS_INVALID_PARAM;
289     }
290     int32_t ret = CommonInit(pkgName);
291     if (ret != SOFTBUS_OK) {
292         return ret;
293     }
294     return StartTimeSyncInner(pkgName, targetNetworkId, accuracy, period, cb);
295 }
296 
StopTimeSync(const char * pkgName,const char * targetNetworkId)297 int32_t StopTimeSync(const char *pkgName, const char *targetNetworkId)
298 {
299     if (pkgName == NULL || !IsValidString(targetNetworkId, NETWORK_ID_BUF_LEN)) {
300         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "fail: invalid parameters");
301         return SOFTBUS_INVALID_PARAM;
302     }
303     int32_t ret = CommonInit(pkgName);
304     if (ret != SOFTBUS_OK) {
305         return ret;
306     }
307     return StopTimeSyncInner(pkgName, targetNetworkId);
308 }
309 
PublishLNN(const char * pkgName,const PublishInfo * info,const IPublishCb * cb)310 int32_t PublishLNN(const char *pkgName, const PublishInfo *info, const IPublishCb *cb)
311 {
312     if (pkgName == NULL || info == NULL || cb == NULL) {
313         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "fail: invalid parameters");
314         return SOFTBUS_INVALID_PARAM;
315     }
316     int32_t ret = CommonInit(pkgName);
317     if (ret != SOFTBUS_OK) {
318         return ret;
319     }
320     if (PublishInfoCheck(info) != SOFTBUS_OK) {
321         return SOFTBUS_INVALID_PARAM;
322     }
323     return PublishLNNInner(pkgName, info, cb);
324 }
325 
StopPublishLNN(const char * pkgName,int32_t publishId)326 int32_t StopPublishLNN(const char *pkgName, int32_t publishId)
327 {
328     if (pkgName == NULL) {
329         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "fail: invalid parameters");
330         return SOFTBUS_INVALID_PARAM;
331     }
332     int32_t ret = CommonInit(pkgName);
333     if (ret != SOFTBUS_OK) {
334         return ret;
335     }
336     return StopPublishLNNInner(pkgName, publishId);
337 }
338 
RefreshLNN(const char * pkgName,const SubscribeInfo * info,const IRefreshCallback * cb)339 int32_t RefreshLNN(const char *pkgName, const SubscribeInfo *info, const IRefreshCallback *cb)
340 {
341     if (pkgName == NULL || info == NULL || cb == NULL) {
342         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "fail: invalid parameters");
343         return SOFTBUS_INVALID_PARAM;
344     }
345     int32_t ret = CommonInit(pkgName);
346     if (ret != SOFTBUS_OK) {
347         return ret;
348     }
349     if (SubscribeInfoCheck(info) != SOFTBUS_OK) {
350         return SOFTBUS_INVALID_PARAM;
351     }
352     return RefreshLNNInner(pkgName, info, cb);
353 }
354 
StopRefreshLNN(const char * pkgName,int32_t refreshId)355 int32_t StopRefreshLNN(const char *pkgName, int32_t refreshId)
356 {
357     if (pkgName == NULL) {
358         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "fail: invalid parameters");
359         return SOFTBUS_INVALID_PARAM;
360     }
361     int32_t ret = CommonInit(pkgName);
362     if (ret != SOFTBUS_OK) {
363         return ret;
364     }
365     return StopRefreshLNNInner(pkgName, refreshId);
366 }
367 
ActiveMetaNode(const char * pkgName,const MetaNodeConfigInfo * info,char * metaNodeId)368 int32_t ActiveMetaNode(const char *pkgName, const MetaNodeConfigInfo *info, char *metaNodeId)
369 {
370     if (pkgName == NULL || info == NULL || metaNodeId == NULL) {
371         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "invalid active meta node para");
372         return SOFTBUS_INVALID_PARAM;
373     }
374     int32_t ret = CommonInit(pkgName);
375     if (ret != SOFTBUS_OK) {
376         return ret;
377     }
378     return ActiveMetaNodeInner(pkgName, info, metaNodeId);
379 }
380 
DeactiveMetaNode(const char * pkgName,const char * metaNodeId)381 int32_t DeactiveMetaNode(const char *pkgName, const char *metaNodeId)
382 {
383     if (pkgName == NULL || metaNodeId == NULL) {
384         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "invalid deactive meta node para");
385         return SOFTBUS_INVALID_PARAM;
386     }
387     int32_t ret = CommonInit(pkgName);
388     if (ret != SOFTBUS_OK) {
389         return ret;
390     }
391     return DeactiveMetaNodeInner(pkgName, metaNodeId);
392 }
393 
GetAllMetaNodeInfo(const char * pkgName,MetaNodeInfo * infos,int32_t * infoNum)394 int32_t GetAllMetaNodeInfo(const char *pkgName, MetaNodeInfo *infos, int32_t *infoNum)
395 {
396     if (pkgName == NULL || infos == NULL || infoNum == NULL || *infoNum > MAX_META_NODE_NUM) {
397         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "invalid query meta node info para");
398         return SOFTBUS_INVALID_PARAM;
399     }
400     int32_t ret = CommonInit(pkgName);
401     if (ret != SOFTBUS_OK) {
402         return ret;
403     }
404     return GetAllMetaNodeInfoInner(pkgName, infos, infoNum);
405 }
406 
ShiftLNNGear(const char * pkgName,const char * callerId,const char * targetNetworkId,const GearMode * mode)407 int32_t ShiftLNNGear(const char *pkgName, const char *callerId, const char *targetNetworkId, const GearMode *mode)
408 {
409     if (pkgName == NULL || callerId == NULL || mode == NULL) {
410         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "invalid shift lnn gear para");
411         return SOFTBUS_INVALID_PARAM;
412     }
413     int32_t ret = CommonInit(pkgName);
414     if (ret != SOFTBUS_OK) {
415         return ret;
416     }
417     size_t len = strnlen(callerId, CALLER_ID_MAX_LEN);
418     if (len == 0 || len >= CALLER_ID_MAX_LEN) {
419         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "invalid shift lnn gear callerId len:%d", len);
420         return SOFTBUS_INVALID_PARAM;
421     }
422     if (targetNetworkId != NULL &&
423         strnlen(targetNetworkId, NETWORK_ID_BUF_LEN) != NETWORK_ID_BUF_LEN - 1) {
424         SoftBusLog(SOFTBUS_LOG_LNN, SOFTBUS_LOG_ERROR, "invalid shift lnn gear targetNetworkId");
425         return SOFTBUS_INVALID_PARAM;
426     }
427     return ShiftLNNGearInner(pkgName, callerId, targetNetworkId, mode);
428 }
429