• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * This file is part of the openHiTLS project.
3  *
4  * openHiTLS is licensed under the Mulan PSL v2.
5  * You can use this software according to the terms and conditions of the Mulan PSL v2.
6  * You may obtain a copy of Mulan PSL v2 at:
7  *
8  *     http://license.coscl.org.cn/MulanPSL2
9  *
10  * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
11  * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
12  * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
13  * See the Mulan PSL v2 for more details.
14  */
15 
16 #include "hitls_build.h"
17 
18 #if defined(HITLS_BSL_SAL_NET)
19 #include <stdint.h>
20 #include "bsl_sal.h"
21 #include "bsl_errno.h"
22 #include "sal_netimpl.h"
23 
24 static BSL_SAL_NetCallback g_netCallback = {0};
25 
SAL_NetCallback_Ctrl(BSL_SAL_CB_FUNC_TYPE type,void * funcCb)26 int32_t SAL_NetCallback_Ctrl(BSL_SAL_CB_FUNC_TYPE type, void *funcCb)
27 {
28     if (type > BSL_SAL_NET_SOCKGETLASTSOCKETERROR_CB_FUNC || type < BSL_SAL_NET_WRITE_CB_FUNC) {
29         return BSL_SAL_NET_NO_REG_FUNC;
30     }
31     uint32_t offset = (uint32_t)(type - BSL_SAL_NET_WRITE_CB_FUNC);
32     ((void **)&g_netCallback)[offset] = funcCb;
33     return BSL_SUCCESS;
34 }
35 
SAL_Write(int32_t fd,const void * buf,uint32_t len,int32_t * err)36 int32_t SAL_Write(int32_t fd, const void *buf, uint32_t len, int32_t *err)
37 {
38     if (buf == NULL || len == 0 || err == NULL) {
39         return BSL_SAL_ERR_BAD_PARAM;
40     }
41     if (g_netCallback.pfWrite != NULL && g_netCallback.pfWrite != SAL_Write) {
42         return g_netCallback.pfWrite(fd, buf, len, err);
43     }
44 #ifdef HITLS_BSL_SAL_LINUX
45     return SAL_NET_Write(fd, buf, len, err);
46 #else
47     return BSL_SAL_NET_NO_REG_FUNC;
48 #endif
49 }
50 
SAL_Read(int32_t fd,void * buf,uint32_t len,int32_t * err)51 int32_t SAL_Read(int32_t fd, void *buf, uint32_t len, int32_t *err)
52 {
53     if (buf == NULL || len == 0 || err == NULL) {
54         return BSL_SAL_ERR_BAD_PARAM;
55     }
56     if (g_netCallback.pfRead != NULL && g_netCallback.pfRead != SAL_Read) {
57         return g_netCallback.pfRead(fd, buf, len, err);
58     }
59 #ifdef HITLS_BSL_SAL_LINUX
60     return SAL_NET_Read(fd, buf, len, err);
61 #else
62     return BSL_SAL_NET_NO_REG_FUNC;
63 #endif
64 }
65 
SAL_Sendto(int32_t sock,const void * buf,size_t len,int32_t flags,BSL_SAL_SockAddr address,int32_t addrLen,int32_t * err)66 int32_t SAL_Sendto(int32_t sock, const void *buf, size_t len, int32_t flags, BSL_SAL_SockAddr address,
67                    int32_t addrLen, int32_t *err)
68 {
69     if (buf == NULL || len == 0 || address == NULL || addrLen == 0 || err == NULL) {
70         return BSL_SAL_ERR_BAD_PARAM;
71     }
72     if (g_netCallback.pfSendTo != NULL && g_netCallback.pfSendTo != SAL_Sendto) {
73         return g_netCallback.pfSendTo(sock, buf, len, flags, address, addrLen, err);
74     }
75 #ifdef HITLS_BSL_SAL_LINUX
76     return SAL_NET_Sendto(sock, buf, len, flags, address, addrLen, err);
77 #else
78     return BSL_SAL_NET_NO_REG_FUNC;
79 #endif
80 }
81 
SAL_RecvFrom(int32_t sock,void * buf,size_t len,int32_t flags,BSL_SAL_SockAddr address,int32_t * addrLen,int32_t * err)82 int32_t SAL_RecvFrom(int32_t sock, void *buf, size_t len, int32_t flags, BSL_SAL_SockAddr address,
83                      int32_t *addrLen, int32_t *err)
84 {
85     if (buf == NULL || len == 0 || err == NULL) {
86         return BSL_SAL_ERR_BAD_PARAM;
87     }
88     if (g_netCallback.pfRecvFrom != NULL && g_netCallback.pfRecvFrom != SAL_RecvFrom) {
89         return g_netCallback.pfRecvFrom(sock, buf, len, flags, address, addrLen, err);
90     }
91 #ifdef HITLS_BSL_SAL_LINUX
92     return SAL_NET_RecvFrom(sock, buf, len, flags, address, addrLen, err);
93 #else
94     return BSL_SAL_NET_NO_REG_FUNC;
95 #endif
96 }
97 
SAL_SockAddrNew(BSL_SAL_SockAddr * sockAddr)98 int32_t SAL_SockAddrNew(BSL_SAL_SockAddr *sockAddr)
99 {
100     if (g_netCallback.pfSockAddrNew != NULL && g_netCallback.pfSockAddrNew != SAL_SockAddrNew) {
101         return g_netCallback.pfSockAddrNew(sockAddr);
102     }
103 #ifdef HITLS_BSL_SAL_LINUX
104     return SAL_NET_SockAddrNew(sockAddr);
105 #else
106     return BSL_SAL_NET_NO_REG_FUNC;
107 #endif
108 }
109 
SAL_SockAddrFree(BSL_SAL_SockAddr sockAddr)110 void SAL_SockAddrFree(BSL_SAL_SockAddr sockAddr)
111 {
112     if (g_netCallback.pfSockAddrFree != NULL && g_netCallback.pfSockAddrFree != SAL_SockAddrFree) {
113         return g_netCallback.pfSockAddrFree(sockAddr);
114     }
115 #ifdef HITLS_BSL_SAL_LINUX
116     SAL_NET_SockAddrFree(sockAddr);
117     return;
118 #endif
119 }
120 
SAL_SockAddrSize(const BSL_SAL_SockAddr sockAddr)121 uint32_t SAL_SockAddrSize(const BSL_SAL_SockAddr sockAddr)
122 {
123     if (g_netCallback.pfSockAddrSize != NULL && g_netCallback.pfSockAddrSize != SAL_SockAddrSize) {
124         return g_netCallback.pfSockAddrSize(sockAddr);
125     }
126 #ifdef HITLS_BSL_SAL_LINUX
127     return SAL_NET_SockAddrSize(sockAddr);
128 #else
129     return BSL_SAL_NET_NO_REG_FUNC;
130 #endif
131 }
132 
SAL_SockAddrCopy(BSL_SAL_SockAddr dst,BSL_SAL_SockAddr src)133 void SAL_SockAddrCopy(BSL_SAL_SockAddr dst, BSL_SAL_SockAddr src)
134 {
135     if (g_netCallback.pfSockAddrCopy != NULL && g_netCallback.pfSockAddrCopy != SAL_SockAddrCopy) {
136         return g_netCallback.pfSockAddrCopy(src, dst);
137     }
138 #ifdef HITLS_BSL_SAL_LINUX
139     SAL_NET_SockAddrCopy(src, dst);
140     return;
141 #endif
142 }
143 
BSL_SAL_Socket(int32_t af,int32_t type,int32_t protocol)144 int32_t BSL_SAL_Socket(int32_t af, int32_t type, int32_t protocol)
145 {
146     if (g_netCallback.pfSocket != NULL && g_netCallback.pfSocket != BSL_SAL_Socket) {
147         return g_netCallback.pfSocket(af, type, protocol);
148     }
149 #ifdef HITLS_BSL_SAL_LINUX
150     return SAL_Socket(af, type, protocol);
151 #else
152     return BSL_SAL_NET_NO_REG_FUNC;
153 #endif
154 }
155 
BSL_SAL_SockClose(int32_t sockId)156 int32_t BSL_SAL_SockClose(int32_t sockId)
157 {
158     if (g_netCallback.pfSockClose != NULL && g_netCallback.pfSockClose != BSL_SAL_SockClose) {
159         return g_netCallback.pfSockClose(sockId);
160     }
161 #ifdef HITLS_BSL_SAL_LINUX
162     return SAL_SockClose(sockId);
163 #else
164     return BSL_SAL_NET_NO_REG_FUNC;
165 #endif
166 }
167 
BSL_SAL_SetSockopt(int32_t sockId,int32_t level,int32_t name,const void * val,int32_t len)168 int32_t BSL_SAL_SetSockopt(int32_t sockId, int32_t level, int32_t name, const void *val, int32_t len)
169 {
170     if (g_netCallback.pfSetSockopt != NULL && g_netCallback.pfSetSockopt != BSL_SAL_SetSockopt) {
171         return g_netCallback.pfSetSockopt(sockId, level, name, val, len);
172     }
173 #ifdef HITLS_BSL_SAL_LINUX
174     return SAL_SetSockopt(sockId, level, name, val, len);
175 #else
176     return BSL_SAL_NET_NO_REG_FUNC;
177 #endif
178 }
179 
BSL_SAL_GetSockopt(int32_t sockId,int32_t level,int32_t name,void * val,int32_t * len)180 int32_t BSL_SAL_GetSockopt(int32_t sockId, int32_t level, int32_t name, void *val, int32_t *len)
181 {
182     if (g_netCallback.pfGetSockopt != NULL && g_netCallback.pfGetSockopt != BSL_SAL_GetSockopt) {
183         return g_netCallback.pfGetSockopt(sockId, level, name, val, len);
184     }
185 #ifdef HITLS_BSL_SAL_LINUX
186     return SAL_GetSockopt(sockId, level, name, val, len);
187 #else
188     return BSL_SAL_NET_NO_REG_FUNC;
189 #endif
190 }
191 
BSL_SAL_SockListen(int32_t sockId,int32_t backlog)192 int32_t BSL_SAL_SockListen(int32_t sockId, int32_t backlog)
193 {
194     if (g_netCallback.pfSockListen != NULL && g_netCallback.pfSockListen != BSL_SAL_SockListen) {
195         return g_netCallback.pfSockListen(sockId, backlog);
196     }
197 #ifdef HITLS_BSL_SAL_LINUX
198     return SAL_SockListen(sockId, backlog);
199 #else
200     return BSL_SAL_NET_NO_REG_FUNC;
201 #endif
202 }
203 
BSL_SAL_SockBind(int32_t sockId,BSL_SAL_SockAddr addr,size_t len)204 int32_t BSL_SAL_SockBind(int32_t sockId, BSL_SAL_SockAddr addr, size_t len)
205 {
206     if (g_netCallback.pfSockBind != NULL && g_netCallback.pfSockBind != BSL_SAL_SockBind) {
207         return g_netCallback.pfSockBind(sockId, addr, len);
208     }
209 #ifdef HITLS_BSL_SAL_LINUX
210     return SAL_SockBind(sockId, addr, len);
211 #else
212     return BSL_SAL_NET_NO_REG_FUNC;
213 #endif
214 }
215 
BSL_SAL_SockConnect(int32_t sockId,BSL_SAL_SockAddr addr,size_t len)216 int32_t BSL_SAL_SockConnect(int32_t sockId, BSL_SAL_SockAddr addr, size_t len)
217 {
218     if (g_netCallback.pfSockConnect != NULL && g_netCallback.pfSockConnect != BSL_SAL_SockConnect) {
219         return g_netCallback.pfSockConnect(sockId, addr, len);
220     }
221 #ifdef HITLS_BSL_SAL_LINUX
222     return SAL_SockConnect(sockId, addr, len);
223 #else
224     return BSL_SAL_NET_NO_REG_FUNC;
225 #endif
226 }
227 
BSL_SAL_SockSend(int32_t sockId,const void * msg,size_t len,int32_t flags)228 int32_t BSL_SAL_SockSend(int32_t sockId, const void *msg, size_t len, int32_t flags)
229 {
230     if (g_netCallback.pfSockSend != NULL && g_netCallback.pfSockSend != BSL_SAL_SockSend) {
231         return g_netCallback.pfSockSend(sockId, msg, len, flags);
232     }
233 #ifdef HITLS_BSL_SAL_LINUX
234     return SAL_SockSend(sockId, msg, len, flags);
235 #else
236     return BSL_SAL_NET_NO_REG_FUNC;
237 #endif
238 }
239 
BSL_SAL_SockRecv(int32_t sockfd,void * buff,size_t len,int32_t flags)240 int32_t BSL_SAL_SockRecv(int32_t sockfd, void *buff, size_t len, int32_t flags)
241 {
242     if (g_netCallback.pfSockRecv != NULL && g_netCallback.pfSockRecv != BSL_SAL_SockRecv) {
243         return g_netCallback.pfSockRecv(sockfd, buff, len, flags);
244     }
245 #ifdef HITLS_BSL_SAL_LINUX
246     return SAL_SockRecv(sockfd, buff, len, flags);
247 #else
248     return BSL_SAL_NET_NO_REG_FUNC;
249 #endif
250 }
251 
BSL_SAL_Select(int32_t nfds,void * readfds,void * writefds,void * exceptfds,void * timeout)252 int32_t BSL_SAL_Select(int32_t nfds, void *readfds, void *writefds, void *exceptfds, void *timeout)
253 {
254     if (g_netCallback.pfSelect != NULL && g_netCallback.pfSelect != BSL_SAL_Select) {
255         return g_netCallback.pfSelect(nfds, readfds, writefds, exceptfds, timeout);
256     }
257 #ifdef HITLS_BSL_SAL_LINUX
258     return SAL_Select(nfds, readfds, writefds, exceptfds, timeout);
259 #else
260     return BSL_SAL_NET_NO_REG_FUNC;
261 #endif
262 }
263 
BSL_SAL_Ioctlsocket(int32_t sockId,long cmd,unsigned long * arg)264 int32_t BSL_SAL_Ioctlsocket(int32_t sockId, long cmd, unsigned long *arg)
265 {
266     if (g_netCallback.pfIoctlsocket != NULL && g_netCallback.pfIoctlsocket != BSL_SAL_Ioctlsocket) {
267         return g_netCallback.pfIoctlsocket(sockId, cmd, arg);
268     }
269 #ifdef HITLS_BSL_SAL_LINUX
270     return SAL_Ioctlsocket(sockId, cmd, arg);
271 #else
272     return BSL_SAL_NET_NO_REG_FUNC;
273 #endif
274 }
275 
BSL_SAL_SockGetLastSocketError(void)276 int32_t BSL_SAL_SockGetLastSocketError(void)
277 {
278     if (g_netCallback.pfSockGetLastSocketError != NULL &&
279         g_netCallback.pfSockGetLastSocketError != BSL_SAL_SockGetLastSocketError) {
280         return g_netCallback.pfSockGetLastSocketError();
281     }
282 #ifdef HITLS_BSL_SAL_LINUX
283     return SAL_SockGetLastSocketError();
284 #else
285     return BSL_SAL_NET_NO_REG_FUNC;
286 #endif
287 }
288 
289 #endif
290