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 "trans_session_service.h"
17
18 #include "securec.h"
19 #include "softbus_adapter_mem.h"
20 #include "softbus_def.h"
21 #include "softbus_errcode.h"
22 #include "softbus_log.h"
23 #include "softbus_permission.h"
24 #include "softbus_qos.h"
25 #include "softbus_utils.h"
26 #include "trans_channel_manager.h"
27 #include "trans_session_manager.h"
28
29 static bool g_transSessionInitFlag = false;
30
TransServerInit(void)31 NO_SANITIZE("cfi") int TransServerInit(void)
32 {
33 if (g_transSessionInitFlag) {
34 return SOFTBUS_OK;
35 }
36 if (TransPermissionInit() != SOFTBUS_OK) {
37 SoftBusLog(SOFTBUS_LOG_TRAN, SOFTBUS_LOG_ERROR, "Init trans permission failed");
38 return SOFTBUS_ERR;
39 }
40 if (TransSessionMgrInit() != SOFTBUS_OK) {
41 SoftBusLog(SOFTBUS_LOG_TRAN, SOFTBUS_LOG_ERROR, "TransSessionMgrInit failed");
42 return SOFTBUS_ERR;
43 }
44 if (TransChannelInit() != SOFTBUS_OK) {
45 SoftBusLog(SOFTBUS_LOG_TRAN, SOFTBUS_LOG_ERROR, "TransChannelInit failed");
46 return SOFTBUS_ERR;
47 }
48 if (InitQos() != SOFTBUS_OK) {
49 SoftBusLog(SOFTBUS_LOG_TRAN, SOFTBUS_LOG_ERROR, "QosInit Failed");
50 return SOFTBUS_ERR;
51 }
52 g_transSessionInitFlag = true;
53 SoftBusLog(SOFTBUS_LOG_TRAN, SOFTBUS_LOG_INFO, "trans session server list init succ");
54 return SOFTBUS_OK;
55 }
56
TransServerDeinit(void)57 NO_SANITIZE("cfi") void TransServerDeinit(void)
58 {
59 if (g_transSessionInitFlag == false) {
60 return;
61 }
62
63 TransSessionMgrDeinit();
64 TransChannelDeinit();
65 TransPermissionDeinit();
66 g_transSessionInitFlag = false;
67 }
68
TransServerDeathCallback(const char * pkgName,int32_t pid)69 NO_SANITIZE("cfi") void TransServerDeathCallback(const char *pkgName, int32_t pid)
70 {
71 TransChannelDeathCallback(pkgName, pid);
72 TransDelItemByPackageName(pkgName, pid);
73 }
74
TransCreateSessionServer(const char * pkgName,const char * sessionName,int32_t uid,int32_t pid)75 NO_SANITIZE("cfi") int32_t TransCreateSessionServer(const char *pkgName, const char *sessionName, int32_t uid,
76 int32_t pid)
77 {
78 if (!IsValidString(pkgName, PKG_NAME_SIZE_MAX - 1) ||
79 !IsValidString(sessionName, SESSION_NAME_SIZE_MAX - 1)) {
80 return SOFTBUS_INVALID_PARAM;
81 }
82 char *anonyOut = NULL;
83 SoftBusLog(SOFTBUS_LOG_TRAN, SOFTBUS_LOG_INFO, "TransCreateSessionServer:pkgName=%s, sessionName=%s",
84 pkgName, AnonyDevId(&anonyOut, sessionName));
85 SoftBusFree(anonyOut);
86 SoftBusLog(SOFTBUS_LOG_TRAN, SOFTBUS_LOG_INFO, "TransCreateSessionServer:uid=%d, pid=%d", uid, pid);
87
88 SessionServer *newNode = (SessionServer *)SoftBusCalloc(sizeof(SessionServer));
89 if (newNode == NULL) {
90 return SOFTBUS_ERR;
91 }
92 if (strcpy_s(newNode->pkgName, sizeof(newNode->pkgName), pkgName) != EOK) {
93 SoftBusFree(newNode);
94 return SOFTBUS_ERR;
95 }
96 if (strcpy_s(newNode->sessionName, sizeof(newNode->sessionName), sessionName) != EOK) {
97 SoftBusFree(newNode);
98 return SOFTBUS_ERR;
99 }
100 newNode->type = SEC_TYPE_CIPHERTEXT;
101 newNode->uid = uid;
102 newNode->pid = pid;
103
104 int32_t ret = TransSessionServerAddItem(newNode);
105 if (ret != SOFTBUS_OK) {
106 SoftBusFree(newNode);
107 if (ret == SOFTBUS_SERVER_NAME_REPEATED) {
108 SoftBusLog(SOFTBUS_LOG_TRAN, SOFTBUS_LOG_INFO, "session server is already created");
109 }
110 return ret;
111 }
112 SoftBusLog(SOFTBUS_LOG_TRAN, SOFTBUS_LOG_INFO, "CreateSessionServer ok");
113 return SOFTBUS_OK;
114 }
115
TransRemoveSessionServer(const char * pkgName,const char * sessionName)116 NO_SANITIZE("cfi") int32_t TransRemoveSessionServer(const char *pkgName, const char *sessionName)
117 {
118 if (!IsValidString(pkgName, PKG_NAME_SIZE_MAX - 1) ||
119 !IsValidString(sessionName, SESSION_NAME_SIZE_MAX - 1)) {
120 return SOFTBUS_INVALID_PARAM;
121 }
122 return TransSessionServerDelItem(sessionName);
123 }
124
TransOpenSession(const SessionParam * param,TransInfo * info)125 NO_SANITIZE("cfi") int32_t TransOpenSession(const SessionParam *param, TransInfo *info)
126 {
127 SoftBusLog(SOFTBUS_LOG_TRAN, SOFTBUS_LOG_INFO, "trans server opensession.");
128 if (!IsValidString(param->sessionName, SESSION_NAME_SIZE_MAX) ||
129 !IsValidString(param->peerSessionName, SESSION_NAME_SIZE_MAX) ||
130 !IsValidString(param->peerDeviceId, DEVICE_ID_SIZE_MAX)) {
131 return SOFTBUS_INVALID_PARAM;
132 }
133 if (param->groupId == NULL || strlen(param->groupId) >= GROUP_ID_SIZE_MAX) {
134 return SOFTBUS_TRANS_SESSION_GROUP_INVALID;
135 }
136
137 if (!TransSessionServerIsExist(param->sessionName)) {
138 SoftBusLog(SOFTBUS_LOG_TRAN, SOFTBUS_LOG_ERROR, "session server invalid");
139 return SOFTBUS_TRANS_SESSION_NAME_NO_EXIST;
140 }
141
142 return TransOpenChannel(param, info);
143 }
144