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