diff options
-rw-r--r-- | ext/ftp/ftp.c | 4 | ||||
-rw-r--r-- | ext/sockets/sockets.c | 34 | ||||
-rw-r--r-- | ext/standard/info.c | 5 | ||||
-rw-r--r-- | main/network.c | 14 | ||||
-rw-r--r-- | main/php_network.h | 7 | ||||
-rw-r--r-- | win32/build/config.w32 | 14 | ||||
-rw-r--r-- | win32/build/confutils.js | 6 |
7 files changed, 54 insertions, 30 deletions
diff --git a/ext/ftp/ftp.c b/ext/ftp/ftp.c index cc15b579f4..d10e079ab9 100644 --- a/ext/ftp/ftp.c +++ b/ext/ftp/ftp.c @@ -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|")]; diff --git a/ext/sockets/sockets.c b/ext/sockets/sockets.c index e1e0418bb6..5b626234fc 100644 --- a/ext/sockets/sockets.c +++ b/ext/sockets/sockets.c @@ -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) { diff --git a/ext/standard/info.c b/ext/standard/info.c index 0e9b05c279..7f22fb378a 100644 --- a/ext/standard/info.c +++ b/ext/standard/info.c @@ -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; diff --git a/main/network.c b/main/network.c index 1e7a04e240..c176ba7499 100644 --- a/main/network.c +++ b/main/network.c @@ -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 diff --git a/main/php_network.h b/main/php_network.h index 3e9b908ca4..a694198df9 100644 --- a/main/php_network.h +++ b/main/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 diff --git a/win32/build/config.w32 b/win32/build/config.w32 index db080d0bcf..11dca8cc1c 100644 --- a/win32/build/config.w32 +++ b/win32/build/config.w32 @@ -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); + diff --git a/win32/build/confutils.js b/win32/build/confutils.js index a126817b26..3275f18ae5 100644 --- a/win32/build/confutils.js +++ b/win32/build/confutils.js @@ -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"), "_"); |