• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * This file is part of the openHiTLS project.
3  *
4  * openHiTLS is licensed under the Mulan PSL v2.
5  * You can use this software according to the terms and conditions of the Mulan PSL v2.
6  * You may obtain a copy of Mulan PSL v2 at:
7  *
8  *     http://license.coscl.org.cn/MulanPSL2
9  *
10  * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
11  * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
12  * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
13  * See the Mulan PSL v2 for more details.
14  */
15 
16 #include <stdlib.h>
17 #include <pthread.h>
18 #include <unistd.h>
19 #include "logger.h"
20 #include "process.h"
21 #include "hlt_type.h"
22 #include "control_channel.h"
23 #include "channel_res.h"
24 #include "handle_cmd.h"
25 #include "securec.h"
26 
27 #define SUCCESS 0
28 #define ERROR (-1)
29 
30 uint64_t g_cmdIndex = 0;
31 pthread_mutex_t g_cmdMutex = PTHREAD_MUTEX_INITIALIZER;
32 
33 #define ASSERT_RETURN(condition, log) \
34     do {                              \
35         if (!(condition)) {           \
36             LOG_ERROR(log);           \
37             return ERROR;             \
38         }                             \
39     } while (0)
40 
InitCmdIndex(void)41 void InitCmdIndex(void)
42 {
43     g_cmdIndex = 0;
44 }
45 
WaitResult(CmdData * expectCmdData,int cmdIndex,const char * funcName)46 static int WaitResult(CmdData *expectCmdData, int cmdIndex, const char *funcName)
47 {
48     int ret;
49     ret = sprintf_s(expectCmdData->id, sizeof(expectCmdData->id), "%d", cmdIndex);
50     ASSERT_RETURN(ret > 0, "sprintf_s Error");
51     ret = sprintf_s(expectCmdData->funcId, sizeof(expectCmdData->funcId), "%s", funcName);
52     ASSERT_RETURN(ret > 0, "sprintf_s Error");
53 
54     // Receive the result.
55     ret = WaitResultFromPeer(expectCmdData);
56     ASSERT_RETURN(ret == SUCCESS, "WaitResultFromPeer Error");
57     return SUCCESS;
58 }
59 
HLT_RpcProviderTlsNewCtx(HLT_Process * peerProcess,TLS_VERSION tlsVersion,bool isClient,char * providerPath,char (* providerNames)[MAX_PROVIDER_NAME_LEN],int32_t * providerLibFmts,int32_t providerCnt,char * attrName)60 int HLT_RpcProviderTlsNewCtx(HLT_Process *peerProcess, TLS_VERSION tlsVersion, bool isClient, char *providerPath,
61     char (*providerNames)[MAX_PROVIDER_NAME_LEN], int32_t *providerLibFmts, int32_t providerCnt, char *attrName)
62 {
63     int ret;
64     uint64_t cmdIndex;
65     Process *srcProcess = NULL;
66     CmdData expectCmdData = {0};
67     ControlChannelBuf dataBuf;
68     uint32_t offset = 0;
69 
70     ASSERT_RETURN(peerProcess->remoteFlag == 1, "Only Remote Process Support Call HLT_RpcTlsNewCtx");
71 
72     srcProcess = GetProcess();
73     pthread_mutex_lock(&g_cmdMutex);
74     ret = sprintf_s(dataBuf.data, sizeof(dataBuf.data),
75         "%llu|%s|%d|%d|",
76         g_cmdIndex, __FUNCTION__, tlsVersion, isClient);
77     ASSERT_RETURN(ret > 0, "sprintf_s Error");
78     offset += ret;
79     if (providerCnt == 0 || providerNames == NULL || providerLibFmts == NULL) {
80         ret = sprintf_s(dataBuf.data + offset, sizeof(dataBuf.data) - offset, "|");
81         ASSERT_RETURN(ret > 0, "sprintf_s Error");
82         offset += ret;
83     }
84 
85     for (int i = 0; i < providerCnt - 1; i++) {
86         ret = sprintf_s(dataBuf.data + offset, sizeof(dataBuf.data) - offset, "%s,%d:", providerNames[i],
87             providerLibFmts[i]);
88         ASSERT_RETURN(ret > 0, "sprintf_s Error");
89         offset += ret;
90     }
91     if (providerCnt >= 1) {
92         ret = sprintf_s(dataBuf.data + offset, sizeof(dataBuf.data) - offset, "%s,%d|", providerNames[providerCnt - 1],
93             providerLibFmts[providerCnt - 1]);
94         ASSERT_RETURN(ret > 0, "sprintf_s Error");
95         offset += ret;
96     }
97     if (attrName != NULL && strlen(attrName) > 0) {
98         ret = sprintf_s(dataBuf.data + offset, sizeof(dataBuf.data) - offset, "%s|", attrName);
99     } else {
100         ret = sprintf_s(dataBuf.data + offset, sizeof(dataBuf.data) - offset, "|");
101     }
102     ASSERT_RETURN(ret > 0, "sprintf_s Error");
103     offset += ret;
104     if (providerPath != NULL && strlen(providerPath) > 0) {
105         ret = sprintf_s(dataBuf.data + offset, sizeof(dataBuf.data) - offset, "%s|", providerPath);
106     } else {
107         ret = sprintf_s(dataBuf.data + offset, sizeof(dataBuf.data) - offset, "|");
108     }
109     ASSERT_RETURN(ret > 0, "sprintf_s Error");
110     offset += ret;
111 
112     dataBuf.dataLen = strlen(dataBuf.data);
113     cmdIndex = g_cmdIndex;
114     g_cmdIndex++;
115     pthread_mutex_unlock(&g_cmdMutex);
116 
117     ASSERT_RETURN(ret > 0, "sprintf_s Error");
118 
119     ret = ControlChannelWrite(srcProcess->controlChannelFd, peerProcess->srcDomainPath, &dataBuf);
120     ASSERT_RETURN(ret == SUCCESS, "ControlChannelWrite Error");
121 
122     ret = WaitResult(&expectCmdData, cmdIndex, __FUNCTION__);
123     ASSERT_RETURN(ret == SUCCESS, "WaitResult Error");
124 
125     return atoi(expectCmdData.paras[0]);
126 }
127 
HLT_RpcTlsNewCtx(HLT_Process * peerProcess,TLS_VERSION tlsVersion,bool isClient)128 int HLT_RpcTlsNewCtx(HLT_Process *peerProcess, TLS_VERSION tlsVersion, bool isClient)
129 {
130     int ret;
131     uint64_t cmdIndex;
132     Process *srcProcess = NULL;
133     CmdData expectCmdData = {0};
134     ControlChannelBuf dataBuf;
135 
136     ASSERT_RETURN(peerProcess->remoteFlag == 1, "Only Remote Process Support Call HLT_RpcTlsNewCtx");
137 
138     srcProcess = GetProcess();
139     pthread_mutex_lock(&g_cmdMutex);
140     ret = sprintf_s(dataBuf.data, sizeof(dataBuf.data), "%llu|%s|%d|%d", g_cmdIndex, __FUNCTION__, tlsVersion, isClient);
141     dataBuf.dataLen = strlen(dataBuf.data);
142     cmdIndex = g_cmdIndex;
143     g_cmdIndex++;
144     pthread_mutex_unlock(&g_cmdMutex);
145 
146     ASSERT_RETURN(ret > 0, "sprintf_s Error");
147 
148     ret = ControlChannelWrite(srcProcess->controlChannelFd, peerProcess->srcDomainPath, &dataBuf);
149     ASSERT_RETURN(ret == SUCCESS, "ControlChannelWrite Error");
150 
151     ret = WaitResult(&expectCmdData, cmdIndex, __FUNCTION__);
152     ASSERT_RETURN(ret == SUCCESS, "WaitResult Error");
153 
154     return atoi(expectCmdData.paras[0]);
155 }
156 
HLT_RpcTlsSetCtx(HLT_Process * peerProcess,int ctxId,HLT_Ctx_Config * config)157 int HLT_RpcTlsSetCtx(HLT_Process *peerProcess, int ctxId, HLT_Ctx_Config *config)
158 {
159     int ret;
160     uint64_t cmdIndex;
161     Process *srcProcess = NULL;
162     CmdData expectCmdData = {0};
163     ControlChannelBuf dataBuf;
164 
165     ASSERT_RETURN(peerProcess->remoteFlag ==  1, "Only Remote Process Support Call HLT_RpcTlsSetCtx");
166 
167     srcProcess = GetProcess();
168     pthread_mutex_lock(&g_cmdMutex);
169     ret = sprintf_s(dataBuf.data, sizeof(dataBuf.data),
170     "%llu|%s|%d|"
171     "%u|%u|%s|%s|"
172     "%s|%s|%s|%d|"
173     "%d|%d|%d|%s|"
174     "%s|%s|%s|%s|"
175     "%s|%s|%s|%d|"
176     "%d|%s|%d|%s|"
177     "%s|%s|%s|%s|"
178     "%s|%d|%d|"
179     "%u|%d|%d|"
180     "%d|%d|%d|"
181     "%d|%u|%d|%d|"
182     "%u|",
183     g_cmdIndex, __FUNCTION__, ctxId,
184     config->minVersion, config->maxVersion, config->cipherSuites, config->tls13CipherSuites,
185     config->pointFormats, config->groups, config->signAlgorithms, config->isSupportRenegotiation,
186     config->isSupportClientVerify, config->isSupportNoClientCert, config->isSupportExtendMasterSecret, config->eeCert,
187     config->privKey, config->password, config->caCert, config->chainCert,
188     config->signCert, config->signPrivKey, config->psk, config->isSupportSessionTicket,
189     config->setSessionCache, config->ticketKeyCb, config->isFlightTransmitEnable, config->serverName,
190     config->sniDealCb, config->sniArg, config->alpnList, config->alpnSelectCb,
191     config->alpnUserData, config->securitylevel, config->isSupportDhAuto,
192     config->keyExchMode, config->SupportType, config->isSupportPostHandshakeAuth,
193     config->readAhead, config->needCheckKeyUsage, config->isSupportVerifyNone,
194     config->allowClientRenegotiate, config->emptyRecordsNum, config->allowLegacyRenegotiate, config->isEncryptThenMac,
195     config->modeSupport);
196     dataBuf.dataLen = strlen(dataBuf.data);
197     cmdIndex = g_cmdIndex;
198     g_cmdIndex++;
199     pthread_mutex_unlock(&g_cmdMutex);
200 
201     ASSERT_RETURN(ret > 0, "sprintf_s Error");
202 
203     ret = ControlChannelWrite(srcProcess->controlChannelFd,  peerProcess->srcDomainPath, &dataBuf);
204     ASSERT_RETURN(ret == SUCCESS, "ControlChannelWrite Error");
205 
206     // Wait to receive the result.
207     ret = WaitResult(&expectCmdData, cmdIndex, __FUNCTION__);
208     ASSERT_RETURN(ret == SUCCESS, "WaitResult Error");
209     return atoi(expectCmdData.paras[0]);
210 }
211 
HLT_RpcTlsNewSsl(HLT_Process * peerProcess,int ctxId)212 int HLT_RpcTlsNewSsl(HLT_Process *peerProcess, int ctxId)
213 {
214     int ret;
215     uint64_t cmdIndex;
216     CmdData expectCmdData = {0};
217     Process *srcProcess = NULL;
218     ControlChannelBuf dataBuf;
219 
220     ASSERT_RETURN(peerProcess->remoteFlag ==  1, "Only Remote Process Support Call HLT_RpcTlsNewSsl");
221 
222     // Constructing Commands
223     srcProcess = GetProcess();
224     pthread_mutex_lock(&g_cmdMutex);
225     ret = sprintf_s(dataBuf.data, sizeof(dataBuf.data), "%llu|%s|%d", g_cmdIndex, __FUNCTION__, ctxId);
226     dataBuf.dataLen = strlen(dataBuf.data);
227     cmdIndex = g_cmdIndex;
228     g_cmdIndex++;
229     pthread_mutex_unlock(&g_cmdMutex);
230 
231     ASSERT_RETURN(ret > 0, "sprintf_s Error");
232 
233     ret = ControlChannelWrite(srcProcess->controlChannelFd,  peerProcess->srcDomainPath, &dataBuf);
234     ASSERT_RETURN(ret == SUCCESS, "ControlChannelWrite Error");
235 
236     // Wait to receive the result.
237     ret = WaitResult(&expectCmdData, cmdIndex, __FUNCTION__);
238     ASSERT_RETURN(ret == SUCCESS, "WaitResult Error");
239     return atoi(expectCmdData.paras[0]);
240 }
241 
HLT_RpcTlsSetSsl(HLT_Process * peerProcess,int sslId,HLT_Ssl_Config * config)242 int HLT_RpcTlsSetSsl(HLT_Process *peerProcess, int sslId, HLT_Ssl_Config *config)
243 {
244     int ret;
245     uint64_t cmdIndex;
246     Process *srcProcess = NULL;
247     CmdData expectCmdData = {0};
248     ControlChannelBuf dataBuf;
249 
250     ASSERT_RETURN(peerProcess->remoteFlag ==  1, "Only Remote Process Support Call HLT_RpcTlsSetSsl");
251 
252     srcProcess = GetProcess();
253     pthread_mutex_lock(&g_cmdMutex);
254     ret = sprintf_s(dataBuf.data, sizeof(dataBuf.data), "%llu|%s|%d|%d|%d|%d",
255                     g_cmdIndex, __FUNCTION__, sslId, config->sockFd, config->connType, config->connPort);
256     dataBuf.dataLen = strlen(dataBuf.data);
257     cmdIndex = g_cmdIndex;
258     g_cmdIndex++;
259     pthread_mutex_unlock(&g_cmdMutex);
260 
261     ASSERT_RETURN(ret > 0, "sprintf_s Error");
262 
263     ret = ControlChannelWrite(srcProcess->controlChannelFd,  peerProcess->srcDomainPath, &dataBuf);
264     ASSERT_RETURN(ret == SUCCESS, "ControlChannelWrite Error");
265 
266     // Wait to receive the result.
267     ret = WaitResult(&expectCmdData, cmdIndex, __FUNCTION__);
268     ASSERT_RETURN(ret == SUCCESS, "WaitResult Error");
269     return atoi(expectCmdData.paras[0]);
270 }
271 
HLT_RpcTlsListen(HLT_Process * peerProcess,int sslId)272 int HLT_RpcTlsListen(HLT_Process *peerProcess, int sslId)
273 {
274     int ret;
275     uint64_t acceptId;
276     Process *srcProcess = NULL;
277     ControlChannelBuf dataBuf;
278     srcProcess = GetProcess();
279 
280     ASSERT_RETURN(peerProcess->remoteFlag == 1, "Only Remote Process Support Call HLT_RpcTlsListen");
281 
282     pthread_mutex_lock(&g_cmdMutex);
283     ret = sprintf_s(dataBuf.data, sizeof(dataBuf.data), "%llu|%s|%d", g_cmdIndex, __FUNCTION__, sslId);
284     dataBuf.dataLen = strlen(dataBuf.data);
285     acceptId = g_cmdIndex;
286     g_cmdIndex++;
287     pthread_mutex_unlock(&g_cmdMutex);
288 
289     ASSERT_RETURN(ret > 0, "sprintf_s Error");
290 
291     ret = ControlChannelWrite(srcProcess->controlChannelFd,  peerProcess->srcDomainPath, &dataBuf);
292     ASSERT_RETURN(ret == SUCCESS, "ControlChannelWrite Error");
293     return acceptId;
294 }
295 
HLT_RpcTlsAccept(HLT_Process * peerProcess,int sslId)296 int HLT_RpcTlsAccept(HLT_Process *peerProcess, int sslId)
297 {
298     int ret;
299     uint64_t acceptId;
300     Process *srcProcess = NULL;
301     ControlChannelBuf dataBuf;
302     srcProcess = GetProcess();
303 
304     ASSERT_RETURN(peerProcess->remoteFlag ==  1, "Only Remote Process Support Call HLT_RpcTlsAccept");
305 
306     pthread_mutex_lock(&g_cmdMutex);
307     ret = sprintf_s(dataBuf.data, sizeof(dataBuf.data), "%llu|%s|%d", g_cmdIndex, __FUNCTION__, sslId);
308     dataBuf.dataLen = strlen(dataBuf.data);
309     acceptId = g_cmdIndex;
310     g_cmdIndex++;
311     pthread_mutex_unlock(&g_cmdMutex);
312 
313     ASSERT_RETURN(ret > 0, "sprintf_s Error");
314 
315     ret = ControlChannelWrite(srcProcess->controlChannelFd,  peerProcess->srcDomainPath, &dataBuf);
316     ASSERT_RETURN(ret == SUCCESS, "ControlChannelWrite Error");
317     return acceptId;
318 }
319 
HLT_RpcGetTlsListenResult(int acceptId)320 int HLT_RpcGetTlsListenResult(int acceptId)
321 {
322     int ret;
323     CmdData expectCmdData = {0};
324     ret = WaitResult(&expectCmdData, acceptId, "HLT_RpcTlsListen");
325     ASSERT_RETURN(ret == SUCCESS, "WaitResult Error");
326     return (int)strtol(expectCmdData.paras[0], NULL, 10); // Convert to a decimal number
327 }
328 
HLT_RpcGetTlsAcceptResult(int acceptId)329 int HLT_RpcGetTlsAcceptResult(int acceptId)
330 {
331     int ret;
332     char *endPtr = NULL;
333     CmdData expectCmdData = {0};
334     ret = WaitResult(&expectCmdData, acceptId, "HLT_RpcTlsAccept");
335     ASSERT_RETURN(ret == SUCCESS, "WaitResult Error");
336     return (int)strtol(expectCmdData.paras[0], &endPtr, 0);
337 }
338 
HLT_RpcTlsConnect(HLT_Process * peerProcess,int sslId)339 int HLT_RpcTlsConnect(HLT_Process *peerProcess, int sslId)
340 {
341     int ret;
342     uint64_t cmdIndex;
343     Process *srcProcess = NULL;
344     CmdData expectCmdData = {0};
345     ControlChannelBuf dataBuf;
346 
347     ASSERT_RETURN(peerProcess->remoteFlag ==  1, "Only Remote Process Support Call HLT_RpcTlsConnect");
348 
349     srcProcess = GetProcess();
350     pthread_mutex_lock(&g_cmdMutex);
351     ret = sprintf_s(dataBuf.data, sizeof(dataBuf.data), "%llu|%s|%d", g_cmdIndex, __FUNCTION__, sslId);
352     dataBuf.dataLen = strlen(dataBuf.data);
353     cmdIndex = g_cmdIndex;
354     g_cmdIndex++;
355     pthread_mutex_unlock(&g_cmdMutex);
356 
357     ASSERT_RETURN(ret > 0, "sprintf_s Error");
358 
359     ret = ControlChannelWrite(srcProcess->controlChannelFd,  peerProcess->srcDomainPath, &dataBuf);
360     ASSERT_RETURN(ret == SUCCESS, "ControlChannelWrite Error");
361 
362     // Waiting for the result returned by the peer
363     ret = WaitResult(&expectCmdData, cmdIndex, __FUNCTION__);
364     ASSERT_RETURN(ret == SUCCESS, "WaitResult Error");
365 
366     return atoi(expectCmdData.paras[0]);
367 }
368 
HLT_RpcTlsConnectUnBlock(HLT_Process * peerProcess,int sslId)369 int HLT_RpcTlsConnectUnBlock(HLT_Process *peerProcess, int sslId)
370 {
371     uint64_t cmdIndex;
372     Process *srcProcess = NULL;
373     ControlChannelBuf dataBuf;
374 
375     ASSERT_RETURN(peerProcess->remoteFlag == 1, "Only Remote Process Support Call HLT_RpcTlsConnect");
376 
377     srcProcess = GetProcess();
378     pthread_mutex_lock(&g_cmdMutex);
379     int ret = sprintf_s(dataBuf.data, sizeof(dataBuf.data), "%llu|%s|%d", g_cmdIndex, "HLT_RpcTlsConnect", sslId);
380     dataBuf.dataLen = strlen(dataBuf.data);
381     cmdIndex = g_cmdIndex;
382     g_cmdIndex++;
383     pthread_mutex_unlock(&g_cmdMutex);
384 
385     ASSERT_RETURN(ret > 0, "sprintf_s Error");
386 
387     ret = ControlChannelWrite(srcProcess->controlChannelFd, peerProcess->srcDomainPath, &dataBuf);
388     ASSERT_RETURN(ret == SUCCESS, "ControlChannelWrite Error");
389 
390     return cmdIndex;
391 }
392 
HLT_RpcGetTlsConnectResult(int cmdIndex)393 int HLT_RpcGetTlsConnectResult(int cmdIndex)
394 {
395     int ret;
396     CmdData expectCmdData = {0};
397     // Waiting for the result returned by the peer
398     ret = WaitResult(&expectCmdData, cmdIndex, "HLT_RpcTlsConnect");
399     ASSERT_RETURN(ret == SUCCESS, "WaitResult Error");
400 
401     return atoi(expectCmdData.paras[0]);
402 }
403 
HLT_RpcTlsRead(HLT_Process * peerProcess,int sslId,uint8_t * data,uint32_t bufSize,uint32_t * readLen)404 int HLT_RpcTlsRead(HLT_Process *peerProcess, int sslId, uint8_t *data, uint32_t bufSize, uint32_t *readLen)
405 {
406     int ret;
407     uint64_t cmdIndex;
408     Process *srcProcess = NULL;
409     CmdData expectCmdData = {0};
410     ControlChannelBuf dataBuf;
411 
412     ASSERT_RETURN(peerProcess->remoteFlag == 1, "Only Remote Process Support Call HLT_RpcTlsRead");
413 
414     srcProcess = GetProcess();
415     pthread_mutex_lock(&g_cmdMutex);
416     ret = sprintf_s(dataBuf.data, sizeof(dataBuf.data), "%llu|%s|%d|%u", g_cmdIndex, __FUNCTION__, sslId, bufSize);
417     dataBuf.dataLen = strlen(dataBuf.data);
418     cmdIndex = g_cmdIndex;
419     g_cmdIndex++;
420     pthread_mutex_unlock(&g_cmdMutex);
421 
422     ASSERT_RETURN(ret > 0, "sprintf_s Error");
423 
424     ret = ControlChannelWrite(srcProcess->controlChannelFd, peerProcess->srcDomainPath, &dataBuf);
425     ASSERT_RETURN(ret == SUCCESS, "ControlChannelWrite Error");
426 
427     // Waiting for the result returned by the peer
428     ret = WaitResult(&expectCmdData, cmdIndex, __FUNCTION__);
429     ASSERT_RETURN(ret == SUCCESS, "WaitResult Error");
430 
431     // Parsing result
432     ret = atoi(expectCmdData.paras[0]);
433     if (ret == SUCCESS) {
434         *readLen = atoi(expectCmdData.paras[1]);  // The first parameter indicates the read length.
435         memcpy_s(
436             data, bufSize, expectCmdData.paras[2], *readLen);  // The second parameter indicates the content to be read.
437     }
438 
439     return ret;
440 }
441 
HLT_RpcTlsReadUnBlock(HLT_Process * peerProcess,int sslId,uint8_t * data,uint32_t bufSize,uint32_t * readLen)442 int HLT_RpcTlsReadUnBlock(HLT_Process *peerProcess, int sslId, uint8_t *data, uint32_t bufSize, uint32_t *readLen)
443 {
444     (void)data;
445     (void)readLen;
446     int ret;
447     uint64_t cmdIndex;
448     Process *srcProcess = NULL;
449     ControlChannelBuf dataBuf;
450 
451     ASSERT_RETURN(peerProcess->remoteFlag == 1, "Only Remote Process Support Call HLT_RpcTlsRead");
452 
453     srcProcess = GetProcess();
454     pthread_mutex_lock(&g_cmdMutex);
455     ret = sprintf_s(dataBuf.data, sizeof(dataBuf.data), "%llu|%s|%d|%u", g_cmdIndex, "HLT_RpcTlsRead", sslId, bufSize);
456     dataBuf.dataLen = strlen(dataBuf.data);
457     cmdIndex = g_cmdIndex;
458     g_cmdIndex++;
459     pthread_mutex_unlock(&g_cmdMutex);
460 
461     ASSERT_RETURN(ret > 0, "sprintf_s Error");
462 
463     ret = ControlChannelWrite(srcProcess->controlChannelFd, peerProcess->srcDomainPath, &dataBuf);
464     ASSERT_RETURN(ret == SUCCESS, "ControlChannelWrite Error");
465 
466     return cmdIndex;
467 }
468 
HLT_RpcGetTlsReadResult(int cmdIndex,uint8_t * data,uint32_t bufSize,uint32_t * readLen)469 int HLT_RpcGetTlsReadResult(int cmdIndex, uint8_t *data, uint32_t bufSize, uint32_t *readLen)
470 {
471     int ret;
472     char *endPtr = NULL;
473     CmdData expectCmdData = {0};
474     ret = WaitResult(&expectCmdData, cmdIndex, "HLT_RpcTlsRead");
475     ASSERT_RETURN(ret == SUCCESS, "WaitResult Error");
476 
477     // Parsing result
478     ret = (int)strtol(expectCmdData.paras[0], &endPtr, 0);
479     if (ret == SUCCESS) {
480         *readLen = (int)strtol(expectCmdData.paras[1], &endPtr, 0); // The first parameter indicates the read length.
481         // The second parameter indicates the content to be read.
482         memcpy_s(data, bufSize, expectCmdData.paras[2], *readLen);
483     }
484     return ret;
485 }
486 
HLT_RpcTlsWrite(HLT_Process * peerProcess,int sslId,uint8_t * data,uint32_t bufSize)487 int HLT_RpcTlsWrite(HLT_Process *peerProcess, int sslId, uint8_t *data, uint32_t bufSize)
488 {
489     int ret;
490     uint64_t cmdIndex;
491     Process *srcProcess = NULL;
492     CmdData expectCmdData = {0};
493     ControlChannelBuf dataBuf;
494 
495     ASSERT_RETURN(peerProcess->remoteFlag == 1, "Only Remote Process Support Call HLT_RpcTlsWrite");
496 
497     srcProcess = GetProcess();
498     pthread_mutex_lock(&g_cmdMutex);
499     ret = sprintf_s(dataBuf.data, sizeof(dataBuf.data), "%llu|%s|%d|%u|%s",
500                     g_cmdIndex, __FUNCTION__, sslId, bufSize, data);
501     dataBuf.dataLen = strlen(dataBuf.data);
502     cmdIndex = g_cmdIndex;
503     g_cmdIndex++;
504     pthread_mutex_unlock(&g_cmdMutex);
505 
506     ASSERT_RETURN(ret > 0, "sprintf_s Error");
507 
508     ret = ControlChannelWrite(srcProcess->controlChannelFd, peerProcess->srcDomainPath, &dataBuf);
509     ASSERT_RETURN(ret == SUCCESS, "ControlChannelWrite Error");
510 
511     // Waiting for the result returned by the peer
512     ret = WaitResult(&expectCmdData, cmdIndex, __FUNCTION__);
513     ASSERT_RETURN(ret == SUCCESS, "WaitResult Error");
514     return atoi(expectCmdData.paras[0]);
515 }
516 
HLT_RpcTlsWriteUnBlock(HLT_Process * peerProcess,int sslId,uint8_t * data,uint32_t bufSize)517 int HLT_RpcTlsWriteUnBlock(HLT_Process *peerProcess, int sslId, uint8_t *data, uint32_t bufSize)
518 {
519     int ret;
520     uint64_t cmdIndex;
521     Process *srcProcess = NULL;
522     ControlChannelBuf dataBuf;
523 
524     ASSERT_RETURN(peerProcess->remoteFlag == 1, "Only Remote Process Support Call HLT_RpcTlsWrite");
525 
526     srcProcess = GetProcess();
527     pthread_mutex_lock(&g_cmdMutex);
528     ret = sprintf_s(dataBuf.data, sizeof(dataBuf.data), "%llu|%s|%d|%u|%s",
529                     g_cmdIndex, "HLT_RpcTlsWrite", sslId, bufSize, data);
530     dataBuf.dataLen = strlen(dataBuf.data);
531     cmdIndex = g_cmdIndex;
532     g_cmdIndex++;
533     pthread_mutex_unlock(&g_cmdMutex);
534 
535     ASSERT_RETURN(ret > 0, "sprintf_s Error");
536 
537     ret = ControlChannelWrite(srcProcess->controlChannelFd, peerProcess->srcDomainPath, &dataBuf);
538     ASSERT_RETURN(ret == SUCCESS, "ControlChannelWrite Error");
539 
540     // Do not wait for the result returned by the peer.
541     return cmdIndex;
542 }
543 
HLT_RpcGetTlsWriteResult(int cmdIndex)544 int HLT_RpcGetTlsWriteResult(int cmdIndex)
545 {
546     int ret;
547     CmdData expectCmdData = {0};
548 
549     ret = WaitResult(&expectCmdData, cmdIndex, "HLT_RpcTlsWrite");
550     ASSERT_RETURN(ret == SUCCESS, "WaitResult Error");
551     return (int)strtol(expectCmdData.paras[0], NULL, 10); // Convert to a decimal number
552 }
553 
HLT_RpcTlsRenegotiate(HLT_Process * peerProcess,int sslId)554 int HLT_RpcTlsRenegotiate(HLT_Process *peerProcess, int sslId)
555 {
556     int ret;
557     uint64_t cmdIndex;
558     char *endPtr = NULL;
559     Process *srcProcess = NULL;
560     ControlChannelBuf dataBuf;
561     CmdData expectCmdData = {0};
562     srcProcess = GetProcess();
563 
564     ASSERT_RETURN(peerProcess->remoteFlag == 1, "Only Remote Process Support Call HLT_RpcTlsRenegotiate");
565 
566     pthread_mutex_lock(&g_cmdMutex);
567     ret = sprintf_s(dataBuf.data, sizeof(dataBuf.data), "%llu|%s|%d", g_cmdIndex, __FUNCTION__, sslId);
568     dataBuf.dataLen = strlen(dataBuf.data);
569     cmdIndex = g_cmdIndex;
570     g_cmdIndex++;
571     pthread_mutex_unlock(&g_cmdMutex);
572 
573     ASSERT_RETURN(ret > 0, "sprintf_s Error");
574 
575     ret = ControlChannelWrite(srcProcess->controlChannelFd, peerProcess->srcDomainPath, &dataBuf);
576     ASSERT_RETURN(ret == SUCCESS, "ControlChannelWrite Error");
577     // Waiting for the result
578     ret = WaitResult(&expectCmdData, cmdIndex, __FUNCTION__);
579     ASSERT_RETURN(ret == SUCCESS, "WaitResult Error");
580     return (int)strtol(expectCmdData.paras[0], &endPtr, 0);
581 }
582 
583 
HLT_RpcTlsVerifyClientPostHandshake(HLT_Process * peerProcess,int sslId)584 int HLT_RpcTlsVerifyClientPostHandshake(HLT_Process *peerProcess, int sslId)
585 {
586     int ret;
587     uint64_t cmdIndex;
588     char *endPtr = NULL;
589     Process *srcProcess = NULL;
590     ControlChannelBuf dataBuf;
591     CmdData expectCmdData = {0};
592     srcProcess = GetProcess();
593 
594     ASSERT_RETURN(peerProcess->remoteFlag ==  1, "Only Remote Process Support Call RpcTlsVerifyClientPostHandshake");
595 
596     pthread_mutex_lock(&g_cmdMutex);
597     ret = sprintf_s(dataBuf.data, sizeof(dataBuf.data), "%llu|%s|%d", g_cmdIndex, __FUNCTION__, sslId);
598     dataBuf.dataLen = strlen(dataBuf.data);
599     cmdIndex = g_cmdIndex;
600     g_cmdIndex++;
601     pthread_mutex_unlock(&g_cmdMutex);
602 
603     ASSERT_RETURN(ret > 0, "sprintf_s Error");
604 
605     ret = ControlChannelWrite(srcProcess->controlChannelFd,  peerProcess->srcDomainPath, &dataBuf);
606     ASSERT_RETURN(ret == SUCCESS, "ControlChannelWrite Error");
607     // Waiting for the result
608     ret = WaitResult(&expectCmdData, cmdIndex, __FUNCTION__);
609     ASSERT_RETURN(ret == SUCCESS, "WaitResult Error");
610     return (int)strtol(expectCmdData.paras[0], &endPtr, 0);
611 }
612 
HLT_RpcDataChannelConnect(HLT_Process * peerProcess,DataChannelParam * channelParam)613 int HLT_RpcDataChannelConnect(HLT_Process *peerProcess, DataChannelParam *channelParam)
614 {
615     int ret;
616     uint64_t cmdIndex;
617     Process *srcProcess = NULL;
618     CmdData expectCmdData = {0};
619     ControlChannelBuf dataBuf;
620 
621     ASSERT_RETURN(peerProcess->remoteFlag == 1, "Only Remote Process Support Call HLT_RpcDataChannelConnect");
622 
623     srcProcess = GetProcess();
624     pthread_mutex_lock(&g_cmdMutex);
625     ret = sprintf_s(dataBuf.data, sizeof(dataBuf.data), "%llu|%s|%d|%d|%d", g_cmdIndex, __FUNCTION__,
626                     channelParam->type, channelParam->port, channelParam->isBlock);
627     dataBuf.dataLen = strlen(dataBuf.data);
628     cmdIndex = g_cmdIndex;
629     g_cmdIndex++;
630     pthread_mutex_unlock(&g_cmdMutex);
631 
632     ASSERT_RETURN(ret > 0, "sprintf_s Error");
633 
634     ret = ControlChannelWrite(srcProcess->controlChannelFd, peerProcess->srcDomainPath, &dataBuf);
635     ASSERT_RETURN(ret == SUCCESS, "ControlChannelWrite Error");
636 
637     // Waiting for the result returned by the peer
638     ret = WaitResult(&expectCmdData, cmdIndex, __FUNCTION__);
639     ASSERT_RETURN(ret == SUCCESS, "WaitResult Error");
640 
641     return atoi(expectCmdData.paras[0]);
642 }
643 
HLT_RpcDataChannelBind(HLT_Process * peerProcess,DataChannelParam * channelParam)644 int HLT_RpcDataChannelBind(HLT_Process *peerProcess, DataChannelParam *channelParam)
645 {
646     int ret;
647     uint64_t bindId;
648     Process *srcProcess = NULL;
649     CmdData expectCmdData = {0};
650     ControlChannelBuf dataBuf;
651     ASSERT_RETURN(peerProcess->remoteFlag ==  1, "Only Remote Process Support Call HLT_RpcDataChannelBind");
652     srcProcess = GetProcess();
653     pthread_mutex_lock(&g_cmdMutex);
654     ret = sprintf_s(dataBuf.data, sizeof(dataBuf.data), "%llu|%s|%d|%d|%d|%d", g_cmdIndex, __FUNCTION__,
655                     channelParam->type, channelParam->port, channelParam->isBlock, channelParam->bindFd);
656     dataBuf.dataLen = strlen(dataBuf.data);
657     bindId = g_cmdIndex;
658     g_cmdIndex++;
659     pthread_mutex_unlock(&g_cmdMutex);
660     ASSERT_RETURN(ret > 0, "sprintf_s Error");
661     ret = ControlChannelWrite(srcProcess->controlChannelFd,  peerProcess->srcDomainPath, &dataBuf);
662     ASSERT_RETURN(ret == SUCCESS, "ControlChannelWrite Error");
663 
664     // Waiting for the result returned by the peer
665     ret = WaitResult(&expectCmdData, bindId, __FUNCTION__);
666     ASSERT_RETURN(ret == SUCCESS, "WaitResult Error");
667     channelParam->port = atoi(expectCmdData.paras[1]);
668     return atoi(expectCmdData.paras[0]);
669 }
670 
HLT_RpcDataChannelAccept(HLT_Process * peerProcess,DataChannelParam * channelParam)671 int HLT_RpcDataChannelAccept(HLT_Process *peerProcess, DataChannelParam *channelParam)
672 {
673     int ret;
674     uint64_t acceptId;
675     Process *srcProcess = NULL;
676     ControlChannelBuf dataBuf;
677 
678     ASSERT_RETURN(peerProcess->remoteFlag == 1, "Only Remote Process Support Call HLT_RpcDataChannelAccept");
679 
680     srcProcess = GetProcess();
681     pthread_mutex_lock(&g_cmdMutex);
682     ret = sprintf_s(dataBuf.data, sizeof(dataBuf.data), "%llu|%s|%d|%d|%d|%d", g_cmdIndex, __FUNCTION__,
683                     channelParam->type, channelParam->port, channelParam->isBlock, channelParam->bindFd);
684     dataBuf.dataLen = strlen(dataBuf.data);
685     acceptId = g_cmdIndex;
686     g_cmdIndex++;
687     pthread_mutex_unlock(&g_cmdMutex);
688 
689     ASSERT_RETURN(ret > 0, "sprintf_s Error");
690 
691     ret = ControlChannelWrite(srcProcess->controlChannelFd, peerProcess->srcDomainPath, &dataBuf);
692     ASSERT_RETURN(ret == SUCCESS, "ControlChannelWrite Error");
693     return acceptId;
694 }
695 
HLT_RpcGetAcceptFd(int acceptId)696 int HLT_RpcGetAcceptFd(int acceptId)
697 {
698     int ret;
699     CmdData expectCmdData = {0};
700 
701     ret = WaitResult(&expectCmdData, acceptId, "HLT_RpcDataChannelAccept");
702     ASSERT_RETURN(ret == SUCCESS, "WaitResult Error");
703 
704     return atoi(expectCmdData.paras[0]);
705 }
706 
HLT_RpcTlsRegCallback(HLT_Process * peerProcess,TlsCallbackType type)707 int HLT_RpcTlsRegCallback(HLT_Process *peerProcess, TlsCallbackType type)
708 {
709     int ret;
710     uint64_t cmdIndex;
711     Process *srcProcess;
712     CmdData expectCmdData = {0};
713     ControlChannelBuf dataBuf;
714 
715     ASSERT_RETURN(peerProcess->remoteFlag == 1, "Only Remote Process Support Call HLT_RpcTlsRegCallback");
716 
717     srcProcess = GetProcess();
718     pthread_mutex_lock(&g_cmdMutex);
719     ret = sprintf_s(dataBuf.data, sizeof(dataBuf.data), "%llu|%s|%d", g_cmdIndex, __FUNCTION__, type);
720     dataBuf.dataLen = strlen(dataBuf.data);
721     cmdIndex = g_cmdIndex;
722     g_cmdIndex++;
723     pthread_mutex_unlock(&g_cmdMutex);
724 
725     ASSERT_RETURN(ret > 0, "sprintf_s Error");
726 
727     ret = ControlChannelWrite(srcProcess->controlChannelFd, peerProcess->srcDomainPath, &dataBuf);
728     ASSERT_RETURN(ret == SUCCESS, "ControlChannelWrite Error");
729 
730     // Waiting for the result
731     ret = WaitResult(&expectCmdData, cmdIndex, __FUNCTION__);
732     ASSERT_RETURN(ret == SUCCESS, "WaitResult Error");
733     return atoi(expectCmdData.paras[0]);
734 }
735 
HLT_RpcProcessExit(HLT_Process * peerProcess)736 int HLT_RpcProcessExit(HLT_Process *peerProcess)
737 {
738     int ret;
739     uint64_t cmdIndex;
740     Process *srcProcess;
741     CmdData expectCmdData = {0};
742     ControlChannelBuf dataBuf;
743     srcProcess = GetProcess();
744 
745     ASSERT_RETURN(peerProcess->remoteFlag == 1, "Only Remote Process Support Call HLT_RpcProcessExit");
746 
747     pthread_mutex_lock(&g_cmdMutex);
748     ret = sprintf_s(dataBuf.data, sizeof(dataBuf.data), "%llu|%s|%d", g_cmdIndex, __FUNCTION__, peerProcess->connFd);
749     dataBuf.dataLen = strlen(dataBuf.data);
750     cmdIndex = g_cmdIndex;
751     g_cmdIndex++;
752     pthread_mutex_unlock(&g_cmdMutex);
753 
754     ASSERT_RETURN(ret > 0, "sprintf_s Error");
755 
756     ret = ControlChannelWrite(srcProcess->controlChannelFd, peerProcess->srcDomainPath, &dataBuf);
757     ASSERT_RETURN(ret == SUCCESS, "ControlChannelWrite Error");
758 
759     // Waiting for the result
760     ret = WaitResult(&expectCmdData, cmdIndex, __FUNCTION__);
761     ASSERT_RETURN(ret == SUCCESS, "WaitResult Error");
762     return SUCCESS;
763 }
764 
HLT_RpcTlsGetStatus(HLT_Process * peerProcess,int sslId)765 int HLT_RpcTlsGetStatus(HLT_Process *peerProcess, int sslId)
766 {
767     ASSERT_RETURN(peerProcess != NULL, "HLT_RpcTlsGetStatus Parameter Error");
768     ASSERT_RETURN(peerProcess->remoteFlag == 1, "Only Remote Process Support Call HLT_RpcTlsGetStatus");
769 
770     int ret;
771     uint64_t cmdIndex;
772     char *endPtr = NULL;
773     Process *srcProcess;
774     CmdData expectCmdData = {0};
775     ControlChannelBuf dataBuf;
776     srcProcess = GetProcess();
777 
778     pthread_mutex_lock(&g_cmdMutex);
779     ret = sprintf_s(dataBuf.data, sizeof(dataBuf.data), "%llu|%s|%d", g_cmdIndex, __FUNCTION__, sslId);
780     dataBuf.dataLen = strlen(dataBuf.data);
781     cmdIndex = g_cmdIndex;
782     g_cmdIndex++;
783     pthread_mutex_unlock(&g_cmdMutex);
784 
785     ASSERT_RETURN(ret > 0, "sprintf_s Error");
786 
787     ret = ControlChannelWrite(srcProcess->controlChannelFd, peerProcess->srcDomainPath, &dataBuf);
788     ASSERT_RETURN(ret == SUCCESS, "ControlChannelWrite Error");
789 
790     // Waiting for the result
791     ret = WaitResult(&expectCmdData, cmdIndex, __FUNCTION__);
792     ASSERT_RETURN(ret == SUCCESS, "WaitResult Error");
793     return (int)strtol(expectCmdData.paras[0], &endPtr, 0);
794 }
795 
HLT_RpcTlsGetAlertFlag(HLT_Process * peerProcess,int sslId)796 int HLT_RpcTlsGetAlertFlag(HLT_Process *peerProcess, int sslId)
797 {
798     ASSERT_RETURN(peerProcess != NULL, "HLT_RpcTlsGetAlertFlag Parameter Error");
799     ASSERT_RETURN(peerProcess->remoteFlag == 1, "Only Remote Process Support Call HLT_RpcProcessExit");
800 
801     int ret;
802     uint64_t cmdIndex;
803     char *endPtr = NULL;
804     Process *srcProcess;
805     CmdData expectCmdData = {0};
806     ControlChannelBuf dataBuf;
807     srcProcess = GetProcess();
808 
809     pthread_mutex_lock(&g_cmdMutex);
810     ret = sprintf_s(dataBuf.data, sizeof(dataBuf.data), "%llu|%s|%d", g_cmdIndex, __FUNCTION__, sslId);
811     dataBuf.dataLen = strlen(dataBuf.data);
812     cmdIndex = g_cmdIndex;
813     g_cmdIndex++;
814     pthread_mutex_unlock(&g_cmdMutex);
815 
816     ASSERT_RETURN(ret > 0, "sprintf_s Error");
817 
818     ret = ControlChannelWrite(srcProcess->controlChannelFd, peerProcess->srcDomainPath, &dataBuf);
819     ASSERT_RETURN(ret == SUCCESS, "ControlChannelWrite Error");
820 
821     // Waiting for the result
822     ret = WaitResult(&expectCmdData, cmdIndex, __FUNCTION__);
823     ASSERT_RETURN(ret == SUCCESS, "WaitResult Error");
824     return (int)strtol(expectCmdData.paras[0], &endPtr, 0);
825 }
826 
HLT_RpcTlsGetAlertLevel(HLT_Process * peerProcess,int sslId)827 int HLT_RpcTlsGetAlertLevel(HLT_Process *peerProcess, int sslId)
828 {
829     ASSERT_RETURN(peerProcess != NULL, "HLT_RpcTlsGetAlertLevel Parameter Error");
830     ASSERT_RETURN(peerProcess->remoteFlag == 1, "Only Remote Process Support Call HLT_RpcTlsGetAlertLevel");
831 
832     int ret;
833     uint64_t cmdIndex;
834     char *endPtr = NULL;
835     Process *srcProcess;
836     CmdData expectCmdData = {0};
837     ControlChannelBuf dataBuf;
838     srcProcess = GetProcess();
839 
840     pthread_mutex_lock(&g_cmdMutex);
841     ret = sprintf_s(dataBuf.data, sizeof(dataBuf.data), "%llu|%s|%d", g_cmdIndex, __FUNCTION__, sslId);
842     dataBuf.dataLen = strlen(dataBuf.data);
843     cmdIndex = g_cmdIndex;
844     g_cmdIndex++;
845     pthread_mutex_unlock(&g_cmdMutex);
846 
847     ASSERT_RETURN(ret > 0, "sprintf_s Error");
848 
849     ret = ControlChannelWrite(srcProcess->controlChannelFd, peerProcess->srcDomainPath, &dataBuf);
850     ASSERT_RETURN(ret == SUCCESS, "ControlChannelWrite Error");
851 
852     // Waiting for the result
853     ret = WaitResult(&expectCmdData, cmdIndex, __FUNCTION__);
854     ASSERT_RETURN(ret == SUCCESS, "WaitResult Error");
855     return (int)strtol(expectCmdData.paras[0], &endPtr, 0);
856 }
857 
HLT_RpcTlsGetAlertDescription(HLT_Process * peerProcess,int sslId)858 int HLT_RpcTlsGetAlertDescription(HLT_Process *peerProcess, int sslId)
859 {
860     ASSERT_RETURN(peerProcess != NULL, "HLT_RpcTlsGetAlertDescription Parameter Error");
861     ASSERT_RETURN(peerProcess->remoteFlag == 1, "Only Remote Process Support Call HLT_RpcTlsGetAlertDescription");
862 
863     int ret;
864     uint64_t cmdIndex;
865     char *endPtr = NULL;
866     Process *srcProcess;
867     CmdData expectCmdData = {0};
868     ControlChannelBuf dataBuf;
869     srcProcess = GetProcess();
870 
871     pthread_mutex_lock(&g_cmdMutex);
872     ret = sprintf_s(dataBuf.data, sizeof(dataBuf.data), "%llu|%s|%d", g_cmdIndex, __FUNCTION__, sslId);
873     dataBuf.dataLen = strlen(dataBuf.data);
874     cmdIndex = g_cmdIndex;
875     g_cmdIndex++;
876     pthread_mutex_unlock(&g_cmdMutex);
877 
878     ASSERT_RETURN(ret > 0, "sprintf_s Error");
879 
880     ret = ControlChannelWrite(srcProcess->controlChannelFd, peerProcess->srcDomainPath, &dataBuf);
881     ASSERT_RETURN(ret == SUCCESS, "ControlChannelWrite Error");
882 
883     // Waiting for the result
884     ret = WaitResult(&expectCmdData, cmdIndex, __FUNCTION__);
885     ASSERT_RETURN(ret == SUCCESS, "WaitResult Error");
886     return (int)strtol(expectCmdData.paras[0], &endPtr, 0);
887 }
888 
HLT_RpcTlsClose(HLT_Process * peerProcess,int sslId)889 int HLT_RpcTlsClose(HLT_Process *peerProcess, int sslId)
890 {
891     int ret;
892     uint64_t cmdIndex;
893     char *endPtr = NULL;
894     Process *srcProcess = NULL;
895     ControlChannelBuf dataBuf;
896     CmdData expectCmdData = {0};
897     srcProcess = GetProcess();
898 
899     ASSERT_RETURN(peerProcess->remoteFlag == 1, "Only Remote Process Support Call HLT_RpcTlsClose");
900 
901     pthread_mutex_lock(&g_cmdMutex);
902     ret = sprintf_s(dataBuf.data, sizeof(dataBuf.data), "%llu|%s|%d", g_cmdIndex, __FUNCTION__, sslId);
903     dataBuf.dataLen = strlen(dataBuf.data);
904     cmdIndex = g_cmdIndex;
905     g_cmdIndex++;
906     pthread_mutex_unlock(&g_cmdMutex);
907 
908     ASSERT_RETURN(ret > 0, "sprintf_s Error");
909 
910     ret = ControlChannelWrite(srcProcess->controlChannelFd, peerProcess->srcDomainPath, &dataBuf);
911     ASSERT_RETURN(ret == SUCCESS, "ControlChannelWrite Error");
912     // Waiting for the result
913     ret = WaitResult(&expectCmdData, cmdIndex, __FUNCTION__);
914     ASSERT_RETURN(ret == SUCCESS, "WaitResult Error");
915     return (int)strtol(expectCmdData.paras[0], &endPtr, 0);
916 }
917 
HLT_RpcFreeResFormSsl(HLT_Process * peerProcess,int sslId)918 int HLT_RpcFreeResFormSsl(HLT_Process *peerProcess, int sslId)
919 {
920     int ret;
921     uint64_t cmdIndex;
922     char *endPtr = NULL;
923     Process *srcProcess = NULL;
924     ControlChannelBuf dataBuf;
925     CmdData expectCmdData = {0};
926     srcProcess = GetProcess();
927 
928     ASSERT_RETURN(peerProcess->remoteFlag == 1, "Only Remote Process Support Call HLT_RpcFreeResFormSsl");
929 
930     pthread_mutex_lock(&g_cmdMutex);
931     ret = sprintf_s(dataBuf.data, sizeof(dataBuf.data), "%llu|%s|%d", g_cmdIndex, __FUNCTION__, sslId);
932     dataBuf.dataLen = strlen(dataBuf.data);
933     cmdIndex = g_cmdIndex;
934     g_cmdIndex++;
935     pthread_mutex_unlock(&g_cmdMutex);
936 
937     ASSERT_RETURN(ret > 0, "sprintf_s Error");
938 
939     ret = ControlChannelWrite(srcProcess->controlChannelFd, peerProcess->srcDomainPath, &dataBuf);
940     ASSERT_RETURN(ret == SUCCESS, "ControlChannelWrite Error");
941     // Waiting for the result
942     ret = WaitResult(&expectCmdData, cmdIndex, __FUNCTION__);
943     ASSERT_RETURN(ret == SUCCESS, "WaitResult Error");
944     return (int)strtol(expectCmdData.paras[0], &endPtr, 0);
945 }
946 
HLT_RpcSctpClose(HLT_Process * peerProcess,int fd)947 int HLT_RpcSctpClose(HLT_Process *peerProcess, int fd)
948 {
949     int ret;
950     uint64_t cmdIndex;
951     char *endPtr = NULL;
952     Process *srcProcess = NULL;
953     ControlChannelBuf dataBuf;
954     CmdData expectCmdData = {0};
955     srcProcess = GetProcess();
956 
957     ASSERT_RETURN(peerProcess->remoteFlag == 1, "Only Remote Process Support Call HLT_RpcSctpClose");
958 
959     pthread_mutex_lock(&g_cmdMutex);
960     ret = sprintf_s(dataBuf.data, sizeof(dataBuf.data), "%llu|%s|%d", g_cmdIndex, __FUNCTION__, fd);
961     dataBuf.dataLen = strlen(dataBuf.data);
962     cmdIndex = g_cmdIndex;
963     g_cmdIndex++;
964     pthread_mutex_unlock(&g_cmdMutex);
965 
966     ASSERT_RETURN(ret > 0, "sprintf_s Error");
967 
968     ret = ControlChannelWrite(srcProcess->controlChannelFd, peerProcess->srcDomainPath, &dataBuf);
969     ASSERT_RETURN(ret == SUCCESS, "ControlChannelWrite Error");
970     // Waiting for the result
971     ret = WaitResult(&expectCmdData, cmdIndex, __FUNCTION__);
972     ASSERT_RETURN(ret == SUCCESS, "WaitResult Error");
973     return (int)strtol((const char *)expectCmdData.paras[0], &endPtr, 0);
974 }
975 
HLT_RpcCloseFd(HLT_Process * peerProcess,int fd,int linkType)976 int HLT_RpcCloseFd(HLT_Process *peerProcess, int fd, int linkType)
977 {
978     int ret;
979     uint64_t cmdIndex;
980     Process *srcProcess = NULL;
981     ControlChannelBuf dataBuf;
982     srcProcess = GetProcess();
983 
984     ASSERT_RETURN(peerProcess->remoteFlag == 1, "Only Remote Process Support Call HLT_RpcCloseFd");
985     pthread_mutex_lock(&g_cmdMutex);
986     ret = sprintf_s(dataBuf.data, sizeof(dataBuf.data), "%llu|%s|%d|%d", g_cmdIndex, __FUNCTION__, fd, linkType);
987 
988     dataBuf.dataLen = strlen(dataBuf.data);
989     cmdIndex = g_cmdIndex;
990     g_cmdIndex++;
991     pthread_mutex_unlock(&g_cmdMutex);
992 
993     ASSERT_RETURN(ret > 0, "sprintf_s Error");
994 
995     ret = ControlChannelWrite(srcProcess->controlChannelFd, peerProcess->srcDomainPath, &dataBuf);
996     ASSERT_RETURN(ret == SUCCESS, "ControlChannelWrite Error");
997     // The close fd does not need to wait for the result.
998     return ret;
999 }
1000 
HLT_RpcTlsSetMtu(HLT_Process * peerProcess,int sslId,uint16_t mtu)1001 int HLT_RpcTlsSetMtu(HLT_Process *peerProcess, int sslId, uint16_t mtu)
1002 {
1003     int ret;
1004     uint64_t cmdIndex;
1005     char *endPtr = NULL;
1006     Process *srcProcess = NULL;
1007     ControlChannelBuf dataBuf;
1008     CmdData expectCmdData = {0};
1009     srcProcess = GetProcess();
1010 
1011     ASSERT_RETURN(peerProcess->remoteFlag == 1, "Only Remote Process Support Call HLT_RpcTlsSetMtu");
1012     pthread_mutex_lock(&g_cmdMutex);
1013     ret = sprintf_s(dataBuf.data, sizeof(dataBuf.data), "%llu|%s|%d|%d", g_cmdIndex, __FUNCTION__, sslId, mtu);
1014 
1015     dataBuf.dataLen = strlen(dataBuf.data);
1016     cmdIndex = g_cmdIndex;
1017     g_cmdIndex++;
1018     pthread_mutex_unlock(&g_cmdMutex);
1019 
1020     ASSERT_RETURN(ret > 0, "sprintf_s Error");
1021 
1022     ret = ControlChannelWrite(srcProcess->controlChannelFd, peerProcess->srcDomainPath, &dataBuf);
1023     ASSERT_RETURN(ret == SUCCESS, "ControlChannelWrite Error");
1024     // Waiting for the result
1025     ret = WaitResult(&expectCmdData, cmdIndex, __FUNCTION__);
1026     ASSERT_RETURN(ret == SUCCESS, "WaitResult Error");
1027     return (int)strtol(expectCmdData.paras[0], &endPtr, 0);
1028 }
1029 
HLT_RpcTlsGetErrorCode(HLT_Process * peerProcess,int sslId)1030 int HLT_RpcTlsGetErrorCode(HLT_Process *peerProcess, int sslId)
1031 {
1032     ASSERT_RETURN(peerProcess != NULL, "HLT_RpcTlsGetStatus Parameter Error");
1033     ASSERT_RETURN(peerProcess->remoteFlag == 1, "Only Remote Process Support Call HLT_RpcTlsGetErrorCode");
1034 
1035     int ret;
1036     uint64_t cmdIndex;
1037     char *endPtr = NULL;
1038     Process *srcProcess;
1039     CmdData expectCmdData = {0};
1040     ControlChannelBuf dataBuf;
1041     srcProcess = GetProcess();
1042 
1043     pthread_mutex_lock(&g_cmdMutex);
1044     ret = sprintf_s(dataBuf.data, sizeof(dataBuf.data), "%llu|%s|%d", g_cmdIndex, __FUNCTION__, sslId);
1045     dataBuf.dataLen = strlen(dataBuf.data);
1046     cmdIndex = g_cmdIndex;
1047     g_cmdIndex++;
1048     pthread_mutex_unlock(&g_cmdMutex);
1049 
1050     ASSERT_RETURN(ret > 0, "sprintf_s Error");
1051 
1052     ret = ControlChannelWrite(srcProcess->controlChannelFd, peerProcess->srcDomainPath, &dataBuf);
1053     ASSERT_RETURN(ret == SUCCESS, "ControlChannelWrite Error");
1054 
1055     // Waiting for the result
1056     ret = WaitResult(&expectCmdData, cmdIndex, __FUNCTION__);
1057     ASSERT_RETURN(ret == SUCCESS, "WaitResult Error");
1058     return (int)strtol(expectCmdData.paras[0], &endPtr, 0);
1059 }