• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "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 <securec.h>
23 #include <string.h>
24 #include <sys/ioctl.h>
25 #include <sys/select.h>
26 #include <sys/socket.h>
27 
28 #include "endian.h" /* liteos_m htons */
29 #include "softbus_adapter_errcode.h"
30 #include "softbus_adapter_log.h"
31 #include "softbus_def.h"
32 
ShiftByte(uint8_t * in,int8_t inSize)33 static void ShiftByte(uint8_t *in, int8_t inSize)
34 {
35     int8_t left = 0;
36     int8_t right = inSize - 1;
37     while (left < right) {
38         in[left] ^= in[right];
39         in[right] ^= in[left];
40         in[left] ^= in[right];
41         ++left;
42         --right;
43     }
44 }
45 
GetErrorCode(void)46 static int32_t GetErrorCode(void)
47 {
48     int32_t errCode;
49     switch (errno) {
50         case EINTR:
51             errCode = SOFTBUS_ADAPTER_SOCKET_EINTR;
52             break;
53         case EINPROGRESS:
54             errCode = SOFTBUS_ADAPTER_SOCKET_EINPROGRESS;
55             break;
56         case EAGAIN:
57             errCode = SOFTBUS_ADAPTER_SOCKET_EAGAIN;
58             break;
59         default:
60             errCode = SOFTBUS_ADAPTER_ERR;
61             break;
62     }
63     return errCode;
64 }
65 
SoftBusSocketCreate(int32_t domain,int32_t type,int32_t protocol,int32_t * socketFd)66 int32_t SoftBusSocketCreate(int32_t domain, int32_t type, int32_t protocol, int32_t *socketFd)
67 {
68     if (socketFd == NULL) {
69         HILOG_ERROR(SOFTBUS_HILOG_ID, "socketFd is null");
70         return SOFTBUS_ADAPTER_INVALID_PARAM;
71     }
72     int32_t ret;
73     ret = socket(domain, type, protocol);
74     if (ret < 0) {
75         HILOG_ERROR(SOFTBUS_HILOG_ID, "socket %{public}s", strerror(errno));
76         return SOFTBUS_ADAPTER_ERR;
77     } else {
78         *socketFd = ret;
79         return SOFTBUS_ADAPTER_OK;
80     }
81 }
82 
SoftBusSocketSetOpt(int32_t socketFd,int32_t level,int32_t optName,const void * optVal,int32_t optLen)83 int32_t SoftBusSocketSetOpt(int32_t socketFd, int32_t level, int32_t optName, const void *optVal, int32_t optLen)
84 {
85     int32_t ret = setsockopt(socketFd, level, optName, optVal, (socklen_t)optLen);
86     if (ret != 0) {
87         HILOG_ERROR(SOFTBUS_HILOG_ID, "setsockopt : %{public}s", strerror(errno));
88         return SOFTBUS_ADAPTER_ERR;
89     }
90 
91     return SOFTBUS_ADAPTER_OK;
92 }
93 
SoftBusSocketGetOpt(int32_t socketFd,int32_t level,int32_t optName,void * optVal,int32_t * optLen)94 int32_t SoftBusSocketGetOpt(int32_t socketFd, int32_t level, int32_t optName,  void *optVal, int32_t *optLen)
95 {
96     int32_t ret = getsockopt(socketFd, level, optName, optVal, (socklen_t *)optLen);
97     if (ret != 0) {
98         HILOG_ERROR(SOFTBUS_HILOG_ID, "getsockopt : %{public}s", strerror(errno));
99         return SOFTBUS_ADAPTER_ERR;
100     }
101     return SOFTBUS_ADAPTER_OK;
102 }
103 
SoftBusSocketGetError(int32_t socketFd)104 int32_t SoftBusSocketGetError(int32_t socketFd)
105 {
106     int err = 0;
107     socklen_t errSize = sizeof(err);
108     int32_t ret = getsockopt(socketFd, SOL_SOCKET, SO_ERROR, &err, &errSize);
109     if (ret < 0) {
110         HILOG_ERROR(SOFTBUS_HILOG_ID, "getsockopt fd=%{public}d, ret=%{public}d", socketFd, ret);
111         return ret;
112     }
113     if (err != 0) {
114         HILOG_ERROR(SOFTBUS_HILOG_ID, "getsockopt fd=%{public}d, err=%{public}d", socketFd, err);
115         return err;
116     }
117     return err;
118 }
119 
SoftBusAddrToSysAddr(const SoftBusSockAddr * softbusAddr,struct sockaddr * sysAddr,uint32_t len)120 static int32_t SoftBusAddrToSysAddr(const SoftBusSockAddr *softbusAddr, struct sockaddr * sysAddr, uint32_t len)
121 {
122     if (len < sizeof(softbusAddr->saFamily)) {
123         HILOG_ERROR(SOFTBUS_HILOG_ID, "%s:invalid len", __func__);
124         return SOFTBUS_ADAPTER_ERR;
125     }
126     if ((softbusAddr == NULL) || (sysAddr == NULL)) {
127         HILOG_ERROR(SOFTBUS_HILOG_ID, "%s:invalid input", __func__);
128         return SOFTBUS_ADAPTER_ERR;
129     }
130     if (memset_s(sysAddr, sizeof(struct sockaddr), 0, sizeof(struct sockaddr)) != EOK) {
131         HILOG_ERROR(SOFTBUS_HILOG_ID, "%s:memset fail", __func__);
132         return SOFTBUS_ADAPTER_ERR;
133     }
134     sysAddr->sa_family = softbusAddr->saFamily;
135     if (memcpy_s(sysAddr->sa_data, sizeof(sysAddr->sa_data), softbusAddr->saData, len - sizeof(softbusAddr->saFamily))
136         != EOK) {
137         HILOG_ERROR(SOFTBUS_HILOG_ID, "%s:memcpy fail", __func__);
138         return SOFTBUS_ADAPTER_ERR;
139     }
140     return SOFTBUS_ADAPTER_OK;
141 }
142 
SysAddrToSoftBusAddr(const struct sockaddr * sysAddr,SoftBusSockAddr * softbusAddr)143 static int32_t SysAddrToSoftBusAddr(const struct sockaddr *sysAddr, SoftBusSockAddr *softbusAddr)
144 {
145     if (memset_s(softbusAddr, sizeof(SoftBusSockAddr), 0, sizeof(SoftBusSockAddr)) != EOK) {
146         HILOG_ERROR(SOFTBUS_HILOG_ID, "%s:memset fail", __func__);
147         return SOFTBUS_ADAPTER_ERR;
148     }
149     softbusAddr->saFamily = sysAddr->sa_family;
150     if (memcpy_s(softbusAddr->saData, sizeof(softbusAddr->saData), sysAddr->sa_data, sizeof(sysAddr->sa_data))
151         != EOK) {
152         HILOG_ERROR(SOFTBUS_HILOG_ID, "%s:memcpy fail", __func__);
153         return SOFTBUS_ADAPTER_ERR;
154     }
155     return SOFTBUS_ADAPTER_OK;
156 }
157 
SoftBusSocketGetLocalName(int32_t socketFd,SoftBusSockAddr * addr,int32_t * addrLen)158 int32_t SoftBusSocketGetLocalName(int32_t socketFd, SoftBusSockAddr *addr, int32_t *addrLen)
159 {
160     if (addr == NULL || addrLen == NULL) {
161         HILOG_ERROR(SOFTBUS_HILOG_ID, "get local name invalid input");
162         return SOFTBUS_ADAPTER_ERR;
163     }
164     struct sockaddr sysAddr;
165     if (memset_s(&sysAddr, sizeof(struct sockaddr), 0, sizeof(struct sockaddr)) != EOK) {
166         HILOG_ERROR(SOFTBUS_HILOG_ID, "get local name memset fail");
167         return SOFTBUS_ADAPTER_ERR;
168     }
169     int32_t ret = getsockname(socketFd, &sysAddr, (socklen_t *)addrLen);
170     if (ret != 0) {
171         HILOG_ERROR(SOFTBUS_HILOG_ID, "getsockname : %{public}s", strerror(errno));
172         return SOFTBUS_ADAPTER_ERR;
173     }
174     if (SysAddrToSoftBusAddr(&sysAddr, addr) != SOFTBUS_ADAPTER_OK) {
175         HILOG_ERROR(SOFTBUS_HILOG_ID, "get local name sys addr to softbus addr failed");
176         return SOFTBUS_ADAPTER_ERR;
177     }
178     return SOFTBUS_ADAPTER_OK;
179 }
180 
SoftBusSocketGetPeerName(int32_t socketFd,SoftBusSockAddr * addr,int32_t * addrLen)181 int32_t SoftBusSocketGetPeerName(int32_t socketFd, SoftBusSockAddr *addr, int32_t *addrLen)
182 {
183     if (addr == NULL || addrLen == NULL) {
184         HILOG_ERROR(SOFTBUS_HILOG_ID, "get peer name invalid input");
185         return SOFTBUS_ADAPTER_ERR;
186     }
187     struct sockaddr sysAddr;
188     if (memset_s(&sysAddr, sizeof(struct sockaddr), 0, sizeof(struct sockaddr)) != EOK) {
189         HILOG_ERROR(SOFTBUS_HILOG_ID, "get peer name memset fail");
190         return SOFTBUS_ADAPTER_ERR;
191     }
192     int32_t ret = getpeername(socketFd, &sysAddr, (socklen_t *)addrLen);
193     if (ret != 0) {
194         HILOG_ERROR(SOFTBUS_HILOG_ID, "getpeername : %{public}s", strerror(errno));
195         return SOFTBUS_ADAPTER_ERR;
196     }
197     if (SysAddrToSoftBusAddr(&sysAddr, addr) != SOFTBUS_ADAPTER_OK) {
198         HILOG_ERROR(SOFTBUS_HILOG_ID, "get peer name sys addr to softbus addr failed");
199         return SOFTBUS_ADAPTER_ERR;
200     }
201     return SOFTBUS_ADAPTER_OK;
202 }
203 
SoftBusSocketBind(int32_t socketFd,SoftBusSockAddr * addr,int32_t addrLen)204 int32_t SoftBusSocketBind(int32_t socketFd, SoftBusSockAddr *addr, int32_t addrLen)
205 {
206     if (addrLen < 0) {
207         return SOFTBUS_ADAPTER_ERR;
208     }
209     struct sockaddr sysAddr;
210     uint32_t len = (sizeof(SoftBusSockAddr) > (uint32_t)addrLen) ? (uint32_t)addrLen : sizeof(SoftBusSockAddr);
211     if (SoftBusAddrToSysAddr(addr, &sysAddr, len) != SOFTBUS_ADAPTER_OK) {
212         HILOG_ERROR(SOFTBUS_HILOG_ID, "socket bind sys addr to softbus addr failed");
213         return SOFTBUS_ADAPTER_ERR;
214     }
215     int32_t ret = bind(socketFd, &sysAddr, (socklen_t)addrLen);
216     if (ret != 0) {
217         HILOG_ERROR(SOFTBUS_HILOG_ID, "bind : %{public}s", strerror(errno));
218         return GetErrorCode();
219     }
220 
221     return SOFTBUS_ADAPTER_OK;
222 }
223 
SoftBusSocketListen(int32_t socketFd,int32_t backLog)224 int32_t SoftBusSocketListen(int32_t socketFd, int32_t backLog)
225 {
226     int32_t ret = listen(socketFd, backLog);
227     if (ret != 0) {
228         HILOG_ERROR(SOFTBUS_HILOG_ID, "listen : %{public}s", strerror(errno));
229         return SOFTBUS_ADAPTER_ERR;
230     }
231 
232     return SOFTBUS_ADAPTER_OK;
233 }
234 
SoftBusSocketAccept(int32_t socketFd,SoftBusSockAddr * addr,int32_t * addrLen,int32_t * acceptFd)235 int32_t SoftBusSocketAccept(int32_t socketFd, SoftBusSockAddr *addr, int32_t *addrLen, int32_t *acceptFd)
236 {
237     if (addr == NULL || addrLen == NULL || acceptFd == NULL) {
238         HILOG_ERROR(SOFTBUS_HILOG_ID, "socket accept invalid input");
239         return SOFTBUS_ADAPTER_INVALID_PARAM;
240     }
241     struct sockaddr sysAddr;
242     if (SoftBusAddrToSysAddr(addr, &sysAddr, sizeof(SoftBusSockAddr)) != SOFTBUS_ADAPTER_OK) {
243         HILOG_ERROR(SOFTBUS_HILOG_ID, "socket accept softbus addr to sys addr failed");
244         return SOFTBUS_ADAPTER_ERR;
245     }
246     int32_t ret = accept(socketFd, &sysAddr, (socklen_t *)addrLen);
247     if (ret < 0) {
248         HILOG_ERROR(SOFTBUS_HILOG_ID, "accept : %{public}s", strerror(errno));
249         return GetErrorCode();
250     }
251     if (SysAddrToSoftBusAddr(&sysAddr, addr) != SOFTBUS_ADAPTER_OK) {
252         HILOG_ERROR(SOFTBUS_HILOG_ID, "socket accept sys addr to softbus addr failed");
253         return SOFTBUS_ADAPTER_ERR;
254     }
255     *acceptFd = ret;
256     return SOFTBUS_ADAPTER_OK;
257 }
258 
SoftBusSocketConnect(int32_t socketFd,const SoftBusSockAddr * addr,int32_t addrLen)259 int32_t SoftBusSocketConnect(int32_t socketFd, const SoftBusSockAddr *addr, int32_t addrLen)
260 {
261     struct sockaddr sysAddr;
262     if (SoftBusAddrToSysAddr(addr, &sysAddr, sizeof(SoftBusSockAddr)) != SOFTBUS_ADAPTER_OK) {
263         HILOG_ERROR(SOFTBUS_HILOG_ID, "socket connect sys addr to softbus addr failed");
264         return SOFTBUS_ADAPTER_ERR;
265     }
266     int32_t ret = connect(socketFd, &sysAddr, (socklen_t)addrLen);
267     if (ret < 0) {
268         HILOG_ERROR(SOFTBUS_HILOG_ID, "connect :%{public}s", strerror(errno));
269         return GetErrorCode();
270     }
271     return SOFTBUS_ADAPTER_OK;
272 }
273 
SoftBusSocketFdZero(SoftBusFdSet * set)274 void SoftBusSocketFdZero(SoftBusFdSet *set)
275 {
276     if (set == NULL) {
277         HILOG_ERROR(SOFTBUS_HILOG_ID, "set is null");
278         return;
279     }
280 
281     FD_ZERO((fd_set *)set->fdsBits);
282 }
283 
SoftBusSocketFdSet(int32_t socketFd,SoftBusFdSet * set)284 void SoftBusSocketFdSet(int32_t socketFd, SoftBusFdSet *set)
285 {
286     if (set == NULL) {
287         HILOG_ERROR(SOFTBUS_HILOG_ID, "set is null");
288         return;
289     }
290 
291     FD_SET(socketFd, (fd_set *)set->fdsBits);
292 }
293 
SoftBusSocketFdClr(int32_t socketFd,SoftBusFdSet * set)294 void SoftBusSocketFdClr(int32_t socketFd, SoftBusFdSet *set)
295 {
296     if (set == NULL) {
297         HILOG_ERROR(SOFTBUS_HILOG_ID, "set is null");
298         return;
299     }
300 
301     FD_CLR(socketFd, (fd_set *)set->fdsBits);
302 }
303 
SoftBusSocketFdIsset(int32_t socketFd,SoftBusFdSet * set)304 int32_t SoftBusSocketFdIsset(int32_t socketFd, SoftBusFdSet *set)
305 {
306     if (set == NULL) {
307         HILOG_ERROR(SOFTBUS_HILOG_ID, "set is null");
308         return 0;
309     }
310 
311     if (FD_ISSET(socketFd, (fd_set *)set->fdsBits) == true) {
312         return 1;
313     } else {
314         return 0;
315     }
316 }
317 
SoftBusSocketSelect(int32_t nfds,SoftBusFdSet * readFds,SoftBusFdSet * writeFds,SoftBusFdSet * exceptFds,SoftBusSockTimeOut * timeOut)318 int32_t SoftBusSocketSelect(int32_t nfds, SoftBusFdSet *readFds, SoftBusFdSet *writeFds, SoftBusFdSet *exceptFds,
319     SoftBusSockTimeOut *timeOut)
320 {
321     if (timeOut == NULL) {
322         HILOG_ERROR(SOFTBUS_HILOG_ID, "timeOut is null");
323         return SOFTBUS_ADAPTER_ERR;
324     }
325     fd_set *tempReadSet = NULL;
326     fd_set *tempWriteSet = NULL;
327     fd_set *tempExceptSet = NULL;
328 
329     if (readFds != NULL) {
330         tempReadSet = (fd_set *)readFds->fdsBits;
331     }
332     if (writeFds != NULL) {
333         tempWriteSet = (fd_set *)writeFds->fdsBits;
334     }
335     if (exceptFds != NULL) {
336         tempExceptSet = (fd_set *)exceptFds->fdsBits;
337     }
338 
339     struct timeval sysTimeOut = {0};
340 
341     sysTimeOut.tv_sec = timeOut->sec;
342     sysTimeOut.tv_usec = timeOut->usec;
343     int32_t ret = select(nfds, tempReadSet, tempWriteSet, tempExceptSet, &sysTimeOut);
344     if (ret < 0) {
345         HILOG_ERROR(SOFTBUS_HILOG_ID, "select : %{public}s", strerror(errno));
346         return GetErrorCode();
347     }
348 
349     return ret;
350 }
351 
SoftBusSocketIoctl(int32_t socketFd,long cmd,void * argp)352 int32_t SoftBusSocketIoctl(int32_t socketFd, long cmd, void *argp)
353 {
354     int32_t ret = ioctl(socketFd, cmd, argp);
355     if (ret < 0) {
356         HILOG_ERROR(SOFTBUS_HILOG_ID, "ioctl : %{public}s", strerror(errno));
357         return SOFTBUS_ADAPTER_ERR;
358     }
359 
360     return ret;
361 }
362 
SoftBusSocketFcntl(int32_t socketFd,long cmd,long flag)363 int32_t SoftBusSocketFcntl(int32_t socketFd, long cmd, long flag)
364 {
365     int32_t ret = fcntl(socketFd, cmd, flag);
366     if (ret < 0) {
367         HILOG_ERROR(SOFTBUS_HILOG_ID, "fcntl : %{public}s", strerror(errno));
368         return SOFTBUS_ADAPTER_ERR;
369     }
370 
371     return ret;
372 }
373 
SoftBusSocketSend(int32_t socketFd,const void * buf,uint32_t len,int32_t flags)374 int32_t SoftBusSocketSend(int32_t socketFd, const void *buf, uint32_t len, int32_t flags)
375 {
376     int32_t wrapperFlag = flags | MSG_NOSIGNAL;
377     int32_t ret = send(socketFd, buf, len, wrapperFlag);
378     if (ret < 0) {
379         HILOG_ERROR(SOFTBUS_HILOG_ID, "send : %{public}s", strerror(errno));
380         return GetErrorCode();
381     }
382 
383     return ret;
384 }
385 
SoftBusSocketSendTo(int32_t socketFd,const void * buf,uint32_t len,int32_t flags,const SoftBusSockAddr * toAddr,int32_t toAddrLen)386 int32_t SoftBusSocketSendTo(int32_t socketFd, const void *buf, uint32_t len, int32_t flags,
387     const SoftBusSockAddr *toAddr, int32_t toAddrLen)
388 {
389     if ((toAddr == NULL) || (toAddrLen <= 0)) {
390         HILOG_ERROR(SOFTBUS_HILOG_ID, "toAddr is null or toAddrLen <= 0");
391         return SOFTBUS_ADAPTER_ERR;
392     }
393     struct sockaddr sysAddr;
394     if (SoftBusAddrToSysAddr(toAddr, &sysAddr, sizeof(SoftBusSockAddr)) != SOFTBUS_ADAPTER_OK) {
395         HILOG_ERROR(SOFTBUS_HILOG_ID, "socket sendto sys addr to softbus addr failed");
396         return SOFTBUS_ADAPTER_ERR;
397     }
398     int32_t ret = sendto(socketFd, buf, len, flags, &sysAddr, toAddrLen);
399     if (ret < 0) {
400         HILOG_ERROR(SOFTBUS_HILOG_ID, "sendto : %{public}s", strerror(errno));
401         return SOFTBUS_ADAPTER_ERR;
402     }
403 
404     return ret;
405 }
406 
SoftBusSocketRecv(int32_t socketFd,void * buf,uint32_t len,int32_t flags)407 int32_t SoftBusSocketRecv(int32_t socketFd, void *buf, uint32_t len, int32_t flags)
408 {
409     int32_t ret = recv(socketFd, buf, len, flags);
410     if (ret < 0) {
411         HILOG_ERROR(SOFTBUS_HILOG_ID, "recv : %{public}s", strerror(errno));
412         return GetErrorCode();
413     }
414 
415     return ret;
416 }
417 
SoftBusSocketRecvFrom(int32_t socketFd,void * buf,uint32_t len,int32_t flags,SoftBusSockAddr * fromAddr,int32_t * fromAddrLen)418 int32_t SoftBusSocketRecvFrom(int32_t socketFd, void *buf, uint32_t len, int32_t flags, SoftBusSockAddr *fromAddr,
419     int32_t *fromAddrLen)
420 {
421     if ((fromAddr == NULL) || (fromAddrLen == NULL)) {
422         HILOG_ERROR(SOFTBUS_HILOG_ID, "fromAddr or fromAddrLen is null");
423         return SOFTBUS_ADAPTER_ERR;
424     }
425     struct sockaddr sysAddr;
426     if (SoftBusAddrToSysAddr(fromAddr, &sysAddr, sizeof(SoftBusSockAddr)) != SOFTBUS_ADAPTER_OK) {
427         HILOG_ERROR(SOFTBUS_HILOG_ID, "socket recvfrom sys addr to softbus addr failed");
428         return SOFTBUS_ADAPTER_ERR;
429     }
430     int32_t ret = recvfrom(socketFd, buf, len, flags, &sysAddr, (socklen_t *)fromAddrLen);
431     if (ret < 0) {
432         HILOG_ERROR(SOFTBUS_HILOG_ID, "recvfrom : %{public}s", strerror(errno));
433         return SOFTBUS_ADAPTER_ERR;
434     }
435 
436     return ret;
437 }
438 
SoftBusSocketShutDown(int32_t socketFd,int32_t how)439 int32_t SoftBusSocketShutDown(int32_t socketFd, int32_t how)
440 {
441     int32_t ret = shutdown(socketFd, how);
442     if (ret != 0) {
443         HILOG_ERROR(SOFTBUS_HILOG_ID, "shutdown :%{public}s", strerror(errno));
444         return SOFTBUS_ADAPTER_ERR;
445     }
446 
447     return SOFTBUS_ADAPTER_OK;
448 }
449 
SoftBusSocketClose(int32_t socketFd)450 int32_t SoftBusSocketClose(int32_t socketFd)
451 {
452     int32_t ret = close(socketFd);
453     if (ret != 0) {
454         HILOG_ERROR(SOFTBUS_HILOG_ID, "close : %{public}s", strerror(errno));
455         return SOFTBUS_ADAPTER_ERR;
456     }
457 
458     return SOFTBUS_ADAPTER_OK;
459 }
460 
SoftBusInetPtoN(int32_t af,const char * src,void * dst)461 int32_t SoftBusInetPtoN(int32_t af, const char *src, void *dst)
462 {
463     int32_t ret = inet_pton(af, src, dst);
464     if (ret == 1) {
465         return SOFTBUS_ADAPTER_OK;
466     } else if (ret == 0) {
467         HILOG_ERROR(SOFTBUS_HILOG_ID, "invalid str input fromat");
468         return SOFTBUS_ADAPTER_INVALID_PARAM;
469     } else {
470         HILOG_ERROR(SOFTBUS_HILOG_ID, "inet_pton failed");
471         return SOFTBUS_ADAPTER_ERR;
472     }
473 }
474 
SoftBusInetNtoP(int32_t af,const void * src,char * dst,int32_t size)475 const char *SoftBusInetNtoP(int32_t af, const void* src, char *dst, int32_t size)
476 {
477     return (inet_ntop(af, src, dst, size));
478 }
479 
SoftBusHtoNl(uint32_t hostlong)480 uint32_t SoftBusHtoNl(uint32_t hostlong)
481 {
482     return htonl(hostlong);
483 }
484 
SoftBusHtoNs(uint16_t hostshort)485 uint16_t SoftBusHtoNs(uint16_t hostshort)
486 {
487     return htons(hostshort);
488 }
489 
SoftBusNtoHl(uint32_t netlong)490 uint32_t SoftBusNtoHl(uint32_t netlong)
491 {
492     return ntohl(netlong);
493 }
494 
SoftBusNtoHs(uint16_t netshort)495 uint16_t SoftBusNtoHs(uint16_t netshort)
496 {
497     return ntohs(netshort);
498 }
499 
SoftBusInetAddr(const char * cp)500 uint32_t SoftBusInetAddr(const char *cp)
501 {
502     return inet_addr(cp);
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     return;
522 }
523 
SoftBusHtoLs(uint16_t value)524 uint16_t SoftBusHtoLs(uint16_t value)
525 {
526     uint16_t res = value;
527     ProcByteOrder((uint8_t *)&res, (int8_t)sizeof(res));
528     return res;
529 }
530 
SoftBusHtoLl(uint32_t value)531 uint32_t SoftBusHtoLl(uint32_t value)
532 {
533     uint32_t res = value;
534     ProcByteOrder((uint8_t *)&res, (int8_t)sizeof(res));
535     return res;
536 }
537 
SoftBusHtoLll(uint64_t value)538 uint64_t SoftBusHtoLll(uint64_t value)
539 {
540     uint64_t res = value;
541     ProcByteOrder((uint8_t *)&res, (int8_t)sizeof(res));
542     return res;
543 }
544 
SoftBusLtoHs(uint16_t value)545 uint16_t SoftBusLtoHs(uint16_t value)
546 {
547     uint16_t res = value;
548     ProcByteOrder((uint8_t *)&res, (int8_t)sizeof(res));
549     return res;
550 }
551 
SoftBusLtoHl(uint32_t value)552 uint32_t SoftBusLtoHl(uint32_t value)
553 {
554     uint32_t res = value;
555     ProcByteOrder((uint8_t *)&res, (int8_t)sizeof(res));
556     return res;
557 }
558 
SoftBusLtoHll(uint64_t value)559 uint64_t SoftBusLtoHll(uint64_t value)
560 {
561     uint64_t res = value;
562     ProcByteOrder((uint8_t *)&res, (int8_t)sizeof(res));
563     return res;
564 }