1 /*
2  * Copyright (c) 2021-2023 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 "softbus_adapter_socket.h"
17 
18 #include <arpa/inet.h>
19 #include <errno.h>
20 #include <fcntl.h>
21 #include <netinet/in.h>
22 #include <net/if.h>
23 #include <securec.h>
24 #include <string.h>
25 #include <sys/ioctl.h>
26 #include <sys/select.h>
27 #include <sys/socket.h>
28 #include <unistd.h>
29 
30 #include "comm_log.h"
31 #include "conn_event.h"
32 #include "endian.h" /* liteos_m htons */
33 #include "softbus_adapter_errcode.h"
34 #include "softbus_error_code.h"
35 #include "softbus_def.h"
36 
ShiftByte(uint8_t * in,int8_t inSize)37 static void ShiftByte(uint8_t *in, int8_t inSize)
38 {
39     int8_t left = 0;
40     int8_t right = inSize - 1;
41     while (left < right) {
42         in[left] ^= in[right];
43         in[right] ^= in[left];
44         in[left] ^= in[right];
45         ++left;
46         --right;
47     }
48 }
49 
GetErrorCode(void)50 static int32_t GetErrorCode(void)
51 {
52     int32_t errCode;
53     switch (errno) {
54         case EINTR:
55             errCode = SOFTBUS_ADAPTER_SOCKET_EINTR;
56             break;
57         case EINPROGRESS:
58             errCode = SOFTBUS_ADAPTER_SOCKET_EINPROGRESS;
59             break;
60         case EAGAIN:
61             errCode = SOFTBUS_ADAPTER_SOCKET_EAGAIN;
62             break;
63         case EBADF:
64             errCode = SOFTBUS_ADAPTER_SOCKET_EBADF;
65             break;
66         case EINVAL:
67             errCode = SOFTBUS_ADAPTER_SOCKET_EINVAL;
68             break;
69         case ENETUNREACH:
70             errCode = SOFTBUS_ADAPTER_SOCKET_ENETUNREACH;
71             break;
72         default:
73             errCode = SOFTBUS_ADAPTER_ERR;
74             break;
75     }
76     return errCode;
77 }
78 
DfxReportAdapterSocket(ConnEventScene scene,int32_t res,int32_t fd,int32_t cfd)79 static void DfxReportAdapterSocket(ConnEventScene scene, int32_t res, int32_t fd, int32_t cfd)
80 {
81     ConnEventExtra extra = {
82         .fd = fd,
83         .cfd = cfd,
84         .errcode = res,
85         .result = res == SOFTBUS_OK ? EVENT_STAGE_RESULT_OK : EVENT_STAGE_RESULT_FAILED
86     };
87     CONN_EVENT(scene, EVENT_STAGE_TCP_COMMON_ONE, extra);
88 }
89 
SockOptErrorToSoftBusError(int32_t errorCode)90 static int32_t SockOptErrorToSoftBusError(int32_t errorCode)
91 {
92     return SOFTBUS_ERRNO(KERNELS_SUB_MODULE_CODE) + abs(errorCode);
93 }
94 
SoftBusSocketCreate(int32_t domain,int32_t type,int32_t protocol,int32_t * socketFd)95 int32_t SoftBusSocketCreate(int32_t domain, int32_t type, int32_t protocol, int32_t *socketFd)
96 {
97     if (socketFd == NULL) {
98         COMM_LOGE(COMM_ADAPTER, "socketFd is null");
99         return SOFTBUS_ADAPTER_INVALID_PARAM;
100     }
101     int32_t ret = socket(domain, type, protocol);
102     if (ret < 0) {
103         COMM_LOGE(COMM_ADAPTER, "socket errno=%{public}s", strerror(errno));
104         return SOFTBUS_ADAPTER_ERR;
105     } else {
106         *socketFd = ret;
107         return SOFTBUS_ADAPTER_OK;
108     }
109 }
110 
SoftBusSocketSetOpt(int32_t socketFd,int32_t level,int32_t optName,const void * optVal,int32_t optLen)111 int32_t SoftBusSocketSetOpt(int32_t socketFd, int32_t level, int32_t optName, const void *optVal, int32_t optLen)
112 {
113     int32_t ret = setsockopt(socketFd, level, optName, optVal, (socklen_t)optLen);
114     if (ret != 0) {
115         COMM_LOGE(COMM_ADAPTER, "setsockopt errno=%{public}s", strerror(errno));
116         return SOFTBUS_ADAPTER_ERR;
117     }
118 
119     return SOFTBUS_ADAPTER_OK;
120 }
121 
SoftBusSocketGetOpt(int32_t socketFd,int32_t level,int32_t optName,void * optVal,int32_t * optLen)122 int32_t SoftBusSocketGetOpt(int32_t socketFd, int32_t level, int32_t optName, void *optVal, int32_t *optLen)
123 {
124     int32_t ret = getsockopt(socketFd, level, optName, optVal, (socklen_t *)optLen);
125     if (ret != 0) {
126         COMM_LOGE(COMM_ADAPTER, "getsockopt errno=%{public}s", strerror(errno));
127         return SOFTBUS_ADAPTER_ERR;
128     }
129     return SOFTBUS_ADAPTER_OK;
130 }
131 
SoftBusSocketGetError(int32_t socketFd)132 int32_t SoftBusSocketGetError(int32_t socketFd)
133 {
134     int32_t err = 0;
135     socklen_t errSize = sizeof(err);
136     int32_t ret = getsockopt(socketFd, SOL_SOCKET, SO_ERROR, &err, &errSize);
137     if (ret < 0) {
138         COMM_LOGE(COMM_ADAPTER, "getsockopt fd=%{public}d, errno=%{public}d", socketFd, errno);
139         return SockOptErrorToSoftBusError(errno);
140     }
141     if (err != 0) {
142         COMM_LOGD(COMM_ADAPTER, "getsockopt fd=%{public}d, err=%{public}d", socketFd, err);
143         return SockOptErrorToSoftBusError(err);
144     }
145     return SOFTBUS_ADAPTER_OK;
146 }
147 
SoftBusSocketGetLocalName(int32_t socketFd,SoftBusSockAddr * addr)148 int32_t SoftBusSocketGetLocalName(int32_t socketFd, SoftBusSockAddr *addr)
149 {
150     if (addr == NULL) {
151         COMM_LOGE(COMM_ADAPTER, "get local name invalid input");
152         return SOFTBUS_ADAPTER_ERR;
153     }
154     uint32_t len = sizeof(*addr);
155     int32_t ret = getsockname(socketFd, (struct sockaddr *)addr, (socklen_t *)&len);
156     if (ret != 0) {
157         COMM_LOGE(COMM_ADAPTER, "getsockname errno=%{public}s", strerror(errno));
158         return SOFTBUS_ADAPTER_ERR;
159     }
160     return SOFTBUS_ADAPTER_OK;
161 }
162 
SoftBusSocketGetPeerName(int32_t socketFd,SoftBusSockAddr * addr)163 int32_t SoftBusSocketGetPeerName(int32_t socketFd, SoftBusSockAddr *addr)
164 {
165     if (addr == NULL) {
166         COMM_LOGE(COMM_ADAPTER, "get peer name invalid input");
167         return SOFTBUS_ADAPTER_ERR;
168     }
169 
170     uint32_t len = sizeof(*addr);
171     int32_t ret = getpeername(socketFd, (struct sockaddr *)addr, (socklen_t *)&len);
172     if (ret != 0) {
173         COMM_LOGE(COMM_ADAPTER, "getpeername errno=%{public}s", strerror(errno));
174         return SOFTBUS_ADAPTER_ERR;
175     }
176     return SOFTBUS_ADAPTER_OK;
177 }
178 
SoftBusSocketBind(int32_t socketFd,SoftBusSockAddr * addr,int32_t addrLen)179 int32_t SoftBusSocketBind(int32_t socketFd, SoftBusSockAddr *addr, int32_t addrLen)
180 {
181     if (addr == NULL || addrLen < 0) {
182         COMM_LOGE(COMM_ADAPTER, "socket bind invalid input");
183         return SOFTBUS_ADAPTER_ERR;
184     }
185 
186     int32_t ret = bind(socketFd, (struct sockaddr *)addr, (socklen_t)addrLen);
187     if (ret != 0) {
188         COMM_LOGE(COMM_ADAPTER, "bind strerror=%{public}s, errno=%{public}d", strerror(errno), errno);
189         return GetErrorCode();
190     }
191 
192     return SOFTBUS_ADAPTER_OK;
193 }
194 
SoftBusSocketListen(int32_t socketFd,int32_t backLog)195 int32_t SoftBusSocketListen(int32_t socketFd, int32_t backLog)
196 {
197     int32_t ret = listen(socketFd, backLog);
198     if (ret != 0) {
199         COMM_LOGE(COMM_ADAPTER, "listen strerror=%{public}s, errno=%{public}d", strerror(errno), errno);
200         DfxReportAdapterSocket(EVENT_SCENE_SOCKET_LISTEN, SOFTBUS_TCPCONNECTION_SOCKET_ERR, socketFd, 0);
201         return SOFTBUS_ADAPTER_ERR;
202     }
203 
204     DfxReportAdapterSocket(EVENT_SCENE_SOCKET_LISTEN, SOFTBUS_OK, socketFd, 0);
205     return SOFTBUS_ADAPTER_OK;
206 }
207 
SoftBusSocketAccept(int32_t socketFd,SoftBusSockAddr * addr,int32_t * acceptFd)208 int32_t SoftBusSocketAccept(int32_t socketFd, SoftBusSockAddr *addr, int32_t *acceptFd)
209 {
210     if (addr == NULL || acceptFd == NULL) {
211         COMM_LOGE(COMM_ADAPTER, "socket accept invalid input");
212         return SOFTBUS_ADAPTER_INVALID_PARAM;
213     }
214 
215     uint32_t len = sizeof(*addr);
216     int32_t ret = accept(socketFd, (struct sockaddr *)addr, (socklen_t *)&len);
217     if (ret < 0) {
218         COMM_LOGD(COMM_ADAPTER, "accept strerror=%{public}s, errno=%{public}d", strerror(errno), errno);
219         DfxReportAdapterSocket(EVENT_SCENE_SOCKET_ACCEPT, SOFTBUS_TCPCONNECTION_SOCKET_ERR, socketFd, 0);
220         return GetErrorCode();
221     }
222     *acceptFd = ret;
223     DfxReportAdapterSocket(EVENT_SCENE_SOCKET_ACCEPT, SOFTBUS_OK, socketFd, *acceptFd);
224     return SOFTBUS_ADAPTER_OK;
225 }
226 
SoftBusSocketConnect(int32_t socketFd,const SoftBusSockAddr * addr,int32_t addrLen)227 int32_t SoftBusSocketConnect(int32_t socketFd, const SoftBusSockAddr *addr, int32_t addrLen)
228 {
229     if (addr == NULL || addrLen < 0) {
230         COMM_LOGE(COMM_ADAPTER, "socket connect invalid input");
231         return SOFTBUS_ADAPTER_ERR;
232     }
233     int32_t ret = connect(socketFd, (struct sockaddr *)addr, (socklen_t)addrLen);
234     if (ret < 0) {
235         COMM_LOGE(COMM_ADAPTER, "connect=%{public}s", strerror(errno));
236         int32_t result = GetErrorCode();
237         if (result == SOFTBUS_ADAPTER_SOCKET_EINPROGRESS || result == SOFTBUS_ADAPTER_SOCKET_EAGAIN) {
238             DfxReportAdapterSocket(EVENT_SCENE_SOCKET_CONNECT, SOFTBUS_OK, socketFd, 0);
239         } else {
240             DfxReportAdapterSocket(EVENT_SCENE_SOCKET_CONNECT, SOFTBUS_TCPCONNECTION_SOCKET_ERR, socketFd, 0);
241         }
242         return result;
243     }
244     DfxReportAdapterSocket(EVENT_SCENE_SOCKET_CONNECT, SOFTBUS_OK, socketFd, 0);
245     return SOFTBUS_ADAPTER_OK;
246 }
247 
SoftBusSocketFdZero(SoftBusFdSet * set)248 void SoftBusSocketFdZero(SoftBusFdSet *set)
249 {
250     if (set == NULL) {
251         COMM_LOGE(COMM_ADAPTER, "set is null");
252         return;
253     }
254 
255     FD_ZERO((fd_set *)set->fdsBits);
256 }
257 
SoftBusSocketFdSet(int32_t socketFd,SoftBusFdSet * set)258 void SoftBusSocketFdSet(int32_t socketFd, SoftBusFdSet *set)
259 {
260     if (set == NULL) {
261         COMM_LOGE(COMM_ADAPTER, "set is null");
262         return;
263     }
264     if (socketFd >= SOFTBUS_FD_SETSIZE) {
265         COMM_LOGE(COMM_ADAPTER, "socketFd %{public}d is too big", socketFd);
266         return;
267     }
268 
269     FD_SET(socketFd, (fd_set *)set->fdsBits);
270 }
271 
SoftBusSocketFdClr(int32_t socketFd,SoftBusFdSet * set)272 void SoftBusSocketFdClr(int32_t socketFd, SoftBusFdSet *set)
273 {
274     if (set == NULL) {
275         COMM_LOGE(COMM_ADAPTER, "set is null");
276         return;
277     }
278 
279     FD_CLR(socketFd, (fd_set *)set->fdsBits);
280 }
281 
SoftBusSocketFdIsset(int32_t socketFd,SoftBusFdSet * set)282 int32_t SoftBusSocketFdIsset(int32_t socketFd, SoftBusFdSet *set)
283 {
284     if (set == NULL) {
285         COMM_LOGE(COMM_ADAPTER, "set is null");
286         return 0;
287     }
288     if (socketFd >= SOFTBUS_FD_SETSIZE) {
289         COMM_LOGE(COMM_ADAPTER, "socketFd %{public}d is too big", socketFd);
290         return 0;
291     }
292 
293     if (FD_ISSET(socketFd, (fd_set *)set->fdsBits) == true) {
294         return 1;
295     } else {
296         return 0;
297     }
298 }
299 
SoftBusSocketSelect(int32_t nfds,SoftBusFdSet * readFds,SoftBusFdSet * writeFds,SoftBusFdSet * exceptFds,SoftBusSockTimeOut * timeout)300 int32_t SoftBusSocketSelect(
301     int32_t nfds, SoftBusFdSet *readFds, SoftBusFdSet *writeFds, SoftBusFdSet *exceptFds, SoftBusSockTimeOut *timeout)
302 {
303     fd_set *tempReadSet = NULL;
304     fd_set *tempWriteSet = NULL;
305     fd_set *tempExceptSet = NULL;
306 
307     if (readFds != NULL) {
308         tempReadSet = (fd_set *)readFds->fdsBits;
309     }
310     if (writeFds != NULL) {
311         tempWriteSet = (fd_set *)writeFds->fdsBits;
312     }
313     if (exceptFds != NULL) {
314         tempExceptSet = (fd_set *)exceptFds->fdsBits;
315     }
316 
317     struct timeval *timeoutPtr = NULL;
318     struct timeval tv = { 0 };
319     if (timeout != NULL) {
320         tv.tv_sec = timeout->sec;
321         tv.tv_usec = timeout->usec;
322         timeoutPtr = &tv;
323     }
324 #define SELECT_INTERVAL_US (100 * 1000)
325 #ifdef __LITEOS__
326     tv.tv_sec = 0;
327     tv.tv_usec = SELECT_INTERVAL_US;
328     timeoutPtr = &tv;
329 #endif
330     int32_t ret = select(nfds, tempReadSet, tempWriteSet, tempExceptSet, timeoutPtr);
331     if (ret < 0) {
332         COMM_LOGE(COMM_ADAPTER, "select errno=%{public}s", strerror(errno));
333         return GetErrorCode();
334     }
335 
336     return ret;
337 }
338 
SoftBusSocketIoctl(int32_t socketFd,long cmd,void * argp)339 int32_t SoftBusSocketIoctl(int32_t socketFd, long cmd, void *argp)
340 {
341     int32_t ret = ioctl(socketFd, cmd, argp);
342     if (ret < 0) {
343         COMM_LOGE(COMM_ADAPTER, "ioctl errno=%{public}s", strerror(errno));
344         return SOFTBUS_ADAPTER_ERR;
345     }
346 
347     return ret;
348 }
349 
SoftBusSocketFcntl(int32_t socketFd,long cmd,long flag)350 int32_t SoftBusSocketFcntl(int32_t socketFd, long cmd, long flag)
351 {
352     int32_t ret = fcntl(socketFd, cmd, flag);
353     if (ret < 0) {
354         COMM_LOGE(COMM_ADAPTER, "fcntl errno=%{public}s", strerror(errno));
355         return SOFTBUS_ADAPTER_ERR;
356     }
357 
358     return ret;
359 }
360 
SoftBusSocketSend(int32_t socketFd,const void * buf,uint32_t len,uint32_t flags)361 int32_t SoftBusSocketSend(int32_t socketFd, const void *buf, uint32_t len, uint32_t flags)
362 {
363     int32_t wrapperFlag = flags | MSG_NOSIGNAL;
364     int32_t ret = send(socketFd, buf, len, wrapperFlag);
365     if (ret < 0) {
366         COMM_LOGE(COMM_ADAPTER, "send errno=%{public}s", strerror(errno));
367         return GetErrorCode();
368     }
369 
370     return ret;
371 }
372 
SoftBusSocketSendTo(int32_t socketFd,const void * buf,uint32_t len,int32_t flags,const SoftBusSockAddr * toAddr,int32_t toAddrLen)373 int32_t SoftBusSocketSendTo(int32_t socketFd, const void *buf, uint32_t len, int32_t flags,
374     const SoftBusSockAddr *toAddr, int32_t toAddrLen)
375 {
376     if ((toAddr == NULL) || (toAddrLen <= 0)) {
377         COMM_LOGE(COMM_ADAPTER, "toAddr is null or toAddrLen <= 0");
378         return SOFTBUS_ADAPTER_ERR;
379     }
380     int32_t ret = sendto(socketFd, buf, len, flags, (struct sockaddr *)toAddr, toAddrLen);
381     if (ret < 0) {
382         COMM_LOGE(COMM_ADAPTER, "sendto errno=%{public}s", strerror(errno));
383         return SOFTBUS_ADAPTER_ERR;
384     }
385 
386     return ret;
387 }
388 
SoftBusSocketRecv(int32_t socketFd,void * buf,uint32_t len,int32_t flags)389 int32_t SoftBusSocketRecv(int32_t socketFd, void *buf, uint32_t len, int32_t flags)
390 {
391     int32_t ret = recv(socketFd, buf, len, flags);
392     if (ret < 0) {
393         COMM_LOGE(COMM_ADAPTER, "recv socketFd=%{public}d, errno=%{public}s", socketFd, strerror(errno));
394         return GetErrorCode();
395     }
396 
397     return ret;
398 }
399 
SoftBusSocketRecvFrom(int32_t socketFd,void * buf,uint32_t len,int32_t flags,SoftBusSockAddr * fromAddr,int32_t * fromAddrLen)400 int32_t SoftBusSocketRecvFrom(int32_t socketFd, void *buf, uint32_t len, int32_t flags, SoftBusSockAddr *fromAddr,
401     int32_t *fromAddrLen)
402 {
403     if ((fromAddr == NULL) || (fromAddrLen == NULL)) {
404         COMM_LOGE(COMM_ADAPTER, "fromAddr or fromAddrLen is null");
405         return SOFTBUS_ADAPTER_ERR;
406     }
407 
408     int32_t ret = recvfrom(socketFd, buf, len, flags, (struct sockaddr *)fromAddr, (socklen_t *)fromAddrLen);
409     if (ret < 0) {
410         COMM_LOGE(COMM_ADAPTER, "recvfrom errno=%{public}s", strerror(errno));
411         return SOFTBUS_ADAPTER_ERR;
412     }
413 
414     return ret;
415 }
416 
SoftBusSocketShutDown(int32_t socketFd,int32_t how)417 int32_t SoftBusSocketShutDown(int32_t socketFd, int32_t how)
418 {
419     int32_t ret = shutdown(socketFd, how);
420     if (ret != 0) {
421         COMM_LOGD(COMM_ADAPTER, "shutdown=%{public}s", strerror(errno));
422         return SOFTBUS_ADAPTER_ERR;
423     }
424 
425     return SOFTBUS_ADAPTER_OK;
426 }
427 
SoftBusSocketClose(int32_t socketFd)428 int32_t SoftBusSocketClose(int32_t socketFd)
429 {
430     int32_t ret = close(socketFd);
431     if (ret != 0) {
432         COMM_LOGD(COMM_ADAPTER, "close errno=%{public}s", strerror(errno));
433         return SOFTBUS_ADAPTER_ERR;
434     }
435 
436     return SOFTBUS_ADAPTER_OK;
437 }
438 
SoftBusInetPtoN(int32_t af,const char * src,void * dst)439 int32_t SoftBusInetPtoN(int32_t af, const char *src, void *dst)
440 {
441     if (src == NULL || dst == NULL) {
442         COMM_LOGE(COMM_ADAPTER, "src or dst is null");
443         return SOFTBUS_ADAPTER_ERR;
444     }
445     int32_t ret = inet_pton(af, src, dst);
446     if (ret == 1) {
447         return SOFTBUS_ADAPTER_OK;
448     } else if (ret == 0) {
449         COMM_LOGE(COMM_ADAPTER, "invalid str input fromat");
450         return SOFTBUS_ADAPTER_INVALID_PARAM;
451     } else {
452         COMM_LOGE(COMM_ADAPTER, "inet_pton failed");
453         return SOFTBUS_ADAPTER_ERR;
454     }
455 }
456 
SoftBusInetNtoP(int32_t af,const void * src,char * dst,int32_t size)457 const char *SoftBusInetNtoP(int32_t af, const void *src, char *dst, int32_t size)
458 {
459     return (inet_ntop(af, src, dst, size));
460 }
461 
SoftBusHtoNl(uint32_t hostlong)462 uint32_t SoftBusHtoNl(uint32_t hostlong)
463 {
464     return htonl(hostlong);
465 }
466 
SoftBusHtoNs(uint16_t hostshort)467 uint16_t SoftBusHtoNs(uint16_t hostshort)
468 {
469     return htons(hostshort);
470 }
471 
SoftBusNtoHl(uint32_t netlong)472 uint32_t SoftBusNtoHl(uint32_t netlong)
473 {
474     return ntohl(netlong);
475 }
476 
SoftBusNtoHs(uint16_t netshort)477 uint16_t SoftBusNtoHs(uint16_t netshort)
478 {
479     return ntohs(netshort);
480 }
481 
SoftBusInetAddr(const char * cp)482 uint32_t SoftBusInetAddr(const char *cp)
483 {
484     return inet_addr(cp);
485 }
486 
SoftBusIfNameToIndex(const char * name)487 uint32_t SoftBusIfNameToIndex(const char *name)
488 {
489     return if_nametoindex(name);
490 }
491 
SoftBusIndexToIfName(int32_t index,char * ifname,uint32_t nameLen)492 int32_t SoftBusIndexToIfName(int32_t index, char *ifname, uint32_t nameLen)
493 {
494     if (index < 0 || ifname == NULL || nameLen < IF_NAME_SIZE) {
495         COMM_LOGE(COMM_ADAPTER, "Invalid parm nameLen=%{public}d", nameLen);
496         return SOFTBUS_ADAPTER_ERR;
497     }
498     if (if_indextoname(index, ifname) == NULL) {
499         COMM_LOGE(COMM_ADAPTER, "get ifname faild! errno=%{public}s", strerror(errno));
500         return SOFTBUS_INVALID_PARAM;
501     }
502     return SOFTBUS_ADAPTER_OK;
503 }
504 
IsLittleEndian(void)505 static bool IsLittleEndian(void)
506 {
507     uint32_t data = 0x1;
508     if (data == ntohl(data)) {
509         return false;
510     } else {
511         return true;
512     }
513 }
514 
ProcByteOrder(uint8_t * value,int8_t size)515 static void ProcByteOrder(uint8_t *value, int8_t size)
516 {
517     if (IsLittleEndian()) {
518         return;
519     }
520     ShiftByte(value, size);
521 }
522 
SoftBusHtoLs(uint16_t value)523 uint16_t SoftBusHtoLs(uint16_t value)
524 {
525     uint16_t res = value;
526     ProcByteOrder((uint8_t *)&res, (int8_t)sizeof(res));
527     return res;
528 }
529 
SoftBusHtoLl(uint32_t value)530 uint32_t SoftBusHtoLl(uint32_t value)
531 {
532     uint32_t res = value;
533     ProcByteOrder((uint8_t *)&res, (int8_t)sizeof(res));
534     return res;
535 }
536 
SoftBusHtoLll(uint64_t value)537 uint64_t SoftBusHtoLll(uint64_t value)
538 {
539     uint64_t res = value;
540     ProcByteOrder((uint8_t *)&res, (int8_t)sizeof(res));
541     return res;
542 }
543 
SoftBusLtoHs(uint16_t value)544 uint16_t SoftBusLtoHs(uint16_t value)
545 {
546     uint16_t res = value;
547     ProcByteOrder((uint8_t *)&res, (int8_t)sizeof(res));
548     return res;
549 }
550 
SoftBusLtoHl(uint32_t value)551 uint32_t SoftBusLtoHl(uint32_t value)
552 {
553     uint32_t res = value;
554     ProcByteOrder((uint8_t *)&res, (int8_t)sizeof(res));
555     return res;
556 }
557 
SoftBusLtoHll(uint64_t value)558 uint64_t SoftBusLtoHll(uint64_t value)
559 {
560     uint64_t res = value;
561     ProcByteOrder((uint8_t *)&res, (int8_t)sizeof(res));
562     return res;
563 }
564 
SoftBusLEtoBEs(uint16_t value)565 uint16_t SoftBusLEtoBEs(uint16_t value)
566 {
567     if (!IsLittleEndian()) {
568         return value;
569     }
570     uint16_t res = value;
571     ShiftByte((uint8_t *)&res, (int8_t)sizeof(res));
572     return res;
573 }
574 
SoftBusBEtoLEs(uint16_t value)575 uint16_t SoftBusBEtoLEs(uint16_t value)
576 {
577     if (!IsLittleEndian()) {
578         return value;
579     }
580     uint16_t res = value;
581     ShiftByte((uint8_t *)&res, (int8_t)sizeof(res));
582     return res;
583 }