wez Fri Dec 5 19:00:32 2003 EDT Modified files: /php-src/ext/ftp ftp.c /php-src/ext/sockets sockets.c /php-src/ext/standard info.c /php-src/main network.c php_network.h /php-src/win32/build config.w32 confutils.js Log: Detect and enable IPv6 support under win32. The ws2tcpip.h header links to IPv6 functions dynamically and the generated binary will run on win98 and later.
Index: php-src/ext/ftp/ftp.c diff -u php-src/ext/ftp/ftp.c:1.93 php-src/ext/ftp/ftp.c:1.94 --- php-src/ext/ftp/ftp.c:1.93 Thu Sep 18 13:51:55 2003 +++ php-src/ext/ftp/ftp.c Fri Dec 5 19:00:28 2003 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: ftp.c,v 1.93 2003/09/18 17:51:55 pollita Exp $ */ +/* $Id: ftp.c,v 1.94 2003/12/06 00:00:28 wez Exp $ */ #include "php.h" @@ -714,7 +714,7 @@ 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 @@ 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: php-src/ext/sockets/sockets.c diff -u php-src/ext/sockets/sockets.c:1.155 php-src/ext/sockets/sockets.c:1.156 --- php-src/ext/sockets/sockets.c:1.155 Fri Oct 24 14:44:40 2003 +++ php-src/ext/sockets/sockets.c Fri Dec 5 19:00:29 2003 @@ -19,7 +19,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: sockets.c,v 1.155 2003/10/24 18:44:40 helly Exp $ */ +/* $Id: sockets.c,v 1.156 2003/12/06 00:00:29 wez Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -357,12 +357,12 @@ 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 @@ 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 @@ 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_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 @@ } 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_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 @@ } 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 @@ } if (arg1 != AF_UNIX -#ifdef HAVE_IPV6 +#if HAVE_IPV6 && arg1 != AF_INET6 #endif && arg1 != AF_INET) { @@ -1063,7 +1063,7 @@ 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 @@ 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 @@ 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_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 @@ 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_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 @@ 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_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: php-src/ext/standard/info.c diff -u php-src/ext/standard/info.c:1.239 php-src/ext/standard/info.c:1.240 --- php-src/ext/standard/info.c:1.239 Mon Sep 22 00:18:24 2003 +++ php-src/ext/standard/info.c Fri Dec 5 19:00:30 2003 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: info.c,v 1.239 2003/09/22 04:18:24 iliaa Exp $ */ +/* $Id: info.c,v 1.240 2003/12/06 00:00:30 wez Exp $ */ #include "php.h" #include "php_ini.h" @@ -467,6 +467,11 @@ 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: php-src/main/network.c diff -u php-src/main/network.c:1.106 php-src/main/network.c:1.107 --- php-src/main/network.c:1.106 Tue Dec 2 18:13:43 2003 +++ php-src/main/network.c Fri Dec 5 19:00:31 2003 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: network.c,v 1.106 2003/12/02 23:13:43 wez Exp $ */ +/* $Id: network.c,v 1.107 2003/12/06 00:00:31 wez Exp $ */ /*#define DEBUG_MAIN_NETWORK 1*/ @@ -103,7 +103,7 @@ # 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 @@ { 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 @@ 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 @@ 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 @@ { 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 @@ 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: php-src/main/php_network.h diff -u php-src/main/php_network.h:1.47 php-src/main/php_network.h:1.48 --- php-src/main/php_network.h:1.47 Tue Dec 2 18:13:43 2003 +++ php-src/main/php_network.h Fri Dec 5 19:00:31 2003 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_network.h,v 1.47 2003/12/02 23:13:43 wez Exp $ */ +/* $Id: php_network.h,v 1.48 2003/12/06 00:00:31 wez Exp $ */ #ifndef _PHP_NETWORK_H #define _PHP_NETWORK_H @@ -27,7 +27,12 @@ # 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: php-src/win32/build/config.w32 diff -u php-src/win32/build/config.w32:1.10 php-src/win32/build/config.w32:1.11 --- php-src/win32/build/config.w32:1.10 Thu Dec 4 21:41:00 2003 +++ php-src/win32/build/config.w32 Fri Dec 5 19:00:31 2003 @@ -1,5 +1,5 @@ // vim:ft=javascript -// $Id: config.w32,v 1.10 2003/12/05 02:41:00 wez Exp $ +// $Id: config.w32,v 1.11 2003/12/06 00:00:31 wez Exp $ // "Master" config file; think of it as a configure.in // equivalent. @@ -181,3 +181,17 @@ 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: php-src/win32/build/confutils.js diff -u php-src/win32/build/confutils.js:1.17 php-src/win32/build/confutils.js:1.18 --- php-src/win32/build/confutils.js:1.17 Thu Dec 4 21:41:00 2003 +++ php-src/win32/build/confutils.js Fri Dec 5 19:00:31 2003 @@ -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 @@ 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"), "_");
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php