/* This file is part of libmicrohttpd Copyright (C) 2014 Karlson2k (Evgeny Grin) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library. If not, see <http://www.gnu.org/licenses/>. */ /** * @file include/w32functions.h * @brief internal functions for W32 systems * @author Karlson2k (Evgeny Grin) */ #ifndef MHD_W32FUNCTIONS_H #define MHD_W32FUNCTIONS_H #ifndef _WIN32 #error w32functions.h is designed only for W32 systems #endif #include "platform.h" #include <errno.h> #include <winsock2.h> #include "platform_interface.h" #ifdef __cplusplus extern "C" { #endif #define MHDW32ERRBASE 3300 #ifndef EWOULDBLOCK #define EWOULDBLOCK (MHDW32ERRBASE+1) #endif #ifndef EINPROGRESS #define EINPROGRESS (MHDW32ERRBASE+2) #endif #ifndef EALREADY #define EALREADY (MHDW32ERRBASE+3) #endif #ifndef ENOTSOCK #define ENOTSOCK (MHDW32ERRBASE+4) #endif #ifndef EDESTADDRREQ #define EDESTADDRREQ (MHDW32ERRBASE+5) #endif #ifndef EMSGSIZE #define EMSGSIZE (MHDW32ERRBASE+6) #endif #ifndef EPROTOTYPE #define EPROTOTYPE (MHDW32ERRBASE+7) #endif #ifndef ENOPROTOOPT #define ENOPROTOOPT (MHDW32ERRBASE+8) #endif #ifndef EPROTONOSUPPORT #define EPROTONOSUPPORT (MHDW32ERRBASE+9) #endif #ifndef EOPNOTSUPP #define EOPNOTSUPP (MHDW32ERRBASE+10) #endif #ifndef EAFNOSUPPORT #define EAFNOSUPPORT (MHDW32ERRBASE+11) #endif #ifndef EADDRINUSE #define EADDRINUSE (MHDW32ERRBASE+12) #endif #ifndef EADDRNOTAVAIL #define EADDRNOTAVAIL (MHDW32ERRBASE+13) #endif #ifndef ENETDOWN #define ENETDOWN (MHDW32ERRBASE+14) #endif #ifndef ENETUNREACH #define ENETUNREACH (MHDW32ERRBASE+15) #endif #ifndef ENETRESET #define ENETRESET (MHDW32ERRBASE+16) #endif #ifndef ECONNABORTED #define ECONNABORTED (MHDW32ERRBASE+17) #endif #ifndef ECONNRESET #define ECONNRESET (MHDW32ERRBASE+18) #endif #ifndef ENOBUFS #define ENOBUFS (MHDW32ERRBASE+19) #endif #ifndef EISCONN #define EISCONN (MHDW32ERRBASE+20) #endif #ifndef ENOTCONN #define ENOTCONN (MHDW32ERRBASE+21) #endif #ifndef ETOOMANYREFS #define ETOOMANYREFS (MHDW32ERRBASE+22) #endif #ifndef ECONNREFUSED #define ECONNREFUSED (MHDW32ERRBASE+23) #endif #ifndef ELOOP #define ELOOP (MHDW32ERRBASE+24) #endif #ifndef EHOSTDOWN #define EHOSTDOWN (MHDW32ERRBASE+25) #endif #ifndef EHOSTUNREACH #define EHOSTUNREACH (MHDW32ERRBASE+26) #endif #ifndef EPROCLIM #define EPROCLIM (MHDW32ERRBASE+27) #endif #ifndef EUSERS #define EUSERS (MHDW32ERRBASE+28) #endif #ifndef EDQUOT #define EDQUOT (MHDW32ERRBASE+29) #endif #ifndef ESTALE #define ESTALE (MHDW32ERRBASE+30) #endif #ifndef EREMOTE #define EREMOTE (MHDW32ERRBASE+31) #endif #ifndef ESOCKTNOSUPPORT #define ESOCKTNOSUPPORT (MHDW32ERRBASE+32) #endif #ifndef EPFNOSUPPORT #define EPFNOSUPPORT (MHDW32ERRBASE+33) #endif #ifndef ESHUTDOWN #define ESHUTDOWN (MHDW32ERRBASE+34) #endif #ifndef ENODATA #define ENODATA (MHDW32ERRBASE+35) #endif #ifndef ETIMEDOUT #define ETIMEDOUT (MHDW32ERRBASE+36) #endif /** * Return errno equivalent of last winsock error * @return errno equivalent of last winsock error */ int MHD_W32_errno_from_winsock_(void); /** * Return pointer to string description of errnum error * Works fine with both standard errno errnums * and errnums from MHD_W32_errno_from_winsock_ * @param errnum the errno or value from MHD_W32_errno_from_winsock_() * @return pointer to string description of error */ const char* MHD_W32_strerror_(int errnum); /** * Return pointer to string description of last winsock error * @return pointer to string description of last winsock error */ const char* MHD_W32_strerror_last_winsock_(void); /** * Set last winsock error to equivalent of given errno value * @param errnum the errno value to set */ void MHD_W32_set_last_winsock_error_(int errnum); /** * Create pair of mutually connected TCP/IP sockets on loopback address * @param sockets_pair array to receive resulted sockets * @return zero on success, -1 otherwise */ int MHD_W32_pair_of_sockets_(SOCKET sockets_pair[2]); /** * Generate 31-bit pseudo random number. * Function initialize itself at first call to current time. * @return 31-bit pseudo random number. */ int MHD_W32_random_(void); /* Emulate snprintf function on W32 */ int W32_snprintf(char *__restrict s, size_t n, const char *__restrict format, ...); #ifndef _MSC_FULL_VER /* Thread name available only for VC-compiler */ static void W32_SetThreadName(const DWORD thread_id, const char *thread_name) { } #else /* _MSC_FULL_VER */ /** * Set thread name * @param thread_id ID of thread, -1 for current thread * @param thread_name name to set */ void W32_SetThreadName(const DWORD thread_id, const char *thread_name); #endif #ifdef __cplusplus } #endif #endif //MHD_W32FUNCTIONS_H