| /* |
| This file is part of libmicrohttpd |
| Copyright (C) 2008 Christian Grothoff (and other contributing authors) |
| |
| 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, write to the Free Software |
| Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
| */ |
| |
| /** |
| * @file platform.h |
| * @brief platform-specific includes for libmicrohttpd |
| * @author Christian Grothoff |
| * |
| * This file is included by the libmicrohttpd code |
| * before "microhttpd.h"; it provides the required |
| * standard headers (which are platform-specific).<p> |
| * |
| * Note that this file depends on our configure.ac |
| * build process and the generated config.h file. |
| * Hence you cannot include it directly in applications |
| * that use libmicrohttpd. |
| */ |
| #ifndef MHD_PLATFORM_H |
| #define MHD_PLATFORM_H |
| |
| #include "MHD_config.h" |
| |
| #ifndef BUILDING_MHD_LIB |
| #ifdef _MHD_EXTERN |
| #undef _MHD_EXTERN |
| #endif /* _MHD_EXTERN */ |
| #if defined(_WIN32) && defined(MHD_W32LIB) |
| #define _MHD_EXTERN extern |
| #elif defined (_WIN32) && defined(MHD_W32DLL) |
| #define _MHD_EXTERN __declspec(dllimport) |
| #else |
| #define _MHD_EXTERN extern |
| #endif |
| #elif !defined(_MHD_EXTERN) /* && BUILDING_MHD_LIB */ |
| #if defined(_WIN32) && defined(MHD_W32LIB) |
| #define _MHD_EXTERN extern |
| #elif defined (_WIN32) && defined(MHD_W32DLL) |
| #define _MHD_EXTERN extern __declspec(dllexport) |
| #else |
| #define _MHD_EXTERN extern |
| #endif |
| #endif /* BUILDING_MHD_LIB */ |
| |
| #define _XOPEN_SOURCE_EXTENDED 1 |
| #if OS390 |
| #define _OPEN_THREADS |
| #define _OPEN_SYS_SOCK_IPV6 |
| #define _OPEN_MSGQ_EXT |
| #define _LP64 |
| #endif |
| |
| #if defined(_WIN32) |
| #ifndef _WIN32_WINNT |
| #define _WIN32_WINNT 0x0501 |
| #else // _WIN32_WINNT |
| #if _WIN32_WINNT < 0x0501 |
| #error "Headers for Windows XP or later are required" |
| #endif // _WIN32_WINNT < 0x0501 |
| #endif // _WIN32_WINNT |
| #ifndef WIN32_LEAN_AND_MEAN |
| #define WIN32_LEAN_AND_MEAN 1 |
| #endif /* !WIN32_LEAN_AND_MEAN */ |
| #endif // _WIN32 |
| |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <stdint.h> |
| #include <string.h> |
| #ifdef HAVE_UNISTD_H |
| #include <unistd.h> |
| #endif |
| #include <stdarg.h> |
| #include <errno.h> |
| #include <fcntl.h> |
| #include <signal.h> |
| #include <stddef.h> |
| #ifdef MHD_USE_POSIX_THREADS |
| #undef HAVE_CONFIG_H |
| #include <pthread.h> |
| #define HAVE_CONFIG_H 1 |
| #endif // MHD_USE_POSIX_THREADS |
| |
| /* different OSes have fd_set in |
| a broad range of header files; |
| we just include most of them (if they |
| are available) */ |
| |
| |
| #ifdef OS_VXWORKS |
| #include <sockLib.h> |
| #include <netinet/in.h> |
| #include <stdarg.h> |
| #include <sys/mman.h> |
| #define RESTRICT __restrict__ |
| #endif |
| #if HAVE_MEMORY_H |
| #include <memory.h> |
| #endif |
| |
| #if HAVE_SYS_SELECT_H |
| #include <sys/select.h> |
| #endif |
| #if HAVE_SYS_TYPES_H |
| #include <sys/types.h> |
| #endif |
| #if HAVE_SYS_TIME_H |
| #include <sys/time.h> |
| #endif |
| #if HAVE_SYS_STAT_H |
| #include <sys/stat.h> |
| #endif |
| #if HAVE_SYS_MSG_H |
| #include <sys/msg.h> |
| #endif |
| #if HAVE_SYS_MMAN_H |
| #include <sys/mman.h> |
| #endif |
| #if HAVE_NETDB_H |
| #include <netdb.h> |
| #endif |
| #if HAVE_NETINET_IN_H |
| #include <netinet/in.h> |
| #endif |
| #if HAVE_TIME_H |
| #include <time.h> |
| #endif |
| #if HAVE_SYS_SOCKET_H |
| #include <sys/socket.h> |
| #endif |
| #if HAVE_ARPA_INET_H |
| #include <arpa/inet.h> |
| #endif |
| |
| |
| #if defined(_WIN32) && !defined(__CYGWIN__) |
| #include <ws2tcpip.h> |
| #define sleep(seconds) (SleepEx((seconds)*1000, 1)/1000) |
| #define usleep(useconds) (void)SleepEx((useconds)/1000, 1) |
| #endif |
| |
| #if !defined(SHUT_WR) && defined(SD_SEND) |
| #define SHUT_WR SD_SEND |
| #endif |
| #if !defined(SHUT_RD) && defined(SD_RECEIVE) |
| #define SHUT_RD SD_RECEIVE |
| #endif |
| #if !defined(SHUT_RDWR) && defined(SD_BOTH) |
| #define SHUT_RDWR SD_BOTH |
| #endif |
| |
| #if defined(_MSC_FULL_VER) && !defined (_SSIZE_T_DEFINED) |
| #define _SSIZE_T_DEFINED |
| typedef intptr_t ssize_t; |
| #endif // !_SSIZE_T_DEFINED */ |
| #ifndef MHD_SOCKET_DEFINED |
| /** |
| * MHD_socket is type for socket FDs |
| */ |
| #if !defined(_WIN32) || defined(_SYS_TYPES_FD_SET) |
| #define MHD_POSIX_SOCKETS 1 |
| typedef int MHD_socket; |
| #define MHD_INVALID_SOCKET (-1) |
| #else /* !defined(_WIN32) || defined(_SYS_TYPES_FD_SET) */ |
| #define MHD_WINSOCK_SOCKETS 1 |
| #include <winsock2.h> |
| typedef SOCKET MHD_socket; |
| #define MHD_INVALID_SOCKET (INVALID_SOCKET) |
| #endif /* !defined(_WIN32) || defined(_SYS_TYPES_FD_SET) */ |
| #define MHD_SOCKET_DEFINED 1 |
| #endif /* MHD_SOCKET_DEFINED */ |
| |
| /* Force don't use pipes on W32 */ |
| #if defined(_WIN32) && !defined(MHD_DONT_USE_PIPES) |
| #define MHD_DONT_USE_PIPES 1 |
| #endif /* defined(_WIN32) && !defined(MHD_DONT_USE_PIPES) */ |
| |
| /* MHD_pipe is type for pipe FDs*/ |
| #ifndef MHD_DONT_USE_PIPES |
| typedef int MHD_pipe; |
| #else /* ! MHD_DONT_USE_PIPES */ |
| typedef MHD_socket MHD_pipe; |
| #endif /* ! MHD_DONT_USE_PIPES */ |
| |
| #if !defined(IPPROTO_IPV6) && defined(_MSC_FULL_VER) && _WIN32_WINNT >= 0x0501 |
| /* VC use IPPROTO_IPV6 as part of enum */ |
| #define IPPROTO_IPV6 IPPROTO_IPV6 |
| #endif |
| |
| #endif |