• 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 "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