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 defined(WIN32) || defined(_WIN32) 25*1c60b9acSAndroid Build Coastguard Worker */ 26*1c60b9acSAndroid Build Coastguard Worker 27*1c60b9acSAndroid Build Coastguard Worker #ifndef WIN32_LEAN_AND_MEAN 28*1c60b9acSAndroid Build Coastguard Worker #define WIN32_LEAN_AND_MEAN 29*1c60b9acSAndroid Build Coastguard Worker #endif 30*1c60b9acSAndroid Build Coastguard Worker 31*1c60b9acSAndroid Build Coastguard Worker #if defined(WINVER) && (WINVER < 0x0501) 32*1c60b9acSAndroid Build Coastguard Worker #undef WINVER 33*1c60b9acSAndroid Build Coastguard Worker #undef _WIN32_WINNT 34*1c60b9acSAndroid Build Coastguard Worker #define WINVER 0x0501 35*1c60b9acSAndroid Build Coastguard Worker #define _WIN32_WINNT WINVER 36*1c60b9acSAndroid Build Coastguard Worker #endif 37*1c60b9acSAndroid Build Coastguard Worker 38*1c60b9acSAndroid Build Coastguard Worker #define LWS_NO_DAEMONIZE 39*1c60b9acSAndroid Build Coastguard Worker #define LWS_ERRNO WSAGetLastError() 40*1c60b9acSAndroid Build Coastguard Worker #define LWS_EAGAIN WSAEWOULDBLOCK 41*1c60b9acSAndroid Build Coastguard Worker #define LWS_EALREADY WSAEALREADY 42*1c60b9acSAndroid Build Coastguard Worker #define LWS_EINPROGRESS WSAEINPROGRESS 43*1c60b9acSAndroid Build Coastguard Worker #define LWS_EINTR WSAEINTR 44*1c60b9acSAndroid Build Coastguard Worker #define LWS_EISCONN WSAEISCONN 45*1c60b9acSAndroid Build Coastguard Worker #define LWS_ENOTCONN WSAENOTCONN 46*1c60b9acSAndroid Build Coastguard Worker #define LWS_EWOULDBLOCK WSAEWOULDBLOCK 47*1c60b9acSAndroid Build Coastguard Worker #define LWS_EADDRINUSE WSAEADDRINUSE 48*1c60b9acSAndroid Build Coastguard Worker #define MSG_NOSIGNAL 0 49*1c60b9acSAndroid Build Coastguard Worker #define SHUT_RDWR SD_BOTH 50*1c60b9acSAndroid Build Coastguard Worker #define SOL_TCP IPPROTO_TCP 51*1c60b9acSAndroid Build Coastguard Worker #define SHUT_WR SD_SEND 52*1c60b9acSAndroid Build Coastguard Worker 53*1c60b9acSAndroid Build Coastguard Worker #define compatible_close(fd) closesocket(fd) 54*1c60b9acSAndroid Build Coastguard Worker #define compatible_file_close(fd) CloseHandle(fd) 55*1c60b9acSAndroid Build Coastguard Worker #define lws_set_blocking_send(wsi) wsi->sock_send_blocking = 1 56*1c60b9acSAndroid Build Coastguard Worker 57*1c60b9acSAndroid Build Coastguard Worker #include <winsock2.h> 58*1c60b9acSAndroid Build Coastguard Worker #include <ws2tcpip.h> 59*1c60b9acSAndroid Build Coastguard Worker #include <windows.h> 60*1c60b9acSAndroid Build Coastguard Worker #include <tchar.h> 61*1c60b9acSAndroid Build Coastguard Worker #ifdef LWS_HAVE_IN6ADDR_H 62*1c60b9acSAndroid Build Coastguard Worker #include <in6addr.h> 63*1c60b9acSAndroid Build Coastguard Worker #endif 64*1c60b9acSAndroid Build Coastguard Worker #include <mstcpip.h> 65*1c60b9acSAndroid Build Coastguard Worker #include <io.h> 66*1c60b9acSAndroid Build Coastguard Worker 67*1c60b9acSAndroid Build Coastguard Worker #if defined(LWS_WITH_UNIX_SOCK) 68*1c60b9acSAndroid Build Coastguard Worker #include <afunix.h> 69*1c60b9acSAndroid Build Coastguard Worker #endif 70*1c60b9acSAndroid Build Coastguard Worker 71*1c60b9acSAndroid Build Coastguard Worker #if defined(LWS_WITH_TLS) 72*1c60b9acSAndroid Build Coastguard Worker #include <wincrypt.h> 73*1c60b9acSAndroid Build Coastguard Worker #endif 74*1c60b9acSAndroid Build Coastguard Worker 75*1c60b9acSAndroid Build Coastguard Worker #if defined(LWS_HAVE_PTHREAD_H) 76*1c60b9acSAndroid Build Coastguard Worker #define lws_mutex_t pthread_mutex_t 77*1c60b9acSAndroid Build Coastguard Worker #define lws_mutex_init(x) pthread_mutex_init(&(x), NULL) 78*1c60b9acSAndroid Build Coastguard Worker #define lws_mutex_destroy(x) pthread_mutex_destroy(&(x)) 79*1c60b9acSAndroid Build Coastguard Worker #define lws_mutex_lock(x) pthread_mutex_lock(&(x)) 80*1c60b9acSAndroid Build Coastguard Worker #define lws_mutex_unlock(x) pthread_mutex_unlock(&(x)) 81*1c60b9acSAndroid Build Coastguard Worker #endif 82*1c60b9acSAndroid Build Coastguard Worker 83*1c60b9acSAndroid Build Coastguard Worker #if !defined(LWS_HAVE_ATOLL) 84*1c60b9acSAndroid Build Coastguard Worker #if defined(LWS_HAVE__ATOI64) 85*1c60b9acSAndroid Build Coastguard Worker #define atoll _atoi64 86*1c60b9acSAndroid Build Coastguard Worker #else 87*1c60b9acSAndroid Build Coastguard Worker #warning No atoll or _atoi64 available, using atoi 88*1c60b9acSAndroid Build Coastguard Worker #define atoll atoi 89*1c60b9acSAndroid Build Coastguard Worker #endif 90*1c60b9acSAndroid Build Coastguard Worker #endif 91*1c60b9acSAndroid Build Coastguard Worker 92*1c60b9acSAndroid Build Coastguard Worker #ifndef __func__ 93*1c60b9acSAndroid Build Coastguard Worker #define __func__ __FUNCTION__ 94*1c60b9acSAndroid Build Coastguard Worker #endif 95*1c60b9acSAndroid Build Coastguard Worker 96*1c60b9acSAndroid Build Coastguard Worker #ifdef LWS_HAVE__VSNPRINTF 97*1c60b9acSAndroid Build Coastguard Worker #define vsnprintf _vsnprintf 98*1c60b9acSAndroid Build Coastguard Worker #endif 99*1c60b9acSAndroid Build Coastguard Worker 100*1c60b9acSAndroid Build Coastguard Worker /* we don't have an implementation for this on windows... */ 101*1c60b9acSAndroid Build Coastguard Worker int kill(int pid, int sig); 102*1c60b9acSAndroid Build Coastguard Worker int fork(void); 103*1c60b9acSAndroid Build Coastguard Worker #ifndef SIGINT 104*1c60b9acSAndroid Build Coastguard Worker #define SIGINT 2 105*1c60b9acSAndroid Build Coastguard Worker #endif 106*1c60b9acSAndroid Build Coastguard Worker 107*1c60b9acSAndroid Build Coastguard Worker #include <gettimeofday.h> 108*1c60b9acSAndroid Build Coastguard Worker 109*1c60b9acSAndroid Build Coastguard Worker #ifndef BIG_ENDIAN 110*1c60b9acSAndroid Build Coastguard Worker #define BIG_ENDIAN 4321 /* to show byte order (taken from gcc) */ 111*1c60b9acSAndroid Build Coastguard Worker #endif 112*1c60b9acSAndroid Build Coastguard Worker #ifndef LITTLE_ENDIAN 113*1c60b9acSAndroid Build Coastguard Worker #define LITTLE_ENDIAN 1234 114*1c60b9acSAndroid Build Coastguard Worker #endif 115*1c60b9acSAndroid Build Coastguard Worker #ifndef BYTE_ORDER 116*1c60b9acSAndroid Build Coastguard Worker #define BYTE_ORDER LITTLE_ENDIAN 117*1c60b9acSAndroid Build Coastguard Worker #endif 118*1c60b9acSAndroid Build Coastguard Worker 119*1c60b9acSAndroid Build Coastguard Worker #undef __P 120*1c60b9acSAndroid Build Coastguard Worker #ifndef __P 121*1c60b9acSAndroid Build Coastguard Worker #if __STDC__ 122*1c60b9acSAndroid Build Coastguard Worker #define __P(protos) protos 123*1c60b9acSAndroid Build Coastguard Worker #else 124*1c60b9acSAndroid Build Coastguard Worker #define __P(protos) () 125*1c60b9acSAndroid Build Coastguard Worker #endif 126*1c60b9acSAndroid Build Coastguard Worker #endif 127*1c60b9acSAndroid Build Coastguard Worker 128*1c60b9acSAndroid Build Coastguard Worker #ifdef _WIN32 129*1c60b9acSAndroid Build Coastguard Worker #ifndef FD_HASHTABLE_MODULUS 130*1c60b9acSAndroid Build Coastguard Worker #define FD_HASHTABLE_MODULUS 32 131*1c60b9acSAndroid Build Coastguard Worker #endif 132*1c60b9acSAndroid Build Coastguard Worker #endif 133*1c60b9acSAndroid Build Coastguard Worker 134*1c60b9acSAndroid Build Coastguard Worker #define lws_plat_socket_offset() (0) 135*1c60b9acSAndroid Build Coastguard Worker 136*1c60b9acSAndroid Build Coastguard Worker struct lws; 137*1c60b9acSAndroid Build Coastguard Worker struct lws_context; 138*1c60b9acSAndroid Build Coastguard Worker 139*1c60b9acSAndroid Build Coastguard Worker #define LWS_FD_HASH(fd) ((fd ^ (fd >> 8) ^ (fd >> 16)) % FD_HASHTABLE_MODULUS) 140*1c60b9acSAndroid Build Coastguard Worker struct lws_fd_hashtable { 141*1c60b9acSAndroid Build Coastguard Worker struct lws **wsi; 142*1c60b9acSAndroid Build Coastguard Worker int length; 143*1c60b9acSAndroid Build Coastguard Worker }; 144*1c60b9acSAndroid Build Coastguard Worker 145*1c60b9acSAndroid Build Coastguard Worker #if !defined(LWS_EXTERN) 146*1c60b9acSAndroid Build Coastguard Worker #ifdef LWS_DLL 147*1c60b9acSAndroid Build Coastguard Worker #ifdef LWS_INTERNAL 148*1c60b9acSAndroid Build Coastguard Worker #define LWS_EXTERN extern __declspec(dllexport) 149*1c60b9acSAndroid Build Coastguard Worker #else 150*1c60b9acSAndroid Build Coastguard Worker #define LWS_EXTERN extern __declspec(dllimport) 151*1c60b9acSAndroid Build Coastguard Worker #endif 152*1c60b9acSAndroid Build Coastguard Worker #else 153*1c60b9acSAndroid Build Coastguard Worker #define LWS_EXTERN 154*1c60b9acSAndroid Build Coastguard Worker #endif 155*1c60b9acSAndroid Build Coastguard Worker #endif 156*1c60b9acSAndroid Build Coastguard Worker 157*1c60b9acSAndroid Build Coastguard Worker typedef SOCKET lws_sockfd_type; 158*1c60b9acSAndroid Build Coastguard Worker #if defined(__MINGW32__) 159*1c60b9acSAndroid Build Coastguard Worker typedef int lws_filefd_type; 160*1c60b9acSAndroid Build Coastguard Worker #else 161*1c60b9acSAndroid Build Coastguard Worker typedef HANDLE lws_filefd_type; 162*1c60b9acSAndroid Build Coastguard Worker #endif 163*1c60b9acSAndroid Build Coastguard Worker #define LWS_WIN32_HANDLE_TYPES 164*1c60b9acSAndroid Build Coastguard Worker 165*1c60b9acSAndroid Build Coastguard Worker LWS_EXTERN struct lws * 166*1c60b9acSAndroid Build Coastguard Worker wsi_from_fd(const struct lws_context *context, lws_sockfd_type fd); 167*1c60b9acSAndroid Build Coastguard Worker 168*1c60b9acSAndroid Build Coastguard Worker LWS_EXTERN int 169*1c60b9acSAndroid Build Coastguard Worker insert_wsi(struct lws_context *context, struct lws *wsi); 170*1c60b9acSAndroid Build Coastguard Worker 171*1c60b9acSAndroid Build Coastguard Worker LWS_EXTERN int 172*1c60b9acSAndroid Build Coastguard Worker delete_from_fd(struct lws_context *context, lws_sockfd_type fd); 173