diff --git a/winpr/include/winpr/winsock.h b/winpr/include/winpr/winsock.h index d9cbe345e..647f6bc2c 100644 --- a/winpr/include/winpr/winsock.h +++ b/winpr/include/winpr/winsock.h @@ -22,14 +22,23 @@ #include #include +#include -#ifndef _WIN32 +#ifdef _WIN32 + +#if (_WIN32_WINNT < 0x0600) + +PCSTR inet_ntop(INT Family, PVOID pAddr, PSTR pStringBuf, size_t StringBufSize); + +#endif /* (_WIN32_WINNT < 0x0600) */ + +#else /* _WIN32 */ #include typedef struct sockaddr_storage SOCKADDR_STORAGE; -#endif +#endif /* _WIN32 */ #endif /* WINPR_WINSOCK_H */ diff --git a/winpr/include/winpr/wtypes.h b/winpr/include/winpr/wtypes.h index b9d2378d5..ba897a003 100644 --- a/winpr/include/winpr/wtypes.h +++ b/winpr/include/winpr/wtypes.h @@ -83,11 +83,12 @@ typedef unsigned __int3264 ULONG_PTR; typedef signed int LONG32; typedef signed __int64 LONG64; -typedef const char* LPCSTR; + +typedef CHAR* PSTR, *LPSTR; +typedef const CHAR *LPCSTR,*PCSTR; typedef WCHAR* LPWSTR, *PWSTR; typedef const WCHAR *LPCWSTR,*PCWSTR; -typedef char* PSTR, *LPSTR; typedef unsigned __int64 QWORD; typedef UCHAR* STRING; diff --git a/winpr/libwinpr/winsock/winsock.c b/winpr/libwinpr/winsock/winsock.c index 707458345..a8cc39eb9 100644 --- a/winpr/libwinpr/winsock/winsock.c +++ b/winpr/libwinpr/winsock/winsock.c @@ -208,8 +208,42 @@ * WSCWriteProviderOrderEx */ -#ifndef _WIN32 +#ifdef _WIN32 + +#if (_WIN32_WINNT < 0x0600) + +PCSTR inet_ntop(INT Family, PVOID pAddr, PSTR pStringBuf, size_t StringBufSize) +{ + if (Family == AF_INET) + { + struct sockaddr_in in; + + memset(&in, 0, sizeof(in)); + in.sin_family = AF_INET; + memcpy(&in.sin_addr, pAddr, sizeof(struct in_addr)); + getnameinfo((struct sockaddr*) &in, sizeof(struct sockaddr_in), pStringBuf, StringBufSize, NULL, 0, NI_NUMERICHOST); + + return pStringBuf; + } + else if (Family == AF_INET6) + { + struct sockaddr_in6 in; + + memset(&in, 0, sizeof(in)); + in.sin6_family = AF_INET6; + memcpy(&in.sin6_addr, pAddr, sizeof(struct in_addr6)); + getnameinfo((struct sockaddr*) &in, sizeof(struct sockaddr_in6), pStringBuf, StringBufSize, NULL, 0, NI_NUMERICHOST); + + return pStringBuf; + } + + return NULL; +} + +#endif /* (_WIN32_WINNT < 0x0600) */ + +#else /* _WIN32 */ -#endif +#endif /* _WIN32 */