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 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 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)69 void TransServerDeathCallback(const char *pkgName)
70 {
71 TransChannelDeathCallback(pkgName);
72 TransDelItemByPackageName(pkgName);
73 }
74
TransCreateSessionServer(const char * pkgName,const char * sessionName,int32_t uid,int32_t pid)75 int32_t TransCreateSessionServer(const char *pkgName, const char *sessionName, int32_t uid, int32_t pid)
76 {
77 if (!IsValidString(pkgName, PKG_NAME_SIZE_MAX - 1) ||
78 !IsValidString(sessionName, SESSION_NAME_SIZE_MAX - 1)) {
79 return SOFTBUS_INVALID_PARAM;
80 }
81 char *anonyOut = NULL;
82 SoftBusLog(SOFTBUS_LOG_TRAN, SOFTBUS_LOG_INFO, "TransCreateSessionServer:pkgName=%s, sessionName=%s",
83 pkgName, AnonyDevId(&anonyOut, sessionName));
84 SoftBusFree(anonyOut);
85 SoftBusLog(SOFTBUS_LOG_TRAN, SOFTBUS_LOG_INFO, "TransCreateSessionServer:uid=%d, pid=%d", uid, pid);
86
87 SessionServer *newNode = (SessionServer *)SoftBusCalloc(sizeof(SessionServer));
88 if (newNode == NULL) {
89 return SOFTBUS_ERR;
90 }
91 if (strcpy_s(newNode->pkgName, sizeof(newNode->pkgName), pkgName) != EOK) {
92 SoftBusFree(newNode);
93 return SOFTBUS_ERR;
94 }
95 if (strcpy_s(newNode->sessionName, sizeof(newNode->sessionName), sessionName) != EOK) {
96 SoftBusFree(newNode);
97 return SOFTBUS_ERR;
98 }
99 newNode->type = SEC_TYPE_CIPHERTEXT;
100 newNode->uid = uid;
101 newNode->pid = pid;
102
103 int32_t ret = TransSessionServerAddItem(newNode);
104 if (ret != SOFTBUS_OK) {
105 SoftBusFree(newNode);
106 if (ret == SOFTBUS_SERVER_NAME_REPEATED) {
107 SoftBusLog(SOFTBUS_LOG_TRAN, SOFTBUS_LOG_INFO, "session server is already created");
108 }
109 return ret;
110 }
111 SoftBusLog(SOFTBUS_LOG_TRAN, SOFTBUS_LOG_INFO, "CreateSessionServer ok");
112 return SOFTBUS_OK;
113 }
114
TransRemoveSessionServer(const char * pkgName,const char * sessionName)115 int32_t TransRemoveSessionServer(const char *pkgName, const char *sessionName)
116 {
117 if (!IsValidString(pkgName, PKG_NAME_SIZE_MAX - 1) ||
118 !IsValidString(sessionName, SESSION_NAME_SIZE_MAX - 1)) {
119 return SOFTBUS_INVALID_PARAM;
120 }
121 return TransSessionServerDelItem(sessionName);
122 }
123
TransOpenSession(const SessionParam * param,TransInfo * info)124 int32_t TransOpenSession(const SessionParam *param, TransInfo *info)
125 {
126 SoftBusLog(SOFTBUS_LOG_TRAN, SOFTBUS_LOG_INFO, "trans server opensession.");
127 if (!IsValidString(param->sessionName, SESSION_NAME_SIZE_MAX) ||
128 !IsValidString(param->peerSessionName, SESSION_NAME_SIZE_MAX) ||
129 !IsValidString(param->peerDeviceId, DEVICE_ID_SIZE_MAX)) {
130 return SOFTBUS_INVALID_PARAM;
131 }
132 if (param->groupId == NULL || strlen(param->groupId) >= GROUP_ID_SIZE_MAX) {
133 return SOFTBUS_TRANS_SESSION_GROUP_INVALID;
134 }
135
136 if (!TransSessionServerIsExist(param->sessionName)) {
137 SoftBusLog(SOFTBUS_LOG_TRAN, SOFTBUS_LOG_ERROR, "session server invalid");
138 return SOFTBUS_TRANS_SESSION_NAME_NO_EXIST;
139 }
140
141 return TransOpenChannel(param, info);
142 }
143