• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 */
W32_SetThreadName(const DWORD thread_id,const char * thread_name)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