xref: /aosp_15_r20/external/libwebsockets/lib/plat/unix/private-lib-plat-unix.h (revision 1c60b9aca93fdbc9b5f19b2d2194c91294b22281)
1*1c60b9acSAndroid Build Coastguard Worker  /*
2*1c60b9acSAndroid Build Coastguard Worker  * libwebsockets - small server side websockets and web server implementation
3*1c60b9acSAndroid Build Coastguard Worker  *
4*1c60b9acSAndroid Build Coastguard Worker  * Copyright (C) 2010 - 2019 Andy Green <[email protected]>
5*1c60b9acSAndroid Build Coastguard Worker  *
6*1c60b9acSAndroid Build Coastguard Worker  * Permission is hereby granted, free of charge, to any person obtaining a copy
7*1c60b9acSAndroid Build Coastguard Worker  * of this software and associated documentation files (the "Software"), to
8*1c60b9acSAndroid Build Coastguard Worker  * deal in the Software without restriction, including without limitation the
9*1c60b9acSAndroid Build Coastguard Worker  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10*1c60b9acSAndroid Build Coastguard Worker  * sell copies of the Software, and to permit persons to whom the Software is
11*1c60b9acSAndroid Build Coastguard Worker  * furnished to do so, subject to the following conditions:
12*1c60b9acSAndroid Build Coastguard Worker  *
13*1c60b9acSAndroid Build Coastguard Worker  * The above copyright notice and this permission notice shall be included in
14*1c60b9acSAndroid Build Coastguard Worker  * all copies or substantial portions of the Software.
15*1c60b9acSAndroid Build Coastguard Worker  *
16*1c60b9acSAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17*1c60b9acSAndroid Build Coastguard Worker  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18*1c60b9acSAndroid Build Coastguard Worker  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19*1c60b9acSAndroid Build Coastguard Worker  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20*1c60b9acSAndroid Build Coastguard Worker  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21*1c60b9acSAndroid Build Coastguard Worker  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
22*1c60b9acSAndroid Build Coastguard Worker  * IN THE SOFTWARE.
23*1c60b9acSAndroid Build Coastguard Worker  *
24*1c60b9acSAndroid Build Coastguard Worker  *  Included from lib/private-lib-core.h if no explicit platform
25*1c60b9acSAndroid Build Coastguard Worker  */
26*1c60b9acSAndroid Build Coastguard Worker 
27*1c60b9acSAndroid Build Coastguard Worker #include <fcntl.h>
28*1c60b9acSAndroid Build Coastguard Worker #include <strings.h>
29*1c60b9acSAndroid Build Coastguard Worker #include <unistd.h>
30*1c60b9acSAndroid Build Coastguard Worker 
31*1c60b9acSAndroid Build Coastguard Worker #include <netinet/in.h>
32*1c60b9acSAndroid Build Coastguard Worker #include <netinet/tcp.h>
33*1c60b9acSAndroid Build Coastguard Worker #include <arpa/inet.h>
34*1c60b9acSAndroid Build Coastguard Worker #include <poll.h>
35*1c60b9acSAndroid Build Coastguard Worker #include <netdb.h>
36*1c60b9acSAndroid Build Coastguard Worker 
37*1c60b9acSAndroid Build Coastguard Worker #ifndef __cplusplus
38*1c60b9acSAndroid Build Coastguard Worker #include <errno.h>
39*1c60b9acSAndroid Build Coastguard Worker #endif
40*1c60b9acSAndroid Build Coastguard Worker #include <netdb.h>
41*1c60b9acSAndroid Build Coastguard Worker #include <signal.h>
42*1c60b9acSAndroid Build Coastguard Worker 
43*1c60b9acSAndroid Build Coastguard Worker #include <sys/socket.h>
44*1c60b9acSAndroid Build Coastguard Worker #include <sys/types.h>
45*1c60b9acSAndroid Build Coastguard Worker #include <sys/stat.h>
46*1c60b9acSAndroid Build Coastguard Worker #include <sys/time.h>
47*1c60b9acSAndroid Build Coastguard Worker #include <sys/mman.h>
48*1c60b9acSAndroid Build Coastguard Worker #include <sys/un.h>
49*1c60b9acSAndroid Build Coastguard Worker #if defined(LWS_HAVE_EVENTFD)
50*1c60b9acSAndroid Build Coastguard Worker #include <sys/eventfd.h>
51*1c60b9acSAndroid Build Coastguard Worker #endif
52*1c60b9acSAndroid Build Coastguard Worker 
53*1c60b9acSAndroid Build Coastguard Worker #if defined(__APPLE__)
54*1c60b9acSAndroid Build Coastguard Worker #include <machine/endian.h>
55*1c60b9acSAndroid Build Coastguard Worker #endif
56*1c60b9acSAndroid Build Coastguard Worker #if defined(__FreeBSD__)
57*1c60b9acSAndroid Build Coastguard Worker #include <sys/endian.h>
58*1c60b9acSAndroid Build Coastguard Worker #endif
59*1c60b9acSAndroid Build Coastguard Worker #if defined(__linux__)
60*1c60b9acSAndroid Build Coastguard Worker #include <endian.h>
61*1c60b9acSAndroid Build Coastguard Worker #include <linux/if_packet.h>
62*1c60b9acSAndroid Build Coastguard Worker #include <net/if.h>
63*1c60b9acSAndroid Build Coastguard Worker #endif
64*1c60b9acSAndroid Build Coastguard Worker #if defined(__QNX__)
65*1c60b9acSAndroid Build Coastguard Worker 	#include <gulliver.h>
66*1c60b9acSAndroid Build Coastguard Worker 	#if defined(__LITTLEENDIAN__)
67*1c60b9acSAndroid Build Coastguard Worker 		#define BYTE_ORDER __LITTLEENDIAN__
68*1c60b9acSAndroid Build Coastguard Worker 		#define LITTLE_ENDIAN __LITTLEENDIAN__
69*1c60b9acSAndroid Build Coastguard Worker 		#define BIG_ENDIAN 4321  /* to show byte order (taken from gcc); for suppres warning that BIG_ENDIAN is not defined. */
70*1c60b9acSAndroid Build Coastguard Worker 	#endif
71*1c60b9acSAndroid Build Coastguard Worker 	#if defined(__BIGENDIAN__)
72*1c60b9acSAndroid Build Coastguard Worker 		#define BYTE_ORDER __BIGENDIAN__
73*1c60b9acSAndroid Build Coastguard Worker 		#define LITTLE_ENDIAN 1234  /* to show byte order (taken from gcc); for suppres warning that LITTLE_ENDIAN is not defined. */
74*1c60b9acSAndroid Build Coastguard Worker 		#define BIG_ENDIAN __BIGENDIAN__
75*1c60b9acSAndroid Build Coastguard Worker 	#endif
76*1c60b9acSAndroid Build Coastguard Worker #endif
77*1c60b9acSAndroid Build Coastguard Worker 
78*1c60b9acSAndroid Build Coastguard Worker #if defined(LWS_HAVE_PTHREAD_H)
79*1c60b9acSAndroid Build Coastguard Worker #include <pthread.h>
80*1c60b9acSAndroid Build Coastguard Worker typedef pthread_mutex_t lws_mutex_t;
81*1c60b9acSAndroid Build Coastguard Worker #define lws_mutex_init(x)	pthread_mutex_init(&(x), NULL)
82*1c60b9acSAndroid Build Coastguard Worker #define lws_mutex_destroy(x)	pthread_mutex_destroy(&(x))
83*1c60b9acSAndroid Build Coastguard Worker #define lws_mutex_lock(x)	pthread_mutex_lock(&(x))
84*1c60b9acSAndroid Build Coastguard Worker #define lws_mutex_unlock(x)	pthread_mutex_unlock(&(x))
85*1c60b9acSAndroid Build Coastguard Worker #endif
86*1c60b9acSAndroid Build Coastguard Worker 
87*1c60b9acSAndroid Build Coastguard Worker #if defined(__sun) && defined(__GNUC__)
88*1c60b9acSAndroid Build Coastguard Worker 
89*1c60b9acSAndroid Build Coastguard Worker #include <arpa/nameser_compat.h>
90*1c60b9acSAndroid Build Coastguard Worker 
91*1c60b9acSAndroid Build Coastguard Worker #if !defined (BYTE_ORDER)
92*1c60b9acSAndroid Build Coastguard Worker #define BYTE_ORDER __BYTE_ORDER__
93*1c60b9acSAndroid Build Coastguard Worker #endif
94*1c60b9acSAndroid Build Coastguard Worker 
95*1c60b9acSAndroid Build Coastguard Worker #if !defined(LITTLE_ENDIAN)
96*1c60b9acSAndroid Build Coastguard Worker #define LITTLE_ENDIAN __ORDER_LITTLE_ENDIAN__
97*1c60b9acSAndroid Build Coastguard Worker #endif
98*1c60b9acSAndroid Build Coastguard Worker 
99*1c60b9acSAndroid Build Coastguard Worker #if !defined(BIG_ENDIAN)
100*1c60b9acSAndroid Build Coastguard Worker #define BIG_ENDIAN __ORDER_BIG_ENDIAN__
101*1c60b9acSAndroid Build Coastguard Worker #endif
102*1c60b9acSAndroid Build Coastguard Worker 
103*1c60b9acSAndroid Build Coastguard Worker #endif /* sun + GNUC */
104*1c60b9acSAndroid Build Coastguard Worker 
105*1c60b9acSAndroid Build Coastguard Worker #if !defined(BYTE_ORDER)
106*1c60b9acSAndroid Build Coastguard Worker #define BYTE_ORDER __BYTE_ORDER
107*1c60b9acSAndroid Build Coastguard Worker #endif
108*1c60b9acSAndroid Build Coastguard Worker #if !defined(LITTLE_ENDIAN)
109*1c60b9acSAndroid Build Coastguard Worker #define LITTLE_ENDIAN __LITTLE_ENDIAN
110*1c60b9acSAndroid Build Coastguard Worker #endif
111*1c60b9acSAndroid Build Coastguard Worker #if !defined(BIG_ENDIAN)
112*1c60b9acSAndroid Build Coastguard Worker #define BIG_ENDIAN __BIG_ENDIAN
113*1c60b9acSAndroid Build Coastguard Worker #endif
114*1c60b9acSAndroid Build Coastguard Worker 
115*1c60b9acSAndroid Build Coastguard Worker #if defined(LWS_BUILTIN_GETIFADDRS)
116*1c60b9acSAndroid Build Coastguard Worker #include "./misc/getifaddrs.h"
117*1c60b9acSAndroid Build Coastguard Worker #else
118*1c60b9acSAndroid Build Coastguard Worker 
119*1c60b9acSAndroid Build Coastguard Worker #if defined(__HAIKU__)
120*1c60b9acSAndroid Build Coastguard Worker #define _BSD_SOURCE
121*1c60b9acSAndroid Build Coastguard Worker #endif
122*1c60b9acSAndroid Build Coastguard Worker #include <ifaddrs.h>
123*1c60b9acSAndroid Build Coastguard Worker 
124*1c60b9acSAndroid Build Coastguard Worker #endif
125*1c60b9acSAndroid Build Coastguard Worker 
126*1c60b9acSAndroid Build Coastguard Worker #if defined (__sun) || defined(__HAIKU__) || defined(__QNX__) || defined(__ANDROID__)
127*1c60b9acSAndroid Build Coastguard Worker #include <syslog.h>
128*1c60b9acSAndroid Build Coastguard Worker 
129*1c60b9acSAndroid Build Coastguard Worker #if defined(__ANDROID__)
130*1c60b9acSAndroid Build Coastguard Worker #include <sys/resource.h>
131*1c60b9acSAndroid Build Coastguard Worker #endif
132*1c60b9acSAndroid Build Coastguard Worker 
133*1c60b9acSAndroid Build Coastguard Worker #else
134*1c60b9acSAndroid Build Coastguard Worker #include <sys/syslog.h>
135*1c60b9acSAndroid Build Coastguard Worker #endif
136*1c60b9acSAndroid Build Coastguard Worker 
137*1c60b9acSAndroid Build Coastguard Worker #ifdef __QNX__
138*1c60b9acSAndroid Build Coastguard Worker # include "netinet/tcp_var.h"
139*1c60b9acSAndroid Build Coastguard Worker # define TCP_KEEPINTVL TCPCTL_KEEPINTVL
140*1c60b9acSAndroid Build Coastguard Worker # define TCP_KEEPIDLE  TCPCTL_KEEPIDLE
141*1c60b9acSAndroid Build Coastguard Worker # define TCP_KEEPCNT   TCPCTL_KEEPCNT
142*1c60b9acSAndroid Build Coastguard Worker #endif
143*1c60b9acSAndroid Build Coastguard Worker 
144*1c60b9acSAndroid Build Coastguard Worker #define LWS_ERRNO errno
145*1c60b9acSAndroid Build Coastguard Worker #define LWS_EAGAIN EAGAIN
146*1c60b9acSAndroid Build Coastguard Worker #define LWS_EALREADY EALREADY
147*1c60b9acSAndroid Build Coastguard Worker #define LWS_EINPROGRESS EINPROGRESS
148*1c60b9acSAndroid Build Coastguard Worker #define LWS_EINTR EINTR
149*1c60b9acSAndroid Build Coastguard Worker #define LWS_EISCONN EISCONN
150*1c60b9acSAndroid Build Coastguard Worker #define LWS_ENOTCONN ENOTCONN
151*1c60b9acSAndroid Build Coastguard Worker #define LWS_EWOULDBLOCK EWOULDBLOCK
152*1c60b9acSAndroid Build Coastguard Worker #define LWS_EADDRINUSE EADDRINUSE
153*1c60b9acSAndroid Build Coastguard Worker #define lws_set_blocking_send(wsi)
154*1c60b9acSAndroid Build Coastguard Worker #define LWS_SOCK_INVALID (-1)
155*1c60b9acSAndroid Build Coastguard Worker 
156*1c60b9acSAndroid Build Coastguard Worker struct lws_context;
157*1c60b9acSAndroid Build Coastguard Worker 
158*1c60b9acSAndroid Build Coastguard Worker struct lws *
159*1c60b9acSAndroid Build Coastguard Worker wsi_from_fd(const struct lws_context *context, int fd);
160*1c60b9acSAndroid Build Coastguard Worker 
161*1c60b9acSAndroid Build Coastguard Worker int
162*1c60b9acSAndroid Build Coastguard Worker insert_wsi(const struct lws_context *context, struct lws *wsi);
163*1c60b9acSAndroid Build Coastguard Worker 
164*1c60b9acSAndroid Build Coastguard Worker struct lws_dhcpc_ifstate;
165*1c60b9acSAndroid Build Coastguard Worker int
166*1c60b9acSAndroid Build Coastguard Worker lws_plat_ifconfig(int fd, struct lws_dhcpc_ifstate *is);
167*1c60b9acSAndroid Build Coastguard Worker 
168*1c60b9acSAndroid Build Coastguard Worker void
169*1c60b9acSAndroid Build Coastguard Worker delete_from_fd(const struct lws_context *context, int fd);
170*1c60b9acSAndroid Build Coastguard Worker 
171*1c60b9acSAndroid Build Coastguard Worker #ifndef LWS_NO_FORK
172*1c60b9acSAndroid Build Coastguard Worker #ifdef LWS_HAVE_SYS_PRCTL_H
173*1c60b9acSAndroid Build Coastguard Worker #include <sys/prctl.h>
174*1c60b9acSAndroid Build Coastguard Worker #endif
175*1c60b9acSAndroid Build Coastguard Worker #endif
176*1c60b9acSAndroid Build Coastguard Worker 
177*1c60b9acSAndroid Build Coastguard Worker #define compatible_close(x) close(x)
178*1c60b9acSAndroid Build Coastguard Worker #define compatible_file_close(fd) close(fd)
179*1c60b9acSAndroid Build Coastguard Worker #define lws_plat_socket_offset() (0)
180*1c60b9acSAndroid Build Coastguard Worker 
181*1c60b9acSAndroid Build Coastguard Worker /*
182*1c60b9acSAndroid Build Coastguard Worker  * Mac OSX as well as iOS do not define the MSG_NOSIGNAL flag,
183*1c60b9acSAndroid Build Coastguard Worker  * but happily have something equivalent in the SO_NOSIGPIPE flag.
184*1c60b9acSAndroid Build Coastguard Worker  */
185*1c60b9acSAndroid Build Coastguard Worker #ifdef __APPLE__
186*1c60b9acSAndroid Build Coastguard Worker /* iOS SDK 12+ seems to define it, undef it for compatibility both ways */
187*1c60b9acSAndroid Build Coastguard Worker #undef MSG_NOSIGNAL
188*1c60b9acSAndroid Build Coastguard Worker #define MSG_NOSIGNAL SO_NOSIGPIPE
189*1c60b9acSAndroid Build Coastguard Worker #endif
190*1c60b9acSAndroid Build Coastguard Worker 
191*1c60b9acSAndroid Build Coastguard Worker /*
192*1c60b9acSAndroid Build Coastguard Worker  * Solaris 11.X only supports POSIX 2001, MSG_NOSIGNAL appears in
193*1c60b9acSAndroid Build Coastguard Worker  * POSIX 2008.
194*1c60b9acSAndroid Build Coastguard Worker  */
195*1c60b9acSAndroid Build Coastguard Worker #if defined(__sun) && !defined(MSG_NOSIGNAL)
196*1c60b9acSAndroid Build Coastguard Worker  #define MSG_NOSIGNAL 0
197*1c60b9acSAndroid Build Coastguard Worker #endif
198*1c60b9acSAndroid Build Coastguard Worker 
199*1c60b9acSAndroid Build Coastguard Worker int
200*1c60b9acSAndroid Build Coastguard Worker lws_plat_rawudp_broadcast(uint8_t *p, const uint8_t *canned, size_t canned_len,
201*1c60b9acSAndroid Build Coastguard Worker 			  size_t n, int fd, const char *iface);
202*1c60b9acSAndroid Build Coastguard Worker 
203*1c60b9acSAndroid Build Coastguard Worker int
204*1c60b9acSAndroid Build Coastguard Worker lws_plat_if_up(const char *ifname, int fd, int up);
205