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 }