Home | History | Annotate | Download | only in include
      1 /*
      2   This file is part of libmicrohttpd
      3   Copyright (C) 2014 Karlson2k (Evgeny Grin)
      4 
      5   This library is free software; you can redistribute it and/or
      6   modify it under the terms of the GNU Lesser General Public
      7   License as published by the Free Software Foundation; either
      8   version 2.1 of the License, or (at your option) any later version.
      9 
     10   This library is distributed in the hope that it will be useful,
     11   but WITHOUT ANY WARRANTY; without even the implied warranty of
     12   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     13   Lesser General Public License for more details.
     14 
     15   You should have received a copy of the GNU Lesser General Public
     16   License along with this library.
     17   If not, see <http://www.gnu.org/licenses/>.
     18 */
     19 
     20 /**
     21  * @file include/w32functions.h
     22  * @brief  internal functions for W32 systems
     23  * @author Karlson2k (Evgeny Grin)
     24  */
     25 
     26 #ifndef MHD_W32FUNCTIONS_H
     27 #define MHD_W32FUNCTIONS_H
     28 #ifndef _WIN32
     29 #error w32functions.h is designed only for W32 systems
     30 #endif
     31 
     32 #include "platform.h"
     33 #include <errno.h>
     34 #include <winsock2.h>
     35 #include "platform_interface.h"
     36 
     37 #ifdef __cplusplus
     38 extern "C"
     39 {
     40 #endif
     41 
     42 #define MHDW32ERRBASE 3300
     43 
     44 #ifndef EWOULDBLOCK
     45 #define EWOULDBLOCK (MHDW32ERRBASE+1)
     46 #endif
     47 #ifndef EINPROGRESS
     48 #define EINPROGRESS (MHDW32ERRBASE+2)
     49 #endif
     50 #ifndef EALREADY
     51 #define EALREADY (MHDW32ERRBASE+3)
     52 #endif
     53 #ifndef ENOTSOCK
     54 #define ENOTSOCK (MHDW32ERRBASE+4)
     55 #endif
     56 #ifndef EDESTADDRREQ
     57 #define EDESTADDRREQ (MHDW32ERRBASE+5)
     58 #endif
     59 #ifndef EMSGSIZE
     60 #define EMSGSIZE (MHDW32ERRBASE+6)
     61 #endif
     62 #ifndef EPROTOTYPE
     63 #define EPROTOTYPE (MHDW32ERRBASE+7)
     64 #endif
     65 #ifndef ENOPROTOOPT
     66 #define ENOPROTOOPT (MHDW32ERRBASE+8)
     67 #endif
     68 #ifndef EPROTONOSUPPORT
     69 #define EPROTONOSUPPORT (MHDW32ERRBASE+9)
     70 #endif
     71 #ifndef EOPNOTSUPP
     72 #define EOPNOTSUPP (MHDW32ERRBASE+10)
     73 #endif
     74 #ifndef EAFNOSUPPORT
     75 #define EAFNOSUPPORT (MHDW32ERRBASE+11)
     76 #endif
     77 #ifndef EADDRINUSE
     78 #define EADDRINUSE (MHDW32ERRBASE+12)
     79 #endif
     80 #ifndef EADDRNOTAVAIL
     81 #define EADDRNOTAVAIL (MHDW32ERRBASE+13)
     82 #endif
     83 #ifndef ENETDOWN
     84 #define ENETDOWN (MHDW32ERRBASE+14)
     85 #endif
     86 #ifndef ENETUNREACH
     87 #define ENETUNREACH (MHDW32ERRBASE+15)
     88 #endif
     89 #ifndef ENETRESET
     90 #define ENETRESET (MHDW32ERRBASE+16)
     91 #endif
     92 #ifndef ECONNABORTED
     93 #define ECONNABORTED (MHDW32ERRBASE+17)
     94 #endif
     95 #ifndef ECONNRESET
     96 #define ECONNRESET (MHDW32ERRBASE+18)
     97 #endif
     98 #ifndef ENOBUFS
     99 #define ENOBUFS (MHDW32ERRBASE+19)
    100 #endif
    101 #ifndef EISCONN
    102 #define EISCONN (MHDW32ERRBASE+20)
    103 #endif
    104 #ifndef ENOTCONN
    105 #define ENOTCONN (MHDW32ERRBASE+21)
    106 #endif
    107 #ifndef ETOOMANYREFS
    108 #define ETOOMANYREFS (MHDW32ERRBASE+22)
    109 #endif
    110 #ifndef ECONNREFUSED
    111 #define ECONNREFUSED (MHDW32ERRBASE+23)
    112 #endif
    113 #ifndef ELOOP
    114 #define ELOOP (MHDW32ERRBASE+24)
    115 #endif
    116 #ifndef EHOSTDOWN
    117 #define EHOSTDOWN (MHDW32ERRBASE+25)
    118 #endif
    119 #ifndef EHOSTUNREACH
    120 #define EHOSTUNREACH (MHDW32ERRBASE+26)
    121 #endif
    122 #ifndef EPROCLIM
    123 #define EPROCLIM (MHDW32ERRBASE+27)
    124 #endif
    125 #ifndef EUSERS
    126 #define EUSERS (MHDW32ERRBASE+28)
    127 #endif
    128 #ifndef EDQUOT
    129 #define EDQUOT (MHDW32ERRBASE+29)
    130 #endif
    131 #ifndef ESTALE
    132 #define ESTALE (MHDW32ERRBASE+30)
    133 #endif
    134 #ifndef EREMOTE
    135 #define EREMOTE (MHDW32ERRBASE+31)
    136 #endif
    137 #ifndef ESOCKTNOSUPPORT
    138 #define ESOCKTNOSUPPORT (MHDW32ERRBASE+32)
    139 #endif
    140 #ifndef EPFNOSUPPORT
    141 #define EPFNOSUPPORT (MHDW32ERRBASE+33)
    142 #endif
    143 #ifndef ESHUTDOWN
    144 #define ESHUTDOWN (MHDW32ERRBASE+34)
    145 #endif
    146 #ifndef ENODATA
    147 #define ENODATA (MHDW32ERRBASE+35)
    148 #endif
    149 #ifndef ETIMEDOUT
    150 #define ETIMEDOUT (MHDW32ERRBASE+36)
    151 #endif
    152 
    153 /**
    154  * Return errno equivalent of last winsock error
    155  * @return errno equivalent of last winsock error
    156  */
    157 int MHD_W32_errno_from_winsock_(void);
    158 
    159 /**
    160  * Return pointer to string description of errnum error
    161  * Works fine with both standard errno errnums
    162  * and errnums from MHD_W32_errno_from_winsock_
    163  * @param errnum the errno or value from MHD_W32_errno_from_winsock_()
    164  * @return pointer to string description of error
    165  */
    166 const char* MHD_W32_strerror_(int errnum);
    167 
    168 /**
    169  * Return pointer to string description of last winsock error
    170  * @return pointer to string description of last winsock error
    171  */
    172 const char* MHD_W32_strerror_last_winsock_(void);
    173 
    174 /**
    175  * Set last winsock error to equivalent of given errno value
    176  * @param errnum the errno value to set
    177  */
    178 void MHD_W32_set_last_winsock_error_(int errnum);
    179 
    180 /**
    181  * Create pair of mutually connected TCP/IP sockets on loopback address
    182  * @param sockets_pair array to receive resulted sockets
    183  * @return zero on success, -1 otherwise
    184  */
    185 int MHD_W32_pair_of_sockets_(SOCKET sockets_pair[2]);
    186 
    187 /**
    188  * Generate 31-bit pseudo random number.
    189  * Function initialize itself at first call to current time.
    190  * @return 31-bit pseudo random number.
    191  */
    192 int MHD_W32_random_(void);
    193 
    194 /* Emulate snprintf function on W32 */
    195 int W32_snprintf(char *__restrict s, size_t n, const char *__restrict format, ...);
    196 
    197 #ifndef _MSC_FULL_VER
    198 /* Thread name available only for VC-compiler */
    199 static void W32_SetThreadName(const DWORD thread_id, const char *thread_name)
    200 { }
    201 #else  /* _MSC_FULL_VER */
    202 /**
    203  * Set thread name
    204  * @param thread_id ID of thread, -1 for current thread
    205  * @param thread_name name to set
    206  */
    207 void W32_SetThreadName(const DWORD thread_id, const char *thread_name);
    208 #endif
    209 
    210 #ifdef __cplusplus
    211 }
    212 #endif
    213 #endif //MHD_W32FUNCTIONS_H
    214