Annotation of embedaddon/php/win32/inet.c, revision 1.1.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>