diff options
Diffstat (limited to 'src/platform/w32functions.c')
-rw-r--r-- | src/platform/w32functions.c | 516 |
1 files changed, 1 insertions, 515 deletions
diff --git a/src/platform/w32functions.c b/src/platform/w32functions.c index 4b1e2c1c..20d8e344 100644 --- a/src/platform/w32functions.c +++ b/src/platform/w32functions.c @@ -31,521 +31,7 @@ #include <time.h> #include <stdio.h> #include <stdarg.h> - - -/** - * Return errno equivalent of last winsock error - * @return errno equivalent of last winsock error - */ -int MHD_W32_errno_from_winsock_(void) -{ - switch(WSAGetLastError()) - { - case 0: return 0; - case WSA_INVALID_HANDLE: return EBADF; - case WSA_NOT_ENOUGH_MEMORY: return ENOMEM; - case WSA_INVALID_PARAMETER: return EINVAL; - case WSAEINTR: return EINTR; - case WSAEWOULDBLOCK: return EWOULDBLOCK; - case WSAEINPROGRESS: return EINPROGRESS; - case WSAEALREADY: return EALREADY; - case WSAENOTSOCK: return ENOTSOCK; - case WSAEDESTADDRREQ: return EDESTADDRREQ; - case WSAEMSGSIZE: return EMSGSIZE; - case WSAEPROTOTYPE: return EPROTOTYPE; - case WSAENOPROTOOPT: return ENOPROTOOPT; - case WSAEPROTONOSUPPORT: return EPROTONOSUPPORT; - case WSAESOCKTNOSUPPORT: return ESOCKTNOSUPPORT; - case WSAEOPNOTSUPP: return EOPNOTSUPP; - case WSAEPFNOSUPPORT: return EPFNOSUPPORT; - case WSAEAFNOSUPPORT: return EAFNOSUPPORT; - case WSAEADDRINUSE: return EADDRINUSE; - case WSAEADDRNOTAVAIL: return EADDRNOTAVAIL; - case WSAENETDOWN: return ENETDOWN; - case WSAENETUNREACH: return ENETUNREACH; - case WSAENETRESET: return ENETRESET; - case WSAECONNABORTED: return ECONNABORTED; - case WSAECONNRESET: return ECONNRESET; - case WSAENOBUFS: return ENOBUFS; - case WSAEISCONN: return EISCONN; - case WSAENOTCONN: return ENOTCONN; - case WSAESHUTDOWN: return ESHUTDOWN; - case WSAETOOMANYREFS: return ETOOMANYREFS; - case WSAETIMEDOUT: return ETIMEDOUT; - case WSAECONNREFUSED: return ECONNREFUSED; - case WSAELOOP: return ELOOP; - case WSAENAMETOOLONG: return ENAMETOOLONG; - case WSAEHOSTDOWN: return EHOSTDOWN; - case WSAEHOSTUNREACH: return EHOSTUNREACH; - case WSAENOTEMPTY: return ENOTEMPTY; - case WSAEPROCLIM: return EPROCLIM; - case WSAEUSERS: return EUSERS; - case WSAEDQUOT: return EDQUOT; - case WSAESTALE: return ESTALE; - case WSAEREMOTE: return EREMOTE; - case WSAEINVAL: return EINVAL; - case WSAEFAULT: return EFAULT; - case WSANO_DATA: return ENODATA; - /* Rough equivalents */ - case WSAEDISCON: return ECONNRESET; - case WSAEINVALIDPROCTABLE: return EFAULT; - case WSASYSNOTREADY: - case WSANOTINITIALISED: - case WSASYSCALLFAILURE: return ENOBUFS; - case WSAVERNOTSUPPORTED: return EOPNOTSUPP; - case WSAEREFUSED: return EIO; - } - return EINVAL; -} - -/** - * 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) -{ - switch(errnum) - { - case 0: - return "No error"; - case EWOULDBLOCK: - return "Operation would block"; - case EINPROGRESS: - return "Connection already in progress"; - case EALREADY: - return "Socket already connected"; - case ENOTSOCK: - return "Socket operation on non-socket"; - case EDESTADDRREQ: - return "Destination address required"; - case EMSGSIZE: - return "Message too long"; - case EPROTOTYPE: - return "Protocol wrong type for socket"; - case ENOPROTOOPT: - return "Protocol not available"; - case EPROTONOSUPPORT: - return "Unknown protocol"; - case ESOCKTNOSUPPORT: - return "Socket type not supported"; - case EOPNOTSUPP: - return "Operation not supported on socket"; - case EPFNOSUPPORT: - return "Protocol family not supported"; - case EAFNOSUPPORT: - return "Address family not supported by protocol family"; - case EADDRINUSE: - return "Address already in use"; - case EADDRNOTAVAIL: - return "Cannot assign requested address"; - case ENETDOWN: - return "Network is down"; - case ENETUNREACH: - return "Network is unreachable"; - case ENETRESET: - return "Network dropped connection on reset"; - case ECONNABORTED: - return "Software caused connection abort"; - case ECONNRESET: - return "Connection reset by peer"; - case ENOBUFS: - return "No system resources available"; - case EISCONN: - return "Socket is already connected"; - case ENOTCONN: - return "Socket is not connected"; - case ESHUTDOWN: - return "Can't send after socket shutdown"; - case ETOOMANYREFS: - return "Too many references: cannot splice"; - case ETIMEDOUT: - return "Connection timed out"; - case ECONNREFUSED: - return "Connection refused"; - case ELOOP: - return "Cannot translate name"; - case EHOSTDOWN: - return "Host is down"; - case EHOSTUNREACH: - return "Host is unreachable"; - case EPROCLIM: - return "Too many processes"; - case EUSERS: - return "Too many users"; - case EDQUOT: - return "Disk quota exceeded"; - case ESTALE: - return "Stale file handle reference"; - case EREMOTE: - return "Resource is remote"; - case ENODATA: - return "No data available"; - } - return strerror(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) -{ - switch (WSAGetLastError()) - { - case 0: - return "No error"; - case WSA_INVALID_HANDLE: - return "Specified event object handle is invalid"; - case WSA_NOT_ENOUGH_MEMORY: - return "Insufficient memory available"; - case WSA_INVALID_PARAMETER: - return "One or more parameters are invalid"; - case WSA_OPERATION_ABORTED: - return "Overlapped operation aborted"; - case WSA_IO_INCOMPLETE: - return "Overlapped I/O event object not in signaled state"; - case WSA_IO_PENDING: - return "Overlapped operations will complete later"; - case WSAEINTR: - return "Interrupted function call"; - case WSAEBADF: - return "File handle is not valid"; - case WSAEACCES: - return "Permission denied"; - case WSAEFAULT: - return "Bad address"; - case WSAEINVAL: - return "Invalid argument"; - case WSAEMFILE: - return "Too many open files"; - case WSAEWOULDBLOCK: - return "Resource temporarily unavailable"; - case WSAEINPROGRESS: - return "Operation now in progress"; - case WSAEALREADY: - return "Operation already in progress"; - case WSAENOTSOCK: - return "Socket operation on nonsocket"; - case WSAEDESTADDRREQ: - return "Destination address required"; - case WSAEMSGSIZE: - return "Message too long"; - case WSAEPROTOTYPE: - return "Protocol wrong type for socket"; - case WSAENOPROTOOPT: - return "Bad protocol option"; - case WSAEPROTONOSUPPORT: - return "Protocol not supported"; - case WSAESOCKTNOSUPPORT: - return "Socket type not supported"; - case WSAEOPNOTSUPP: - return "Operation not supported"; - case WSAEPFNOSUPPORT: - return "Protocol family not supported"; - case WSAEAFNOSUPPORT: - return "Address family not supported by protocol family"; - case WSAEADDRINUSE: - return "Address already in use"; - case WSAEADDRNOTAVAIL: - return "Cannot assign requested address"; - case WSAENETDOWN: - return "Network is down"; - case WSAENETUNREACH: - return "Network is unreachable"; - case WSAENETRESET: - return "Network dropped connection on reset"; - case WSAECONNABORTED: - return "Software caused connection abort"; - case WSAECONNRESET: - return "Connection reset by peer"; - case WSAENOBUFS: - return "No buffer space available"; - case WSAEISCONN: - return "Socket is already connected"; - case WSAENOTCONN: - return "Socket is not connected"; - case WSAESHUTDOWN: - return "Cannot send after socket shutdown"; - case WSAETOOMANYREFS: - return "Too many references"; - case WSAETIMEDOUT: - return "Connection timed out"; - case WSAECONNREFUSED: - return "Connection refused"; - case WSAELOOP: - return "Cannot translate name"; - case WSAENAMETOOLONG: - return "Name too long"; - case WSAEHOSTDOWN: - return "Host is down"; - case WSAEHOSTUNREACH: - return "No route to host"; - case WSAENOTEMPTY: - return "Directory not empty"; - case WSAEPROCLIM: - return "Too many processes"; - case WSAEUSERS: - return "User quota exceeded"; - case WSAEDQUOT: - return "Disk quota exceeded"; - case WSAESTALE: - return "Stale file handle reference"; - case WSAEREMOTE: - return "Item is remote"; - case WSASYSNOTREADY: - return "Network subsystem is unavailable"; - case WSAVERNOTSUPPORTED: - return "Winsock.dll version out of range"; - case WSANOTINITIALISED: - return "Successful WSAStartup not yet performed"; - case WSAEDISCON: - return "Graceful shutdown in progress"; - case WSAENOMORE: - return "No more results"; - case WSAECANCELLED: - return "Call has been canceled"; - case WSAEINVALIDPROCTABLE: - return "Procedure call table is invalid"; - case WSAEINVALIDPROVIDER: - return "Service provider is invalid"; - case WSAEPROVIDERFAILEDINIT: - return "Service provider failed to initialize"; - case WSASYSCALLFAILURE: - return "System call failure"; - case WSASERVICE_NOT_FOUND: - return "Service not found"; - case WSATYPE_NOT_FOUND: - return "Class type not found"; - case WSA_E_NO_MORE: - return "No more results"; - case WSA_E_CANCELLED: - return "Call was canceled"; - case WSAEREFUSED: - return "Database query was refused"; - case WSAHOST_NOT_FOUND: - return "Host not found"; - case WSATRY_AGAIN: - return "Nonauthoritative host not found"; - case WSANO_RECOVERY: - return "This is a nonrecoverable error"; - case WSANO_DATA: - return "Valid name, no data record of requested type"; - case WSA_QOS_RECEIVERS: - return "QoS receivers"; - case WSA_QOS_SENDERS: - return "QoS senders"; - case WSA_QOS_NO_SENDERS: - return "No QoS senders"; - case WSA_QOS_NO_RECEIVERS: - return "QoS no receivers"; - case WSA_QOS_REQUEST_CONFIRMED: - return "QoS request confirmed"; - case WSA_QOS_ADMISSION_FAILURE: - return "QoS admission error"; - case WSA_QOS_POLICY_FAILURE: - return "QoS policy failure"; - case WSA_QOS_BAD_STYLE: - return "QoS bad style"; - case WSA_QOS_BAD_OBJECT: - return "QoS bad object"; - case WSA_QOS_TRAFFIC_CTRL_ERROR: - return "QoS traffic control error"; - case WSA_QOS_GENERIC_ERROR: - return "QoS generic error"; - case WSA_QOS_ESERVICETYPE: - return "QoS service type error"; - case WSA_QOS_EFLOWSPEC: - return "QoS flowspec error"; - case WSA_QOS_EPROVSPECBUF: - return "Invalid QoS provider buffer"; - case WSA_QOS_EFILTERSTYLE: - return "Invalid QoS filter style"; - case WSA_QOS_EFILTERTYPE: - return "Invalid QoS filter type"; - case WSA_QOS_EFILTERCOUNT: - return "Incorrect QoS filter count"; - case WSA_QOS_EOBJLENGTH: - return "Invalid QoS object length"; - case WSA_QOS_EFLOWCOUNT: - return "Incorrect QoS flow count"; - case WSA_QOS_EUNKOWNPSOBJ: - return "Unrecognized QoS object"; - case WSA_QOS_EPOLICYOBJ: - return "Invalid QoS policy object"; - case WSA_QOS_EFLOWDESC: - return "Invalid QoS flow descriptor"; - case WSA_QOS_EPSFLOWSPEC: - return "Invalid QoS provider-specific flowspec"; - case WSA_QOS_EPSFILTERSPEC: - return "Invalid QoS provider-specific filterspec"; - case WSA_QOS_ESDMODEOBJ: - return "Invalid QoS shape discard mode object"; - case WSA_QOS_ESHAPERATEOBJ: - return "Invalid QoS shaping rate object"; - case WSA_QOS_RESERVED_PETYPE: - return "Reserved policy QoS element type"; - } - return "Unknown winsock error"; -} - -/** - * 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) -{ - switch (errnum) - { - case 0: - WSASetLastError(0); - break; - case EBADF: - WSASetLastError(WSA_INVALID_HANDLE); - break; - case ENOMEM: - WSASetLastError(WSA_NOT_ENOUGH_MEMORY); - break; - case EINVAL: - WSASetLastError(WSA_INVALID_PARAMETER); - break; - case EINTR: - WSASetLastError(WSAEINTR); - break; - case EWOULDBLOCK: - WSASetLastError(WSAEWOULDBLOCK); - break; - case EINPROGRESS: - WSASetLastError(WSAEINPROGRESS); - break; - case EALREADY: - WSASetLastError(WSAEALREADY); - break; - case ENOTSOCK: - WSASetLastError(WSAENOTSOCK); - break; - case EDESTADDRREQ: - WSASetLastError(WSAEDESTADDRREQ); - break; - case EMSGSIZE: - WSASetLastError(WSAEMSGSIZE); - break; - case EPROTOTYPE: - WSASetLastError(WSAEPROTOTYPE); - break; - case ENOPROTOOPT: - WSASetLastError(WSAENOPROTOOPT); - break; - case EPROTONOSUPPORT: - WSASetLastError(WSAEPROTONOSUPPORT); - break; - case ESOCKTNOSUPPORT: - WSASetLastError(WSAESOCKTNOSUPPORT); - break; - case EOPNOTSUPP: - WSASetLastError(WSAEOPNOTSUPP); - break; - case EPFNOSUPPORT: - WSASetLastError(WSAEPFNOSUPPORT); - break; - case EAFNOSUPPORT: - WSASetLastError(WSAEAFNOSUPPORT); - break; - case EADDRINUSE: - WSASetLastError(WSAEADDRINUSE); - break; - case EADDRNOTAVAIL: - WSASetLastError(WSAEADDRNOTAVAIL); - break; - case ENETDOWN: - WSASetLastError(WSAENETDOWN); - break; - case ENETUNREACH: - WSASetLastError(WSAENETUNREACH); - break; - case ENETRESET: - WSASetLastError(WSAENETRESET); - break; - case ECONNABORTED: - WSASetLastError(WSAECONNABORTED); - break; - case ECONNRESET: - WSASetLastError(WSAECONNRESET); - break; - case ENOBUFS: - WSASetLastError(WSAENOBUFS); - break; - case EISCONN: - WSASetLastError(WSAEISCONN); - break; - case ENOTCONN: - WSASetLastError(WSAENOTCONN); - break; - case ESHUTDOWN: - WSASetLastError(WSAESHUTDOWN); - break; - case ETOOMANYREFS: - WSASetLastError(WSAETOOMANYREFS); - break; - case ETIMEDOUT: - WSASetLastError(WSAETIMEDOUT); - break; - case ECONNREFUSED: - WSASetLastError(WSAECONNREFUSED); - break; - case ELOOP: - WSASetLastError(WSAELOOP); - break; - case ENAMETOOLONG: - WSASetLastError(WSAENAMETOOLONG); - break; - case EHOSTDOWN: - WSASetLastError(WSAEHOSTDOWN); - break; - case EHOSTUNREACH: - WSASetLastError(WSAEHOSTUNREACH); - break; - case ENOTEMPTY: - WSASetLastError(WSAENOTEMPTY); - break; - case EPROCLIM: - WSASetLastError(WSAEPROCLIM); - break; - case EUSERS: - WSASetLastError(WSAEUSERS); - break; - case EDQUOT: - WSASetLastError(WSAEDQUOT); - break; - case ESTALE: - WSASetLastError(WSAESTALE); - break; - case EREMOTE: - WSASetLastError(WSAEREMOTE); - break; - case EFAULT: - WSASetLastError(WSAEFAULT); - break; - case ENODATA: - WSASetLastError(WSANO_DATA); - break; -#if EAGAIN != EWOULDBLOCK - case EAGAIN: - WSASetLastError(WSAEWOULDBLOCK); - break; -#endif - /* Rough equivalent */ - case EIO: - WSASetLastError(WSAEREFUSED); - break; - - default: /* Unmapped errors */ - WSASetLastError(WSAENOBUFS); - break; - } -} +#include "../microhttpd/mhd_sockets.h" /** * Create pair of mutually connected TCP/IP sockets on loopback address |