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 }