From 1e1ddd66fbf4921802c6bf2f7c99d24de8919e71 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Tue, 30 Sep 2008 22:49:09 +0000 Subject: cygwin --- AUTHORS | 1 + ChangeLog | 4 ++++ configure.ac | 22 +++++++++++++++++++++- src/daemon/daemon.c | 31 +++++++++++++++++++++++++++---- 4 files changed, 53 insertions(+), 5 deletions(-) diff --git a/AUTHORS b/AUTHORS index 5870bcb3..01a7944a 100644 --- a/AUTHORS +++ b/AUTHORS @@ -12,6 +12,7 @@ Heikki Lindholm Alex Sadovsky Greg Schohn Thomas Martin +Peter Ross RuXu W Documentation contributions also came from: diff --git a/ChangeLog b/ChangeLog index f312e129..5f1e49e8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Tue Sep 30 16:48:08 MDT 2008 + Make MHD useful to Cygwin users; detect IPv6 headers + in configure. + Sun Sep 28 14:57:46 MDT 2008 Unescape URIs (convert "%ef%e4%45" to "中国"). diff --git a/configure.ac b/configure.ac index 3d50f571..33b06283 100644 --- a/configure.ac +++ b/configure.ac @@ -104,7 +104,6 @@ netbsd*) ;; *cygwin*) AC_DEFINE_UNQUOTED(CYGWIN,1,[This is a Cygwin system]) - AC_DEFINE_UNQUOTED(WINDOWS,1,[This is a Windows system]) AM_CONDITIONAL(HAVE_GNU_LD, false) LDFLAGS="$LDFLAGS -no-undefined" ;; @@ -140,6 +139,27 @@ AC_CHECK_HEADERS([fcntl.h math.h errno.h limits.h stdio.h locale.h sys/stat.h sy # Check for optional headers AC_CHECK_HEADERS([sys/select.h sys/types.h sys/time.h sys/msg.h netdb.h netinet/in.h time.h sys/socket.h sys/mman.h arpa/inet.h]) +# IPv6 +AC_MSG_CHECKING(for IPv6) +AC_TRY_COMPILE([ +#if HAVE_NETINET_IN_H +#include +#endif +#if HAVE_SYS_SOCKET_H +#include +#endif +],[ +int af=AF_INET6; +int pf=PF_INET6; +struct sockaddr_in6 sa; +],[ +have_inet6=yes; +AC_DEFINE([HAVE_INET6], [1], [Provides IPv6 headers]) +], +have_inet6=no +) +AC_MSG_RESULT($have_inet6) + # libcurl (required for testing) SAVE_LIBS=$LIBS LIBCURL_CHECK_CONFIG(,,curl=1,curl=0) diff --git a/src/daemon/daemon.c b/src/daemon/daemon.c index 88e37c8c..7ff93ca0 100644 --- a/src/daemon/daemon.c +++ b/src/daemon/daemon.c @@ -341,8 +341,12 @@ MHD_accept_connection (struct MHD_Daemon *daemon) { struct MHD_Connection *pos; struct MHD_Connection *connection; - struct sockaddr_in6 addr6; - struct sockaddr *addr = (struct sockaddr *) &addr6; +#if HAVE_INET6 + struct sockaddr_in6 addrstorage; +#else + struct sockaddr_in addrstorage; +#endif + struct sockaddr *addr = (struct sockaddr *) &addrstorage; socklen_t addrlen; unsigned int have; int s, res_thread_create; @@ -350,10 +354,12 @@ MHD_accept_connection (struct MHD_Daemon *daemon) static int on = 1; #endif +#if HAVE_INET6 if (sizeof (struct sockaddr) > sizeof (struct sockaddr_in6)) abort (); /* fatal, serious error */ - addrlen = sizeof (struct sockaddr_in6); - memset (addr, 0, sizeof (struct sockaddr_in6)); +#endif + addrlen = sizeof (addrstorage); + memset (addr, 0, sizeof (addrstorage)); s = ACCEPT (daemon->socket_fd, addr, &addrlen); @@ -393,6 +399,7 @@ MHD_accept_connection (struct MHD_Daemon *daemon) sizeof (struct in_addr))) have++; } +#if HAVE_INET6 if (addrlen == sizeof (struct sockaddr_in6)) { const struct sockaddr_in6 *a1 = @@ -403,6 +410,7 @@ MHD_accept_connection (struct MHD_Daemon *daemon) sizeof (struct in6_addr))) have++; } +#endif } pos = pos->next; } @@ -826,7 +834,9 @@ MHD_start_daemon_va (unsigned int options, struct MHD_Daemon *retVal; int socket_fd; struct sockaddr_in servaddr4; +#if HAVE_INET6 struct sockaddr_in6 servaddr6; +#endif const struct sockaddr *servaddr = NULL; socklen_t addrlen; enum MHD_OPTION opt; @@ -931,7 +941,16 @@ MHD_start_daemon_va (unsigned int options, } if ((options & MHD_USE_IPv6) != 0) +#if HAVE_INET6 socket_fd = SOCKET (PF_INET6, SOCK_STREAM, 0); +#else + { +#if HAVE_MESSAGES + FPRINTF (stderr, "AF_INET6 not supported\n"); +#endif + return NULL; + } +#endif else socket_fd = SOCKET (PF_INET, SOCK_STREAM, 0); if (socket_fd < 0) @@ -954,12 +973,15 @@ MHD_start_daemon_va (unsigned int options, } /* check for user supplied sockaddr */ +#if HAVE_INET6 if ((options & MHD_USE_IPv6) != 0) addrlen = sizeof (struct sockaddr_in6); else +#endif addrlen = sizeof (struct sockaddr_in); if (NULL == servaddr) { +#if HAVE_INET6 if ((options & MHD_USE_IPv6) != 0) { memset (&servaddr6, 0, sizeof (struct sockaddr_in6)); @@ -968,6 +990,7 @@ MHD_start_daemon_va (unsigned int options, servaddr = (struct sockaddr *) &servaddr6; } else +#endif { memset (&servaddr4, 0, sizeof (struct sockaddr_in)); servaddr4.sin_family = AF_INET; -- cgit v1.2.3