]> granicus.if.org Git - php/commitdiff
Detect and enable IPv6 support under win32.
authorWez Furlong <wez@php.net>
Sat, 6 Dec 2003 00:00:31 +0000 (00:00 +0000)
committerWez Furlong <wez@php.net>
Sat, 6 Dec 2003 00:00:31 +0000 (00:00 +0000)
The ws2tcpip.h header links to IPv6 functions dynamically
and the generated binary will run on win98 and later.

ext/ftp/ftp.c
ext/sockets/sockets.c
ext/standard/info.c
main/network.c
main/php_network.h
win32/build/config.w32
win32/build/confutils.js

index cc15b579f4a35f2d71f35fbe365e6923edf9f2db..d10e079ab94797378ffa8576754a653e370e2566 100644 (file)
@@ -714,7 +714,7 @@ ftp_pasv(ftpbuf_t *ftp, int pasv)
        memset(&ftp->pasvaddr, 0, n);
        sa = (struct sockaddr *) &ftp->pasvaddr;
 
-#ifdef HAVE_IPV6
+#if HAVE_IPV6
        if (getpeername(ftp->fd, sa, &n) < 0) {
                return 0;
        }
@@ -1454,7 +1454,7 @@ ftp_getdata(ftpbuf_t *ftp TSRMLS_DC)
 
        data->listener = fd;
 
-#ifdef HAVE_IPV6
+#if HAVE_IPV6
        if (sa->sa_family == AF_INET6) {
                /* need to use EPRT */
                char eprtarg[INET6_ADDRSTRLEN + sizeof("|x||xxxxx|")];
index e1e0418bb67c9c9d5e74b532f2262c66d18c3f72..5b626234fc369aa20a9189288d94c8243a786ef2 100644 (file)
@@ -357,12 +357,12 @@ static char *php_strerror(int error TSRMLS_DC)
        return (buf ? (char *) buf : "");
 }
 
