• 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 <securec.h>
17 #include <stdbool.h>
18 
19 #include "comm_log.h"
20 #include "softbus_common.h"
21 #include "softbus_errcode.h"
22 #include "softbus_config_adapter.h"
23 #include "softbus_feature_config.h"
24 
25 #define MAX_STORAGE_PATH_LEN 256
26 #define MAX_NET_IF_NAME_LEN 256
27 
28 #define MAX_BYTES_LENGTH 4194304
29 #define MAX_MESSAGE_LENGTH 4096
30 
31 #ifdef SOFTBUS_LINUX
32 #define CONN_BR_MAX_DATA_LENGTH (40 * 1000)
33 #define CONN_COC_MAX_DATA_LENGTH (40 * 1000)
34 #define CONN_BLE_CLOSE_DELAY (10 * 1000)
35 #else
36 #define CONN_BR_MAX_DATA_LENGTH 4096
37 #define CONN_COC_MAX_DATA_LENGTH 4096
38 #define CONN_BLE_CLOSE_DELAY (30 * 1000)
39 #endif
40 
41 #define CONN_RFCOM_SEND_MAX_LEN 990
42 #define CONN_COC_SEND_MTU_LEN 990
43 /* 4KB + INDEX + IV_HEAD + PACKET_HEAD + SLICE_HEAD + CHANNEL_HEAD */
44 #define CONN_TCP_MAX_LENGTH (4096 + 12 + 28 + 16 + 16)
45 #define CONN_BR_RECEIVE_MAX_LEN 500
46 #define CONN_TCP_MAX_CONN_NUM 30
47 #define CONN_TCP_TIME_OUT 100
48 #define MAX_NODE_STATE_CB_CNT 10
49 #define MAX_LNN_CONNECTION_CNT 30
50 #define LNN_SUPPORT_CAPBILITY 62
51 #define LNN_SUPPORT_FEATURE     0xF7CA
52 #define AUTH_ABILITY_COLLECTION 0
53 #define ADAPTER_LOG_LEVEL 0
54 #ifndef DEFAULT_STORAGE_PATH
55 #define DEFAULT_STORAGE_PATH "/data/service/el1/public"
56 #endif
57 #define LNN_UDID_INIT_DELAY_LEN 1000
58 #define LNN_NET_IF_NAME "0:eth0,1:wlan0,2:br0,3:ble0"
59 #define LNN_MAX_CONCURENT_NUM 2
60 #define DEFAULT_DISC_FREQ_LOW ((5 << 16) | 12)
61 #define DEFAULT_DISC_FREQ_MID ((5 << 16) | 24)
62 #define DEFAULT_DISC_FREQ_HIGH ((5 << 16) | 36)
63 #define DEFAULT_DISC_FREQ_SUPER_HIGH ((10 << 16) | 48)
64 
65 #ifdef SOFTBUS_LINUX
66 #define DEFAULT_NEW_BYTES_LEN (4 * 1024 * 1024)
67 #define DEFAULT_NEW_MESSAGE_LEN (4 * 1024)
68 #define DEFAULT_MAX_BYTES_LEN (4 * 1024 * 1024)
69 #define DEFAULT_MAX_MESSAGE_LEN (4 * 1024)
70 #define DEFAULT_AUTH_MAX_BYTES_LEN (40000 - 32)
71 #define DEFAULT_AUTH_MAX_MESSAGE_LEN (4 * 1024)
72 #define DEFAULT_PROXY_MAX_BYTES_LEN (4 * 1024 * 1024)
73 #define DEFAULT_PROXY_MAX_MESSAGE_LEN (1 * 1024)
74 #define DEFAULT_IS_SUPPORT_TCP_PROXY 1
75 #define DEFAULT_BLE_MAC_AUTO_REFRESH 1
76 #elif defined SOFTBUS_LITEOS_A
77 #define DEFAULT_NEW_BYTES_LEN (1 * 1024 * 1024)
78 #define DEFAULT_NEW_MESSAGE_LEN (4 * 1024)
79 #define DEFAULT_MAX_BYTES_LEN (1 * 1024 * 1024)
80 #define DEFAULT_MAX_MESSAGE_LEN (4 * 1024)
81 #define DEFAULT_AUTH_MAX_BYTES_LEN (4 * 1024)
82 #define DEFAULT_AUTH_MAX_MESSAGE_LEN (1 * 1024)
83 #define DEFAULT_PROXY_MAX_BYTES_LEN (4 * 1024)
84 #define DEFAULT_PROXY_MAX_MESSAGE_LEN (1 * 1024)
85 #define DEFAULT_IS_SUPPORT_TCP_PROXY 1
86 #define DEFAULT_BLE_MAC_AUTO_REFRESH 1
87 #else
88 #define DEFAULT_NEW_BYTES_LEN (4 * 1024)
89 #define DEFAULT_NEW_MESSAGE_LEN (4 * 1024)
90 #define DEFAULT_MAX_BYTES_LEN (2 * 1024)
91 #define DEFAULT_MAX_MESSAGE_LEN (1 * 1024)
92 #define DEFAULT_AUTH_MAX_BYTES_LEN (2 * 1024)
93 #define DEFAULT_AUTH_MAX_MESSAGE_LEN (1 * 1024)
94 #define DEFAULT_PROXY_MAX_BYTES_LEN (2 * 1024)
95 #define DEFAULT_PROXY_MAX_MESSAGE_LEN (1 * 1024)
96 #define DEFAULT_IS_SUPPORT_TCP_PROXY 1
97 #define DEFAULT_BLE_MAC_AUTO_REFRESH 0
98 #endif
99 
100 typedef struct {
101     int32_t authAbilityConn;
102     int32_t connBrMaxDataLen;
103     int32_t connRfcomSendMaxLen;
104     int32_t connBrRecvMaxLen;
105     int32_t connTcpMaxLen;
106     int32_t connTcpMaxConnNum;
107     int32_t connTcpTimeOut;
108     int32_t maxNodeStateCbCnt;
109     int32_t maxLnnConnCnt;
110     int32_t maxLnnSupportCap;
111     int32_t adapterLogLevel;
112     char storageDir[MAX_STORAGE_PATH_LEN];
113     int32_t lnnUdidInitDelayLen;
114     char lnnNetIfName[MAX_NET_IF_NAME_LEN];
115     int32_t lnnMaxConcurentNum;
116     bool lnnAutoNetworkingSwitch;
117     bool isSupportTopo;
118     uint64_t supportFeature;
119     int32_t connCocMaxDataLen;
120     int32_t connCocSendMtu;
121     int32_t connBleCloseDelayTime;
122     int32_t bleMacAutoRefreshSwitch;
123 } ConfigItem;
124 
125 typedef struct {
126     ConfigType type;
127     unsigned char *val;
128     uint32_t len;
129 } ConfigVal;
130 
131 ConfigItem g_config = {
132     AUTH_ABILITY_COLLECTION,
133     CONN_BR_MAX_DATA_LENGTH,
134     CONN_RFCOM_SEND_MAX_LEN,
135     CONN_BR_RECEIVE_MAX_LEN,
136     CONN_TCP_MAX_LENGTH,
137     CONN_TCP_MAX_CONN_NUM,
138     CONN_TCP_TIME_OUT,
139     MAX_NODE_STATE_CB_CNT,
140     MAX_LNN_CONNECTION_CNT,
141     LNN_SUPPORT_CAPBILITY,
142     ADAPTER_LOG_LEVEL,
143     DEFAULT_STORAGE_PATH,
144     LNN_UDID_INIT_DELAY_LEN,
145     LNN_NET_IF_NAME,
146     LNN_MAX_CONCURENT_NUM,
147     true,
148     true,
149     LNN_SUPPORT_FEATURE,
150     CONN_COC_MAX_DATA_LENGTH,
151     CONN_COC_SEND_MTU_LEN,
152     CONN_BLE_CLOSE_DELAY,
153     DEFAULT_BLE_MAC_AUTO_REFRESH,
154 };
155 
156 typedef struct {
157     int32_t isSupportTcpProxy;
158     int32_t maxBytesNewLen;
159     int32_t maxMessageNewLen;
160     int32_t maxBytesLen;
161     int32_t maxMessageLen;
162     int32_t maxAuthBytesLen;
163     int32_t maxAuthMessageLen;
164     uint32_t maxProxyBytesLen;
165     uint32_t maxProxyMessageLen;
166 } TransConfigItem;
167 
168 static TransConfigItem g_tranConfig = {0};
169 
170 typedef struct {
171     uint32_t discFreq[FREQ_BUTT];
172 } DiscConfigItem;
173 
174 static DiscConfigItem g_discConfig = {
175     .discFreq = {
176         DEFAULT_DISC_FREQ_LOW,
177         DEFAULT_DISC_FREQ_MID,
178         DEFAULT_DISC_FREQ_HIGH,
179         DEFAULT_DISC_FREQ_SUPER_HIGH,
180     },
181 };
182 
183 ConfigVal g_configItems[SOFTBUS_CONFIG_TYPE_MAX] = {
184     {
185         SOFTBUS_INT_MAX_BYTES_NEW_LENGTH,
186         (unsigned char *)&(g_tranConfig.maxBytesNewLen),
187         sizeof(g_tranConfig.maxBytesNewLen)
188     },
189     {
190         SOFTBUS_INT_MAX_MESSAGE_NEW_LENGTH,
191         (unsigned char *)&(g_tranConfig.maxMessageNewLen),
192         sizeof(g_tranConfig.maxMessageNewLen)
193     },
194     {
195         SOFTBUS_INT_MAX_BYTES_LENGTH,
196         (unsigned char *)&(g_tranConfig.maxBytesLen),
197         sizeof(g_tranConfig.maxBytesLen)
198     },
199     {
200         SOFTBUS_INT_MAX_MESSAGE_LENGTH,
201         (unsigned char *)&(g_tranConfig.maxMessageLen),
202         sizeof(g_tranConfig.maxMessageLen)
203     },
204     {
205         SOFTBUS_INT_CONN_BR_MAX_DATA_LENGTH,
206         (unsigned char *)&(g_config.connBrMaxDataLen),
207         sizeof(g_config.connBrMaxDataLen)
208     },
209     {
210         SOFTBUS_INT_CONN_RFCOM_SEND_MAX_LEN,
211         (unsigned char *)&(g_config.connRfcomSendMaxLen),
212         sizeof(g_config.connRfcomSendMaxLen)
213     },
214     {
215         SOFTBUS_INT_CONN_BR_RECEIVE_MAX_LEN,
216         (unsigned char *)&(g_config.connBrRecvMaxLen),
217         sizeof(g_config.connBrRecvMaxLen)
218     },
219     {
220         SOFTBUS_INT_CONN_TCP_MAX_LENGTH,
221         (unsigned char *)&(g_config.connTcpMaxLen),
222         sizeof(g_config.connTcpMaxLen)
223     },
224     {
225         SOFTBUS_INT_CONN_TCP_MAX_CONN_NUM,
226         (unsigned char *)&(g_config.connTcpMaxConnNum),
227         sizeof(g_config.connTcpMaxConnNum)
228     },
229     {
230         SOFTBUS_INT_CONN_TCP_TIME_OUT,
231         (unsigned char *)&(g_config.connTcpTimeOut),
232         sizeof(g_config.connTcpTimeOut)
233     },
234     {
235         SOFTBUS_INT_MAX_NODE_STATE_CB_CNT,
236         (unsigned char *)&(g_config.maxNodeStateCbCnt),
237         sizeof(g_config.maxNodeStateCbCnt)
238     },
239     {
240         SOFTBUS_INT_MAX_LNN_CONNECTION_CNT,
241         (unsigned char *)&(g_config.maxLnnConnCnt),
242         sizeof(g_config.maxLnnConnCnt)
243     },
244     {
245         SOFTBUS_INT_LNN_SUPPORT_CAPABILITY,
246         (unsigned char *)&(g_config.maxLnnSupportCap),
247         sizeof(g_config.maxLnnSupportCap)
248     },
249     {
250         SOFTBUS_INT_AUTH_ABILITY_COLLECTION,
251         (unsigned char *)&(g_config.authAbilityConn),
252         sizeof(g_config.authAbilityConn)
253     },
254     {
255         SOFTBUS_INT_ADAPTER_LOG_LEVEL,
256         (unsigned char *)&(g_config.adapterLogLevel),
257         sizeof(g_config.adapterLogLevel)
258     },
259     {
260         SOFTBUS_STR_STORAGE_DIRECTORY,
261         (unsigned char *)(g_config.storageDir),
262         sizeof(g_config.storageDir)
263     },
264     {
265         SOFTBUS_INT_SUPPORT_TCP_PROXY,
266         (unsigned char *)&(g_tranConfig.isSupportTcpProxy),
267         sizeof(g_tranConfig.isSupportTcpProxy)
268     },
269     {
270         SOFTBUS_INT_LNN_UDID_INIT_DELAY_LEN,
271         (unsigned char *)&(g_config.lnnUdidInitDelayLen),
272         sizeof(g_config.lnnUdidInitDelayLen)
273     },
274     {
275         SOFTBUS_STR_LNN_NET_IF_NAME,
276         (unsigned char *)&(g_config.lnnNetIfName),
277         sizeof(g_config.lnnNetIfName)
278     },
279     {
280         SOFTBUS_INT_LNN_MAX_CONCURRENT_NUM,
281         (unsigned char *)&(g_config.lnnMaxConcurentNum),
282         sizeof(g_config.lnnMaxConcurentNum)
283     },
284     {
285         SOFTBUS_INT_AUTH_MAX_BYTES_LENGTH,
286         (unsigned char *)&(g_tranConfig.maxAuthBytesLen),
287         sizeof(g_tranConfig.maxAuthBytesLen)
288     },
289     {
290         SOFTBUS_INT_AUTH_MAX_MESSAGE_LENGTH,
291         (unsigned char *)&(g_tranConfig.maxAuthMessageLen),
292         sizeof(g_tranConfig.maxAuthMessageLen)
293     },
294     {
295         SOFTBUS_INT_AUTO_NETWORKING_SWITCH,
296         (unsigned char *)&(g_config.lnnAutoNetworkingSwitch),
297         sizeof(g_config.lnnAutoNetworkingSwitch)
298     },
299     {
300         SOFTBUS_BOOL_SUPPORT_TOPO,
301         (unsigned char *)&(g_config.isSupportTopo),
302         sizeof(g_config.isSupportTopo)
303     },
304     {
305         SOFTBUS_INT_DISC_FREQ,
306         (unsigned char *)(g_discConfig.discFreq),
307         sizeof(g_discConfig.discFreq)
308     },
309     {
310         SOFTBUS_INT_PROXY_MAX_BYTES_LENGTH,
311         (unsigned char *)&(g_tranConfig.maxProxyBytesLen),
312         sizeof(g_tranConfig.maxProxyBytesLen)
313     },
314     {
315         SOFTBUS_INT_PROXY_MAX_MESSAGE_LENGTH,
316         (unsigned char *)&(g_tranConfig.maxProxyMessageLen),
317         sizeof(g_tranConfig.maxProxyMessageLen)
318     },
319     {
320         SOFTBUS_INT_LNN_SUPPORT_FEATURE,
321         (unsigned char *)&(g_config.supportFeature),
322         sizeof(g_config.supportFeature)
323     },
324     {
325         SOFTBUS_INT_CONN_COC_MAX_DATA_LENGTH,
326         (unsigned char *)&(g_config.connCocMaxDataLen),
327         sizeof(g_config.connCocMaxDataLen)
328     },
329     {
330         SOFTBUS_INT_CONN_COC_SEND_MTU,
331         (unsigned char *)&(g_config.connCocSendMtu),
332         sizeof(g_config.connCocSendMtu)
333     },
334     {
335         SOFTBUS_INT_CONN_BLE_CLOSE_DELAY_TIME,
336         (unsigned char *)&(g_config.connBleCloseDelayTime),
337         sizeof(g_config.connBleCloseDelayTime)
338     },
339     {
340         SOFTBUS_INT_BLE_MAC_AUTO_REFRESH_SWITCH,
341         (unsigned char *)&(g_config.bleMacAutoRefreshSwitch),
342         sizeof(g_config.bleMacAutoRefreshSwitch)
343     },
344 };
345 
SoftbusSetConfig(ConfigType type,const unsigned char * val,uint32_t len)346 int SoftbusSetConfig(ConfigType type, const unsigned char *val, uint32_t len)
347 {
348     if ((type >= SOFTBUS_CONFIG_TYPE_MAX) || (val == NULL) ||
349         (len > g_configItems[type].len) || (type != g_configItems[type].type)) {
350         COMM_LOGW(COMM_DFX, "invalid param");
351         return SOFTBUS_ERR;
352     }
353     if (memcpy_s(g_configItems[type].val, g_configItems[type].len, val, len) != EOK) {
354         COMM_LOGW(COMM_DFX, "memcpy_s fail");
355         return SOFTBUS_ERR;
356     }
357     return SOFTBUS_OK;
358 }
359 
SoftbusGetConfig(ConfigType type,unsigned char * val,uint32_t len)360 int SoftbusGetConfig(ConfigType type, unsigned char *val, uint32_t len)
361 {
362     if ((type >= SOFTBUS_CONFIG_TYPE_MAX) || (val == NULL) ||
363         (len != g_configItems[type].len) || (type != g_configItems[type].type)) {
364         COMM_LOGW(COMM_DFX, "invalid param");
365         return SOFTBUS_ERR;
366     }
367     if (memcpy_s((void*)val, len, g_configItems[type].val, g_configItems[type].len) != EOK) {
368         COMM_LOGW(COMM_DFX, "memcpy_s fail");
369         return SOFTBUS_ERR;
370     }
371     return SOFTBUS_OK;
372 }
373 
SoftbusConfigSetTransDefaultVal(void)374 static void SoftbusConfigSetTransDefaultVal(void)
375 {
376     g_tranConfig.isSupportTcpProxy = DEFAULT_IS_SUPPORT_TCP_PROXY;
377     g_tranConfig.maxBytesNewLen = DEFAULT_NEW_BYTES_LEN;
378     g_tranConfig.maxMessageNewLen = DEFAULT_NEW_MESSAGE_LEN;
379     g_tranConfig.maxBytesLen = DEFAULT_MAX_BYTES_LEN;
380     g_tranConfig.maxMessageLen = DEFAULT_MAX_MESSAGE_LEN;
381     g_tranConfig.maxAuthBytesLen = DEFAULT_AUTH_MAX_BYTES_LEN;
382     g_tranConfig.maxAuthMessageLen = DEFAULT_AUTH_MAX_MESSAGE_LEN;
383     g_tranConfig.maxProxyBytesLen = DEFAULT_PROXY_MAX_BYTES_LEN;
384     g_tranConfig.maxProxyMessageLen = DEFAULT_PROXY_MAX_MESSAGE_LEN;
385 }
386 
SoftbusConfigSetDefaultVal(void)387 static void SoftbusConfigSetDefaultVal(void)
388 {
389     SoftbusConfigSetTransDefaultVal();
390 }
391 
SoftbusConfigInit(void)392 void SoftbusConfigInit(void)
393 {
394     ConfigSetProc sets;
395     SoftbusConfigSetDefaultVal();
396     sets.SetConfig = &SoftbusSetConfig;
397     SoftbusConfigAdapterInit(&sets);
398 }