Annotation of embedaddon/php/win32/inet.c, revision 1.1
1.1 ! misho 1: #include "config.w32.h"
! 2: #if (_WIN32_WINNT < 0x0600) /* Vista/2k8 have these functions */
! 3: #include "php.h"
! 4: #include <winsock2.h>
! 5: #include <windows.h>
! 6: #include <Ws2tcpip.h>
! 7:
! 8: #include "inet.h"
! 9:
! 10: PHPAPI int inet_pton(int af, const char* src, void* dst)
! 11: {
! 12: int address_length;
! 13: struct sockaddr_storage sa;
! 14: struct sockaddr_in *sin = (struct sockaddr_in *)&sa;
! 15: struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)&sa;
! 16:
! 17: switch (af) {
! 18: case AF_INET:
! 19: address_length = sizeof (struct sockaddr_in);
! 20: break;
! 21:
! 22: case AF_INET6:
! 23: address_length = sizeof (struct sockaddr_in6);
! 24: break;
! 25:
! 26: default:
! 27: return -1;
! 28: }
! 29:
! 30: if (WSAStringToAddress ((LPTSTR) src, af, NULL, (LPSOCKADDR) &sa, &address_length) == 0) {
! 31: switch (af) {
! 32: case AF_INET:
! 33: memcpy (dst, &sin->sin_addr, sizeof (struct in_addr));
! 34: break;
! 35:
! 36: case AF_INET6:
! 37: memcpy (dst, &sin6->sin6_addr, sizeof (struct in6_addr));
! 38: break;
! 39: }
! 40: return 1;
! 41: }
! 42:
! 43: return 0;
! 44: }
! 45:
! 46: PHPAPI const char* inet_ntop(int af, const void* src, char* dst, size_t size)
! 47: {
! 48: int address_length;
! 49: DWORD string_length = size;
! 50: struct sockaddr_storage sa;
! 51: struct sockaddr_in *sin = (struct sockaddr_in *)&sa;
! 52: struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)&sa;
! 53:
! 54: memset (&sa, 0, sizeof (sa));
! 55: switch (af) {
! 56: case AF_INET:
! 57: address_length = sizeof (struct sockaddr_in);
! 58: sin->sin_family = af;
! 59: memcpy (&sin->sin_addr, src, sizeof (struct in_addr));
! 60: break;
! 61:
! 62: case AF_INET6:
! 63: address_length = sizeof (struct sockaddr_in6);
! 64: sin6->sin6_family = af;
! 65: memcpy (&sin6->sin6_addr, src, sizeof (struct in6_addr));
! 66: break;
! 67:
! 68: default:
! 69: return NULL;
! 70: }
! 71:
! 72: if (WSAAddressToString ((LPSOCKADDR) &sa, address_length, NULL, dst, &string_length) == 0) {
! 73: return dst;
! 74: }
! 75:
! 76: return NULL;
! 77: }
! 78:
! 79: int inet_aton(const char *cp, struct in_addr *inp) {
! 80: inp->s_addr = inet_addr(cp);
! 81:
! 82: if (inp->s_addr == INADDR_NONE) {
! 83: return 0;
! 84: }
! 85:
! 86: return 1;
! 87: }
! 88: #endif
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>