-#ifdef HAVE_IPV6
+#if HAVE_IPV6
 /* Sets addr by hostname, or by ip in string form (AF_INET6) */
 static int php_set_inet6_addr(struct sockaddr_in6 *sin6, char *string, php_socket *php_sock TSRMLS_DC)
 {
        struct in6_addr tmp;
-#ifdef HAVE_GETADDRINFO
+#if HAVE_GETADDRINFO
        struct addrinfo hints;
        struct addrinfo *addrinfo = NULL;
 #endif
@@ -370,7 +370,7 @@ static int php_set_inet6_addr(struct sockaddr_in6 *sin6, char *string, php_socke
        if (inet_pton(AF_INET6, string, &tmp)) {
                memcpy(&(sin6->sin6_addr.s6_addr), &(tmp.s6_addr), sizeof(struct in6_addr));
        } else {
-#ifdef HAVE_GETADDRINFO
+#if HAVE_GETADDRINFO
 
                memset(&hints, 0, sizeof(struct addrinfo));
                hints.ai_family = PF_INET6;
@@ -450,7 +450,7 @@ PHP_MINIT_FUNCTION(sockets)
 
        REGISTER_LONG_CONSTANT("AF_UNIX",               AF_UNIX,                CONST_CS | CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("AF_INET",               AF_INET,                CONST_CS | CONST_PERSISTENT);
-#ifdef HAVE_IPV6
+#if HAVE_IPV6
        REGISTER_LONG_CONSTANT("AF_INET6",              AF_INET6,               CONST_CS | CONST_PERSISTENT);
 #endif
        REGISTER_LONG_CONSTANT("SOCK_STREAM",   SOCK_STREAM,    CONST_CS | CONST_PERSISTENT);
@@ -871,7 +871,7 @@ PHP_FUNCTION(socket_getsockname)
        php_socket                              *php_sock;
        struct sockaddr                 *sa;
        struct sockaddr_in              *sin;
-#ifdef HAVE_IPV6
+#if HAVE_IPV6
        struct sockaddr_in6             *sin6;
        char                                    addr6[INET6_ADDRSTRLEN+1];
 #endif
@@ -892,7 +892,7 @@ PHP_FUNCTION(socket_getsockname)
        }
        
        switch (sa->sa_family) {
-#ifdef HAVE_IPV6
+#if HAVE_IPV6
                case AF_INET6:
                        sin6 = (struct sockaddr_in6 *) sa;
                        inet_ntop(AF_INET6, &sin6->sin6_addr, addr6, INET6_ADDRSTRLEN);                 
@@ -947,7 +947,7 @@ PHP_FUNCTION(socket_getpeername)
        php_socket                              *php_sock;
        struct sockaddr                 *sa;
        struct sockaddr_in              *sin;
-#ifdef HAVE_IPV6
+#if HAVE_IPV6
        struct sockaddr_in6             *sin6;
        char                                    addr6[INET6_ADDRSTRLEN+1];
 #endif
@@ -968,7 +968,7 @@ PHP_FUNCTION(socket_getpeername)
        }
 
        switch (sa->sa_family) {
-#ifdef HAVE_IPV6
+#if HAVE_IPV6
                case AF_INET6:
                        sin6 = (struct sockaddr_in6 *) sa;
                        inet_ntop(AF_INET6, &sin6->sin6_addr, addr6, INET6_ADDRSTRLEN);                 
@@ -1029,7 +1029,7 @@ PHP_FUNCTION(socket_create)
     }
 
        if (arg1 != AF_UNIX 
-#ifdef HAVE_IPV6
+#if HAVE_IPV6
                && arg1 != AF_INET6
 #endif
                && arg1 != AF_INET) {
@@ -1063,7 +1063,7 @@ PHP_FUNCTION(socket_connect)
        zval                            *arg1;
        php_socket                      *php_sock;
        struct sockaddr_in      sin;
-#ifdef HAVE_IPV6
+#if HAVE_IPV6
        struct sockaddr_in6     sin6;
 #endif
        struct sockaddr_un      s_un;
@@ -1078,7 +1078,7 @@ PHP_FUNCTION(socket_connect)
        ZEND_FETCH_RESOURCE(php_sock, php_socket *, &arg1, -1, le_socket_name, le_socket);
 
        switch(php_sock->type) {
-#ifdef HAVE_IPV6
+#if HAVE_IPV6
                case AF_INET6:
                        if (argc != 3) {
                                php_error_docref(NULL TSRMLS_CC, E_WARNING, "Socket of type AF_INET6 requires 3 arguments");
@@ -1189,7 +1189,7 @@ PHP_FUNCTION(socket_bind)
                                retval = bind(php_sock->bsd_socket, (struct sockaddr *)sa, sizeof(struct sockaddr_in));
                                break;
                        }
-#ifdef HAVE_IPV6
+#if HAVE_IPV6
                case AF_INET6:
                        {
                                struct sockaddr_in6 *sa = (struct sockaddr_in6 *) sock_type;
@@ -1298,7 +1298,7 @@ PHP_FUNCTION(socket_recvfrom)
        php_socket                      *php_sock;
        struct sockaddr_un      s_un;
        struct sockaddr_in      sin;
-#ifdef HAVE_IPV6
+#if HAVE_IPV6
        struct sockaddr_in6     sin6;
        char                            addr6[INET6_ADDRSTRLEN];
 #endif
@@ -1361,7 +1361,7 @@ PHP_FUNCTION(socket_recvfrom)
                        ZVAL_STRING(arg5, address ? address : "0.0.0.0", 1);
                        ZVAL_LONG(arg6, ntohs(sin.sin_port));
                        break;
-#ifdef HAVE_IPV6
+#if HAVE_IPV6
                case AF_INET6:
                        slen = sizeof(sin6);
                        memset(&sin6, 0, slen);
@@ -1407,7 +1407,7 @@ PHP_FUNCTION(socket_sendto)
        php_socket                      *php_sock;
        struct sockaddr_un      s_un;
        struct sockaddr_in      sin;
-#ifdef HAVE_IPV6
+#if HAVE_IPV6
        struct sockaddr_in6     sin6;
 #endif
        int                                     retval, buf_len, addr_len;
@@ -1445,7 +1445,7 @@ PHP_FUNCTION(socket_sendto)
                        
                        retval = sendto(php_sock->bsd_socket, buf, (len > buf_len) ? buf_len : len, flags, (struct sockaddr *) &sin, sizeof(sin));
                        break;
-#ifdef HAVE_IPV6
+#if HAVE_IPV6
                case AF_INET6:
                        if (argc != 6) {
                                WRONG_PARAM_COUNT;
@@ -1647,7 +1647,7 @@ PHP_FUNCTION(socket_create_pair)
        php_sock[1] = (php_socket*)emalloc(sizeof(php_socket));
 
        if (domain != AF_INET 
-#ifdef HAVE_IPV6
+#if HAVE_IPV6
                && domain != AF_INET6
 #endif
                && domain != AF_UNIX) {
index 0e9b05c27979dec77d0570ff6cc785d455f9503b..7f22fb378a447b355991d339a0974b51da21afa2 100644 (file)
@@ -467,6 +467,11 @@ PHPAPI void php_print_info(int flag TSRMLS_DC)
                php_info_print_table_row(2, "Thread Safety", "disabled" );
 #endif
 
+#if HAVE_IPV6
+               php_info_print_table_row(2, "IPv6 Support", "enabled" );
+#else
+               php_info_print_table_row(2, "IPv6 Support", "disabled" );
+#endif
                {
                        HashTable *url_stream_wrappers_hash;
                        char *stream_protocol, *stream_protocols_buf = NULL;
index 1e7a04e240cf5ccc0717a834f65d991a149a9bcd..c176ba7499d6a22bdcf4fc2aa2fdd0a351086371 100644 (file)
@@ -103,7 +103,7 @@ int inet_aton(const char *, struct in_addr *);
 # define PHP_TIMEOUT_ERROR_VALUE               ETIMEDOUT
 #endif
 
-#ifdef HAVE_GETADDRINFO
+#if HAVE_GETADDRINFO
 #ifdef HAVE_GAI_STRERROR
 #  define PHP_GAI_STRERROR(x) (gai_strerror(x))
 #else
@@ -168,7 +168,7 @@ static int php_network_getaddresses(const char *host, int socktype, struct socka
 {
        struct sockaddr **sap;
        int n;
-#ifdef HAVE_GETADDRINFO
+#if HAVE_GETADDRINFO
        static int ipv6_borked = -1; /* the way this is used *is* thread safe */
        struct addrinfo hints, *res, *sai;
 #else
@@ -179,13 +179,13 @@ static int php_network_getaddresses(const char *host, int socktype, struct socka
        if (host == NULL) {
                return 0;
        }
-#ifdef HAVE_GETADDRINFO
+#if HAVE_GETADDRINFO
        memset(&hints, '\0', sizeof(hints));
                
        hints.ai_family = AF_INET; /* default to regular inet (see below) */
        hints.ai_socktype = socktype;
                
-# ifdef HAVE_IPV6
+# if HAVE_IPV6
        /* probe for a working IPv6 stack; even if detected as having v6 at compile
         * time, at runtime some stacks are slow to resolve or have other issues
         * if they are not correctly configured.
@@ -488,7 +488,7 @@ PHPAPI int php_network_parse_network_address_with_port(const char *addr, long ad
        struct sockaddr **psal;
        int n;
        char *errstr = NULL;
-#ifdef HAVE_IPV6
+#if HAVE_IPV6
        struct sockaddr_in6 *in6 = (struct sockaddr_in6*)sa;
 #endif
 
@@ -860,7 +860,7 @@ PHPAPI void php_any_addr(int family, php_sockaddr_storage *addr, unsigned short
 {
        memset(addr, 0, sizeof(php_sockaddr_storage));
        switch (family) {
-#ifdef HAVE_IPV6
+#if HAVE_IPV6
        case AF_INET6: {
                struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) addr;
                sin6->sin6_family = AF_INET6;
@@ -888,7 +888,7 @@ PHPAPI int php_sockaddr_size(php_sockaddr_storage *addr)
        switch (((struct sockaddr *)addr)->sa_family) {
        case AF_INET:
                return sizeof(struct sockaddr_in);
-#ifdef HAVE_IPV6
+#if HAVE_IPV6
        case AF_INET6:
                return sizeof(struct sockaddr_in6);
 #endif
index 3e9b908ca439190e8a752aa91c5ceab6d8557eb1..a694198df9281bdba3629cb506eb0d37714e7355 100644 (file)
 # endif
 # undef FD_SETSIZE
 # include "arpa/inet.h"
-# define socklen_t unsigned int
+# if HAVE_WS2TCPIP_H
+   /* IPv6 stuff, also defines socklen_t */
+#  include <ws2tcpip.h>
+# else
+typedef unsigned int socklen_t;
+# endif
 #else
 # undef closesocket
 # define closesocket close
index db080d0bcf327b7c7cb638757e504d92210c8971..11dca8cc1c1d2b7592a7d02d00fc61d5a14fd35d 100644 (file)
@@ -181,3 +181,17 @@ ADD_SOURCES("regex", "regcomp.c regerror.c regexec.c regfree.c");
 
 STDOUT.WriteBlankLines(1);
 
+/* Can we build with IPv6 support? */
+ARG_ENABLE("ipv6", "Disable IPv6 support (default is turn it on if available)", "yes");
+
+var main_network_has_ipv6 = 0;
+if (PHP_IPV6 == "yes") {
+       main_network_has_ipv6 = CHECK_HEADER_ADD_INCLUDE("ws2tcpip.h", "CFLAGS") ? 1 : 0;
+}
+if (main_network_has_ipv6) {
+       STDOUT.WriteLine("Enabling IPv6 support");
+}
+AC_DEFINE('HAVE_GETADDRINFO', main_network_has_ipv6);
+AC_DEFINE('HAVE_GAI_STRERROR', main_network_has_ipv6);
+AC_DEFINE('HAVE_IPV6', main_network_has_ipv6);
+
index a126817b26b267dbc4569af4c4667417f6ca3816..3275f18ae5d8f0d36ce35a440ea7d71b31800fce 100644 (file)
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-// $Id: confutils.js,v 1.17 2003-12-05 02:41:00 wez Exp $
+// $Id: confutils.js,v 1.18 2003-12-06 00:00:31 wez Exp $
 
 var STDOUT = WScript.StdOut;
 var STDERR = WScript.StdErr;
@@ -427,14 +427,14 @@ function CHECK_HEADER_ADD_INCLUDE(header_name, flag_name, path_to_check, use_env
 
        if (typeof(p) == "string") {
                ADD_FLAG(flag_name, '/I "' + p + '" ');
-               have = 1;
        } else if (p == false) {
                /* not found in the defaults or the explicit paths,
                 * so check the general extra includes; if we find
                 * it here, no need to add another /I for it as we
                 * already have it covered */
                p = search_paths(header_name, PHP_EXTRA_INCLUDES, null);
-       }
+       } 
+       have = p ? 1 : 0
 
        sym = header_name.toUpperCase();
        sym = sym.replace(new RegExp("[\\\\/\.-]", "g"), "_");