• 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_trans_message_service.h"
17 
18 #include "client_trans_channel_manager.h"
19 #include "client_trans_file.h"
20 #include "client_trans_file_listener.h"
21 #include "client_trans_session_manager.h"
22 #include "client_trans_session_service.h"
23 #include "client_trans_socket_manager.h"
24 #include "client_trans_statistics.h"
25 #include "g_enhance_sdk_func.h"
26 #include "softbus_def.h"
27 #include "softbus_error_code.h"
28 #include "softbus_feature_config.h"
29 #include "softbus_adapter_mem.h"
30 #include "trans_log.h"
31 
32 #define OH_OS_TYPE 10
33 
CheckSendLenForBooster(unsigned int len)34 int32_t CheckSendLenForBooster(unsigned int len)
35 {
36     uint32_t dataConfig = INVALID_DATA_CONFIG;
37     int32_t ret = SoftbusGetConfig(SOFTBUS_INT_MAX_BYTES_LENGTH,  (unsigned char *)&dataConfig, sizeof(dataConfig));
38     if (ret != SOFTBUS_OK) {
39         TRANS_LOGE(TRANS_SDK, "get config failed");
40         return SOFTBUS_GET_CONFIG_VAL_ERR;
41     }
42     if (len > dataConfig) {
43         TRANS_LOGE(TRANS_SDK, "send data over limit.len=%{public}u", len);
44         return SOFTBUS_TRANS_SEND_LEN_BEYOND_LIMIT;
45     }
46     return SOFTBUS_OK;
47 }
48 
CheckSendLen(int32_t channelId,int32_t channelType,unsigned int len,int32_t businessType)49 int CheckSendLen(int32_t channelId, int32_t channelType, unsigned int len, int32_t businessType)
50 {
51     uint32_t dataConfig = INVALID_DATA_CONFIG;
52     if (ClientGetDataConfigByChannelId(channelId, channelType, &dataConfig) != SOFTBUS_OK) {
53         TRANS_LOGE(TRANS_SDK, "get config failed.");
54         return SOFTBUS_GET_CONFIG_VAL_ERR;
55     }
56     if (dataConfig == 0) {
57         ConfigType configType = (ConfigType)GetDefaultConfigType(channelType, businessType);
58         if (configType == SOFTBUS_CONFIG_TYPE_MAX) {
59             TRANS_LOGE(TRANS_SDK, "Invalid channelType=%{public}d, businessType=%{public}d",
60                 channelType, businessType);
61             return SOFTBUS_INVALID_PARAM;
62         }
63         if (SoftbusGetConfig(configType, (unsigned char *)&dataConfig, sizeof(dataConfig)) != SOFTBUS_OK) {
64             TRANS_LOGE(TRANS_SDK, "get config failed, configType=%{public}d.", configType);
65             return SOFTBUS_GET_CONFIG_VAL_ERR;
66         }
67     }
68     TRANS_LOGI(TRANS_SDK, "channelId=%{public}d, sendDataLen=%{public}u, maxDataLen=%{public}u",
69         channelId, len, dataConfig);
70     if (len > dataConfig) {
71         TRANS_LOGE(TRANS_SDK, "send data over limit.len=%{public}u", len);
72         return SOFTBUS_TRANS_SEND_LEN_BEYOND_LIMIT;
73     }
74 
75     return SOFTBUS_OK;
76 }
77 
CheckBusinessTypeAndOsTypeBySessionId(int32_t sessionId,int32_t channelId,int32_t channelType,uint32_t len)78 static int32_t CheckBusinessTypeAndOsTypeBySessionId(int32_t sessionId, int32_t channelId, int32_t channelType,
79     uint32_t len)
80 {
81     int32_t businessType = BUSINESS_TYPE_BUTT;
82     int32_t osType = OH_OS_TYPE;
83     int32_t ret = ClientGetChannelBusinessTypeBySessionId(sessionId, &businessType);
84     TRANS_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, ret,
85         TRANS_BYTES, "ClientGetChannelBusinessTypeBySessionId fail, sessionId=%{public}d", sessionId);
86     ret = ClientGetChannelOsTypeBySessionId(sessionId, &osType);
87     TRANS_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, ret,
88         TRANS_BYTES, "ClientGetChannelOsTypeBySessionId fail, sessionId=%{public}d", sessionId);
89 
90     if ((osType == OH_OS_TYPE) && (businessType != BUSINESS_TYPE_BYTE) && (businessType != BUSINESS_TYPE_NOT_CARE) &&
91         (channelType != CHANNEL_TYPE_AUTH)) {
92         TRANS_LOGE(TRANS_BYTES,
93             "BusinessType no match, businessType=%{public}d, sessionId=%{public}d", businessType, sessionId);
94         return SOFTBUS_TRANS_BUSINESS_TYPE_NOT_MATCH;
95     }
96     bool isD2D = false;
97     ClientCheckIsD2DBySessionId(sessionId, &isD2D);
98     if (isD2D && (businessType != BUSINESS_TYPE_D2D_VOICE)) {
99         TRANS_LOGE(TRANS_BYTES,
100             "businessType no match d2d, businessType=%{public}d, sessionId=%{public}d", businessType, sessionId);
101         return SOFTBUS_TRANS_BUSINESS_TYPE_NOT_MATCH;
102     }
103     if (osType != OH_OS_TYPE && businessType == BUSINESS_TYPE_MESSAGE) {
104         ret = CheckSendLenForBooster(len);
105         TRANS_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, ret,
106             TRANS_BYTES, "CheckSendLenForBooster fail, len=%{public}u, sessionId=%{public}d", len, sessionId);
107     } else {
108         ret = CheckSendLen(channelId, channelType, len, BUSINESS_TYPE_BYTE);
109         TRANS_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, ret,
110             TRANS_BYTES, "CheckSendLen fail, len=%{public}u, sessionId=%{public}d", len, sessionId);
111     }
112     return SOFTBUS_OK;
113 }
114 
SendBytes(int sessionId,const void * data,unsigned int len)115 int SendBytes(int sessionId, const void *data, unsigned int len)
116 {
117     if (data == NULL || len == 0) {
118         TRANS_LOGW(TRANS_BYTES, "Invalid param");
119         return SOFTBUS_INVALID_PARAM;
120     }
121 
122     int ret = CheckPermissionState(sessionId);
123     if (ret != SOFTBUS_OK) {
124         TRANS_LOGE(TRANS_BYTES,
125             "SendBytes no permission, sessionId=%{public}d, len=%{public}u, ret=%{public}d", sessionId, len, ret);
126         return ret;
127     }
128 
129     int32_t channelId = INVALID_CHANNEL_ID;
130     int32_t channelType = CHANNEL_TYPE_BUTT;
131     SessionEnableStatus enableStatus = ENABLE_STATUS_INIT;
132     ret = ClientGetChannelBySessionId(sessionId, &channelId, &channelType, &enableStatus);
133     TRANS_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, ret,
134         TRANS_BYTES, "ClientGetChannelBySessionId fail, sessionId=%{public}d", sessionId);
135 
136     ret = CheckBusinessTypeAndOsTypeBySessionId(sessionId, channelId, channelType, len);
137     TRANS_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, ret,
138         TRANS_BYTES, "CheckBusinessTypeAndOsTypeBySessionId fail, sessionId=%{public}d", sessionId);
139     if (enableStatus != ENABLE_STATUS_SUCCESS) {
140         TRANS_LOGE(TRANS_BYTES,
141             "Enable status fail, len=%{public}u, sessionId=%{public}d", len, sessionId);
142         return SOFTBUS_TRANS_SESSION_NO_ENABLE;
143     }
144     (void)ClientResetIdleTimeoutById(sessionId);
145     UpdateChannelStatistics(sessionId, len);
146     return ClientTransChannelSendBytes(channelId, channelType, data, len);
147 }
148 
CheckAsyncSendBytesFunc(int32_t channelId,int32_t channelType)149 static int32_t CheckAsyncSendBytesFunc(int32_t channelId, int32_t channelType)
150 {
151     bool supportTlv = false;
152     bool needAck = false;
153     int32_t ret = GetSupportTlvAndNeedAckById(channelId, channelType, &supportTlv, &needAck);
154     if (ret != SOFTBUS_OK) {
155         TRANS_LOGE(TRANS_BYTES, "GetSupportTlvAndNeedAckById fail, channelId=%{public}d", channelId);
156         return ret;
157     }
158     if (!supportTlv || !needAck) {
159         TRANS_LOGE(TRANS_BYTES, "supportTlv or needAck is false, not support async sendbytes, channelId=%{public}d",
160             channelId);
161         return SOFTBUS_TRANS_NOT_SUPPORT_ASYNC_SEND_BYTES;
162     }
163     return SOFTBUS_OK;
164 }
165 
SendBytesAsync(int32_t socket,uint32_t dataSeq,const void * data,uint32_t len)166 int32_t SendBytesAsync(int32_t socket, uint32_t dataSeq, const void *data, uint32_t len)
167 {
168     if (data == NULL || dataSeq <= 0 || len == 0) {
169         TRANS_LOGE(TRANS_BYTES, "Invalid param");
170         return SOFTBUS_INVALID_PARAM;
171     }
172     int ret = CheckPermissionState(socket);
173     if (ret != SOFTBUS_OK) {
174         TRANS_LOGE(TRANS_BYTES,
175             "no permission, socket=%{public}d, len=%{public}u, ret=%{public}d", socket, len, ret);
176         return ret;
177     }
178 
179     int32_t channelId = INVALID_CHANNEL_ID;
180     int32_t channelType = CHANNEL_TYPE_BUTT;
181     SessionEnableStatus enableStatus = ENABLE_STATUS_INIT;
182     ret = ClientGetChannelBySessionId(socket, &channelId, &channelType, &enableStatus);
183     TRANS_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, ret,
184         TRANS_BYTES, "ClientGetChannelBySessionId fail, socket=%{public}d", socket);
185     ret = CheckAsyncSendBytesFunc(channelId, channelType);
186     TRANS_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, ret,
187         TRANS_BYTES, "checkAsyncSendByts fail, socket=%{public}d", socket);
188     ret = CheckBusinessTypeAndOsTypeBySessionId(socket, channelId, channelType, len);
189     TRANS_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, ret,
190         TRANS_BYTES, "CheckBusinessTypeAndOsTypeBySessionId fail, socket=%{public}d", socket);
191     if (enableStatus != ENABLE_STATUS_SUCCESS) {
192         TRANS_LOGE(TRANS_BYTES,
193             "session is not enable, len=%{public}u, socket=%{public}d", len, socket);
194         return SOFTBUS_TRANS_SESSION_NO_ENABLE;
195     }
196     (void)ClientResetIdleTimeoutById(socket);
197     UpdateChannelStatistics(socket, len);
198     return ClientTransChannelAsyncSendBytes(channelId, channelType, data, len, dataSeq);
199 }
200 
CheckBusinessTypeBySessionId(int32_t sessionId,int32_t channelId,int32_t channelType,uint32_t len)201 static int32_t CheckBusinessTypeBySessionId(int32_t sessionId, int32_t channelId, int32_t channelType, uint32_t len)
202 {
203     int32_t businessType = BUSINESS_TYPE_BUTT;
204     int32_t ret = ClientGetChannelBusinessTypeBySessionId(sessionId, &businessType);
205     TRANS_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, ret, TRANS_BYTES,
206         "ClientGetChannelBusinessTypeBySessionId fail, sessionId=%{public}d", sessionId);
207     if (businessType != BUSINESS_TYPE_D2D_MESSAGE) {
208         TRANS_LOGE(TRANS_BYTES, "BusinessType no match, businessType=%{public}d, sessionId=%{public}d", businessType,
209             sessionId);
210         return SOFTBUS_TRANS_BUSINESS_TYPE_NOT_MATCH;
211     }
212     return SOFTBUS_OK;
213 }
214 
SendMessageAsync(int32_t socket,uint16_t dataSeq,const void * data,uint32_t len)215 int32_t SendMessageAsync(int32_t socket, uint16_t dataSeq, const void *data, uint32_t len)
216 {
217     if (data == NULL || dataSeq <= 0 || len == 0) {
218         TRANS_LOGE(TRANS_BYTES, "Invalid param");
219         return SOFTBUS_INVALID_PARAM;
220     }
221     int ret = CheckPermissionState(socket);
222     if (ret != SOFTBUS_OK) {
223         TRANS_LOGE(TRANS_BYTES,
224             "no permission, socket=%{public}d, len=%{public}u, ret=%{public}d", socket, len, ret);
225         return ret;
226     }
227 
228     int32_t channelId = INVALID_CHANNEL_ID;
229     int32_t channelType = CHANNEL_TYPE_BUTT;
230     SessionEnableStatus enableStatus = ENABLE_STATUS_INIT;
231     ret = ClientGetChannelBySessionId(socket, &channelId, &channelType, &enableStatus);
232     TRANS_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, ret,
233         TRANS_BYTES, "ClientGetChannelBySessionId fail, socket=%{public}d", socket);
234     ret = CheckBusinessTypeBySessionId(socket, channelId, channelType, len);
235     TRANS_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, ret,
236         TRANS_BYTES, "CheckBusinessTypeAndOsTypeBySessionId fail, socket=%{public}d", socket);
237     ret = CheckSendLen(channelId, channelType, len, BUSINESS_TYPE_MESSAGE);
238     if (ret != SOFTBUS_OK) {
239         return ret;
240     }
241     if (enableStatus != ENABLE_STATUS_SUCCESS) {
242         TRANS_LOGE(TRANS_BYTES,
243             "session is not enable, len=%{public}u, socket=%{public}d", len, socket);
244         return SOFTBUS_TRANS_SESSION_NO_ENABLE;
245     }
246     (void)ClientResetIdleTimeoutById(socket);
247     UpdateChannelStatistics(socket, len);
248     return ClientTransChannelAsyncSendMessage(channelId, channelType, data, len, dataSeq);
249 }
250 
SendMessage(int sessionId,const void * data,unsigned int len)251 int SendMessage(int sessionId, const void *data, unsigned int len)
252 {
253     TRANS_LOGI(TRANS_MSG, "sessionId=%{public}d, len=%{public}d", sessionId, len);
254     if (data == NULL || len == 0) {
255         TRANS_LOGW(TRANS_MSG, "Invalid param");
256         return SOFTBUS_INVALID_PARAM;
257     }
258     int ret = CheckPermissionState(sessionId);
259     if (ret != SOFTBUS_OK) {
260         TRANS_LOGE(TRANS_MSG, "SendMessage no permission, ret=%{public}d", ret);
261         return ret;
262     }
263 
264     int32_t channelId = INVALID_CHANNEL_ID;
265     int32_t channelType = CHANNEL_TYPE_BUTT;
266     SessionEnableStatus enableStatus = ENABLE_STATUS_INIT;
267     if (ClientGetChannelBySessionId(sessionId, &channelId, &channelType, &enableStatus) != SOFTBUS_OK) {
268         return SOFTBUS_TRANS_INVALID_SESSION_ID;
269     }
270 
271     int32_t businessType = BUSINESS_TYPE_BUTT;
272     if (ClientGetChannelBusinessTypeBySessionId(sessionId, &businessType) != SOFTBUS_OK) {
273         return SOFTBUS_TRANS_INVALID_SESSION_ID;
274     }
275     if ((businessType != BUSINESS_TYPE_MESSAGE) && (businessType != BUSINESS_TYPE_NOT_CARE) &&
276         (channelType != CHANNEL_TYPE_AUTH)) {
277         TRANS_LOGE(TRANS_MSG, "BusinessType no match, businessType=%{public}d", businessType);
278         return SOFTBUS_TRANS_BUSINESS_TYPE_NOT_MATCH;
279     }
280 
281     int checkRet = CheckSendLen(channelId, channelType, len, BUSINESS_TYPE_MESSAGE);
282     if (checkRet != SOFTBUS_OK) {
283         return checkRet;
284     }
285 
286     if (enableStatus != ENABLE_STATUS_SUCCESS) {
287         return SOFTBUS_TRANS_SESSION_NO_ENABLE;
288     }
289     (void)ClientResetIdleTimeoutById(sessionId);
290     UpdateChannelStatistics(sessionId, len);
291     return ClientTransChannelSendMessage(channelId, channelType, data, len);
292 }
293 
SendStream(int sessionId,const StreamData * data,const StreamData * ext,const StreamFrameInfo * param)294 int SendStream(int sessionId, const StreamData *data, const StreamData *ext, const StreamFrameInfo *param)
295 {
296     if ((data == NULL) || (ext == NULL) || (param == NULL)) {
297         TRANS_LOGW(TRANS_STREAM, "Invalid param");
298         return SOFTBUS_INVALID_PARAM;
299     }
300     int ret = CheckPermissionState(sessionId);
301     if (ret != SOFTBUS_OK) {
302         TRANS_LOGE(TRANS_STREAM, "SendStream no permission, ret=%{public}d", ret);
303         return ret;
304     }
305 
306     int32_t channelId = INVALID_CHANNEL_ID;
307     int32_t type = CHANNEL_TYPE_BUTT;
308     SessionEnableStatus enableStatus = ENABLE_STATUS_INIT;
309     if (ClientGetChannelBySessionId(sessionId, &channelId, &type, &enableStatus) != SOFTBUS_OK) {
310         return SOFTBUS_TRANS_INVALID_SESSION_ID;
311     }
312     if (type != CHANNEL_TYPE_UDP) {
313         return SOFTBUS_TRANS_STREAM_ONLY_UDP_CHANNEL;
314     }
315 
316     int32_t businessType = BUSINESS_TYPE_BUTT;
317     if (ClientGetChannelBusinessTypeBySessionId(sessionId, &businessType) != SOFTBUS_OK) {
318         return SOFTBUS_TRANS_INVALID_SESSION_ID;
319     }
320     if ((businessType != BUSINESS_TYPE_STREAM) && (businessType != BUSINESS_TYPE_NOT_CARE)) {
321         TRANS_LOGE(TRANS_STREAM, "BusinessType no match, businessType=%{public}d", businessType);
322         return SOFTBUS_TRANS_BUSINESS_TYPE_NOT_MATCH;
323     }
324 
325     if (enableStatus != ENABLE_STATUS_SUCCESS) {
326         return SOFTBUS_TRANS_SESSION_NO_ENABLE;
327     }
328     (void)ClientResetIdleTimeoutById(sessionId);
329     UpdateChannelStatistics(sessionId, data->bufLen);
330     return ClientTransChannelSendStream(channelId, type, data, ext, param);
331 }
332 
ClientCheckFuncPointer(void * func)333 static int32_t ClientCheckFuncPointer(void *func)
334 {
335     if (func == NULL) {
336         TRANS_LOGE(TRANS_FILE, "enhance func not register");
337         return SOFTBUS_FUNC_NOT_REGISTER;
338     }
339     return SOFTBUS_OK;
340 }
341 
CheckFileSchemaPacked(int32_t sessionId,FileSchemaListener * fileSchemaListener)342 static int32_t CheckFileSchemaPacked(int32_t sessionId, FileSchemaListener *fileSchemaListener)
343 {
344     ClientEnhanceFuncList *pfnClientEnhanceFuncList = ClientEnhanceFuncListGet();
345     if (ClientCheckFuncPointer((void *)pfnClientEnhanceFuncList->checkFileSchema) != SOFTBUS_OK) {
346         return SOFTBUS_OK;
347     }
348     return pfnClientEnhanceFuncList->checkFileSchema(sessionId, fileSchemaListener);
349 }
350 
SetSchemaCallbackPacked(FileSchema fileSchema,const char * sFileList[],uint32_t fileCnt)351 static int32_t SetSchemaCallbackPacked(FileSchema fileSchema, const char *sFileList[], uint32_t fileCnt)
352 {
353     ClientEnhanceFuncList *pfnClientEnhanceFuncList = ClientEnhanceFuncListGet();
354     if (ClientCheckFuncPointer((void *)pfnClientEnhanceFuncList->setSchemaCallback) != SOFTBUS_OK) {
355         return SOFTBUS_OK;
356     }
357     return pfnClientEnhanceFuncList->setSchemaCallback(fileSchema, sFileList, fileCnt);
358 }
359 
SendFile(int sessionId,const char * sFileList[],const char * dFileList[],uint32_t fileCnt)360 int SendFile(int sessionId, const char *sFileList[], const char *dFileList[], uint32_t fileCnt)
361 {
362     if ((sFileList == NULL) || (fileCnt == 0)) {
363         TRANS_LOGW(TRANS_FILE, "Invalid param");
364         return SOFTBUS_INVALID_PARAM;
365     }
366     int ret = CheckPermissionState(sessionId);
367     TRANS_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, ret,
368         TRANS_FILE,  "SendFile no permission, sessionId=%{public}d, ret=%{public}d", sessionId, ret);
369 
370     FileSchemaListener *fileSchemaListener = (FileSchemaListener*)SoftBusCalloc(sizeof(FileSchemaListener));
371     if (fileSchemaListener == NULL) {
372         return SOFTBUS_MALLOC_ERR;
373     }
374     if (CheckFileSchemaPacked(sessionId, fileSchemaListener) == SOFTBUS_OK) {
375         ret = SetSchemaCallbackPacked(fileSchemaListener->schema, sFileList, fileCnt);
376         if (ret != SOFTBUS_OK) {
377             TRANS_LOGE(TRANS_FILE, "set schema callback failed, sessionId=%{public}d, ret=%{public}d", sessionId, ret);
378             SoftBusFree(fileSchemaListener);
379             return ret;
380         }
381     }
382 
383     int32_t channelId = INVALID_CHANNEL_ID;
384     int32_t type = CHANNEL_TYPE_BUTT;
385     SessionEnableStatus enableStatus = ENABLE_STATUS_INIT;
386     if (ClientGetChannelBySessionId(sessionId, &channelId, &type, &enableStatus) != SOFTBUS_OK) {
387         TRANS_LOGE(TRANS_FILE, "ClientGetChannelBySessionId failed, sessionId=%{public}d", sessionId);
388         SoftBusFree(fileSchemaListener);
389         return SOFTBUS_TRANS_INVALID_SESSION_ID;
390     }
391 
392     int32_t businessType = BUSINESS_TYPE_BUTT;
393     if (ClientGetChannelBusinessTypeBySessionId(sessionId, &businessType) != SOFTBUS_OK) {
394         TRANS_LOGE(TRANS_FILE, "ClientGetChannelBusinessTypeBySessionId failed, sessionId=%{public}d", sessionId);
395         SoftBusFree(fileSchemaListener);
396         return SOFTBUS_TRANS_INVALID_SESSION_ID;
397     }
398     if ((businessType != BUSINESS_TYPE_FILE) && (businessType != BUSINESS_TYPE_NOT_CARE)) {
399         TRANS_LOGE(TRANS_FILE,
400             "BusinessType no match, sessionId=%{public}d, businessType=%{public}d", sessionId, businessType);
401         SoftBusFree(fileSchemaListener);
402         return SOFTBUS_TRANS_BUSINESS_TYPE_NOT_MATCH;
403     }
404 
405     if (enableStatus !=  ENABLE_STATUS_SUCCESS) {
406         TRANS_LOGE(TRANS_FILE, "Enable status failed, sessionId=%{public}d", sessionId);
407         SoftBusFree(fileSchemaListener);
408         return SOFTBUS_TRANS_SESSION_NO_ENABLE;
409     }
410     SoftBusFree(fileSchemaListener);
411     (void)ClientResetIdleTimeoutById(sessionId);
412     return ClientTransChannelSendFile(channelId, type, sFileList, dFileList, fileCnt);
413 }
414