summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/ftp/ftp.c4
-rw-r--r--ext/sockets/sockets.c34
-rw-r--r--ext/standard/info.c5
-rw-r--r--main/network.c14
-rw-r--r--main/php_network.h7
-rw-r--r--win32/build/config.w3214
-rw-r--r--win32/build/confutils.js6
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"), "_");