aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2008-09-30 22:49:09 +0000
committerChristian Grothoff <christian@grothoff.org>2008-09-30 22:49:09 +0000
commit1e1ddd66fbf4921802c6bf2f7c99d24de8919e71 (patch)
tree6cdf8a77a48d4507b172987521d2bf341bb339b9
parentd89c24fb9eeae98406ae184b040a958f509f99df (diff)
downloadlibmicrohttpd-1e1ddd66fbf4921802c6bf2f7c99d24de8919e71.tar.gz
libmicrohttpd-1e1ddd66fbf4921802c6bf2f7c99d24de8919e71.zip
cygwin
-rw-r--r--AUTHORS1
-rw-r--r--ChangeLog4
-rw-r--r--configure.ac22
-rw-r--r--src/daemon/daemon.c31
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 <holindho@cs.helsinki.fi>
12Alex Sadovsky <alexeysad@gmail.com> 12Alex Sadovsky <alexeysad@gmail.com>
13Greg Schohn <greg.schohn@gmail.com> 13Greg Schohn <greg.schohn@gmail.com>
14Thomas Martin <Thomas.Martin@rohde-schwarz.com> 14Thomas Martin <Thomas.Martin@rohde-schwarz.com>
15Peter Ross <pross@xvid.org>
15RuXu W <wrxzzj@gmail.com> 16RuXu W <wrxzzj@gmail.com>
16 17
17Documentation contributions also came from: 18Documentation contributions also came from:
diff --git a/ChangeLog b/ChangeLog
index f312e129..5f1e49e8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
1Tue Sep 30 16:48:08 MDT 2008
2 Make MHD useful to Cygwin users; detect IPv6 headers
3 in configure.
4
1Sun Sep 28 14:57:46 MDT 2008 5Sun Sep 28 14:57:46 MDT 2008
2 Unescape URIs (convert "%ef%e4%45" to "中国"). 6 Unescape URIs (convert "%ef%e4%45" to "中国").
3 7
diff --git a/configure.ac b/configure.ac
index 3d50f571..33b06283 100644
--- a/configure.ac
+++ b/configure.ac
@@ -104,7 +104,6 @@ netbsd*)
104 ;; 104 ;;
105*cygwin*) 105*cygwin*)
106 AC_DEFINE_UNQUOTED(CYGWIN,1,[This is a Cygwin system]) 106 AC_DEFINE_UNQUOTED(CYGWIN,1,[This is a Cygwin system])
107 AC_DEFINE_UNQUOTED(WINDOWS,1,[This is a Windows system])
108 AM_CONDITIONAL(HAVE_GNU_LD, false) 107 AM_CONDITIONAL(HAVE_GNU_LD, false)
109 LDFLAGS="$LDFLAGS -no-undefined" 108 LDFLAGS="$LDFLAGS -no-undefined"
110 ;; 109 ;;
@@ -140,6 +139,27 @@ AC_CHECK_HEADERS([fcntl.h math.h errno.h limits.h stdio.h locale.h sys/stat.h sy
140# Check for optional headers 139# Check for optional headers
141AC_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]) 140AC_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])
142 141
142# IPv6
143AC_MSG_CHECKING(for IPv6)
144AC_TRY_COMPILE([
145#if HAVE_NETINET_IN_H
146#include <netinet/in.h>
147#endif
148#if HAVE_SYS_SOCKET_H
149#include <sys/socket.h>
150#endif
151],[
152int af=AF_INET6;
153int pf=PF_INET6;
154struct sockaddr_in6 sa;
155],[
156have_inet6=yes;
157AC_DEFINE([HAVE_INET6], [1], [Provides IPv6 headers])
158],
159have_inet6=no
160)
161AC_MSG_RESULT($have_inet6)
162
143# libcurl (required for testing) 163# libcurl (required for testing)
144SAVE_LIBS=$LIBS 164SAVE_LIBS=$LIBS
145LIBCURL_CHECK_CONFIG(,,curl=1,curl=0) 165LIBCURL_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)
341{ 341{
342 struct MHD_Connection *pos; 342 struct MHD_Connection *pos;
343 struct MHD_Connection *connection; 343 struct MHD_Connection *connection;
344 struct sockaddr_in6 addr6; 344#if HAVE_INET6
345 struct sockaddr *addr = (struct sockaddr *) &addr6; 345 struct sockaddr_in6 addrstorage;
346#else
347 struct sockaddr_in addrstorage;
348#endif
349 struct sockaddr *addr = (struct sockaddr *) &addrstorage;
346 socklen_t addrlen; 350 socklen_t addrlen;
347 unsigned int have; 351 unsigned int have;
348 int s, res_thread_create; 352 int s, res_thread_create;
@@ -350,10 +354,12 @@ MHD_accept_connection (struct MHD_Daemon *daemon)
350 static int on = 1; 354 static int on = 1;
351#endif 355#endif
352 356
357#if HAVE_INET6
353 if (sizeof (struct sockaddr) > sizeof (struct sockaddr_in6)) 358 if (sizeof (struct sockaddr) > sizeof (struct sockaddr_in6))
354 abort (); /* fatal, serious error */ 359 abort (); /* fatal, serious error */
355 addrlen = sizeof (struct sockaddr_in6); 360#endif
356 memset (addr, 0, sizeof (struct sockaddr_in6)); 361 addrlen = sizeof (addrstorage);
362 memset (addr, 0, sizeof (addrstorage));
357 363
358 s = ACCEPT (daemon->socket_fd, addr, &addrlen); 364 s = ACCEPT (daemon->socket_fd, addr, &addrlen);
359 365
@@ -393,6 +399,7 @@ MHD_accept_connection (struct MHD_Daemon *daemon)
393 sizeof (struct in_addr))) 399 sizeof (struct in_addr)))
394 have++; 400 have++;
395 } 401 }
402#if HAVE_INET6
396 if (addrlen == sizeof (struct sockaddr_in6)) 403 if (addrlen == sizeof (struct sockaddr_in6))
397 { 404 {
398 const struct sockaddr_in6 *a1 = 405 const struct sockaddr_in6 *a1 =
@@ -403,6 +410,7 @@ MHD_accept_connection (struct MHD_Daemon *daemon)
403 sizeof (struct in6_addr))) 410 sizeof (struct in6_addr)))
404 have++; 411 have++;
405 } 412 }
413#endif
406 } 414 }
407 pos = pos->next; 415 pos = pos->next;
408 } 416 }
@@ -826,7 +834,9 @@ MHD_start_daemon_va (unsigned int options,
826 struct MHD_Daemon *retVal; 834 struct MHD_Daemon *retVal;
827 int socket_fd; 835 int socket_fd;
828 struct sockaddr_in servaddr4; 836 struct sockaddr_in servaddr4;
837#if HAVE_INET6
829 struct sockaddr_in6 servaddr6; 838 struct sockaddr_in6 servaddr6;
839#endif
830 const struct sockaddr *servaddr = NULL; 840 const struct sockaddr *servaddr = NULL;
831 socklen_t addrlen; 841 socklen_t addrlen;
832 enum MHD_OPTION opt; 842 enum MHD_OPTION opt;
@@ -931,7 +941,16 @@ MHD_start_daemon_va (unsigned int options,
931 } 941 }
932 942
933 if ((options & MHD_USE_IPv6) != 0) 943 if ((options & MHD_USE_IPv6) != 0)
944#if HAVE_INET6
934 socket_fd = SOCKET (PF_INET6, SOCK_STREAM, 0); 945 socket_fd = SOCKET (PF_INET6, SOCK_STREAM, 0);
946#else
947 {
948#if HAVE_MESSAGES
949 FPRINTF (stderr, "AF_INET6 not supported\n");
950#endif
951 return NULL;
952 }
953#endif
935 else 954 else
936 socket_fd = SOCKET (PF_INET, SOCK_STREAM, 0); 955 socket_fd = SOCKET (PF_INET, SOCK_STREAM, 0);
937 if (socket_fd < 0) 956 if (socket_fd < 0)
@@ -954,12 +973,15 @@ MHD_start_daemon_va (unsigned int options,
954 } 973 }
955 974
956 /* check for user supplied sockaddr */ 975 /* check for user supplied sockaddr */
976#if HAVE_INET6
957 if ((options & MHD_USE_IPv6) != 0) 977 if ((options & MHD_USE_IPv6) != 0)
958 addrlen = sizeof (struct sockaddr_in6); 978 addrlen = sizeof (struct sockaddr_in6);
959 else 979 else
980#endif
960 addrlen = sizeof (struct sockaddr_in); 981 addrlen = sizeof (struct sockaddr_in);
961 if (NULL == servaddr) 982 if (NULL == servaddr)
962 { 983 {
984#if HAVE_INET6
963 if ((options & MHD_USE_IPv6) != 0) 985 if ((options & MHD_USE_IPv6) != 0)
964 { 986 {
965 memset (&servaddr6, 0, sizeof (struct sockaddr_in6)); 987 memset (&servaddr6, 0, sizeof (struct sockaddr_in6));
@@ -968,6 +990,7 @@ MHD_start_daemon_va (unsigned int options,
968 servaddr = (struct sockaddr *) &servaddr6; 990 servaddr = (struct sockaddr *) &servaddr6;
969 } 991 }
970 else 992 else
993#endif
971 { 994 {
972 memset (&servaddr4, 0, sizeof (struct sockaddr_in)); 995 memset (&servaddr4, 0, sizeof (struct sockaddr_in));
973 servaddr4.sin_family = AF_INET; 996 servaddr4.sin_family = AF_INET;