diff options
author | Christian Grothoff <christian@grothoff.org> | 2008-09-30 22:49:09 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2008-09-30 22:49:09 +0000 |
commit | 1e1ddd66fbf4921802c6bf2f7c99d24de8919e71 (patch) | |
tree | 6cdf8a77a48d4507b172987521d2bf341bb339b9 | |
parent | d89c24fb9eeae98406ae184b040a958f509f99df (diff) | |
download | libmicrohttpd-1e1ddd66fbf4921802c6bf2f7c99d24de8919e71.tar.gz libmicrohttpd-1e1ddd66fbf4921802c6bf2f7c99d24de8919e71.zip |
cygwin
-rw-r--r-- | AUTHORS | 1 | ||||
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | configure.ac | 22 | ||||
-rw-r--r-- | src/daemon/daemon.c | 31 |
4 files changed, 53 insertions, 5 deletions
@@ -12,6 +12,7 @@ Heikki Lindholm <holindho@cs.helsinki.fi> | |||
12 | Alex Sadovsky <alexeysad@gmail.com> | 12 | Alex Sadovsky <alexeysad@gmail.com> |
13 | Greg Schohn <greg.schohn@gmail.com> | 13 | Greg Schohn <greg.schohn@gmail.com> |
14 | Thomas Martin <Thomas.Martin@rohde-schwarz.com> | 14 | Thomas Martin <Thomas.Martin@rohde-schwarz.com> |
15 | Peter Ross <pross@xvid.org> | ||
15 | RuXu W <wrxzzj@gmail.com> | 16 | RuXu W <wrxzzj@gmail.com> |
16 | 17 | ||
17 | Documentation contributions also came from: | 18 | Documentation contributions also came from: |
@@ -1,3 +1,7 @@ | |||
1 | Tue Sep 30 16:48:08 MDT 2008 | ||
2 | Make MHD useful to Cygwin users; detect IPv6 headers | ||
3 | in configure. | ||
4 | |||
1 | Sun Sep 28 14:57:46 MDT 2008 | 5 | Sun 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 |
141 | 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]) | 140 | 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]) |
142 | 141 | ||
142 | # IPv6 | ||
143 | AC_MSG_CHECKING(for IPv6) | ||
144 | AC_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 | ],[ | ||
152 | int af=AF_INET6; | ||
153 | int pf=PF_INET6; | ||
154 | struct sockaddr_in6 sa; | ||
155 | ],[ | ||
156 | have_inet6=yes; | ||
157 | AC_DEFINE([HAVE_INET6], [1], [Provides IPv6 headers]) | ||
158 | ], | ||
159 | have_inet6=no | ||
160 | ) | ||
161 | AC_MSG_RESULT($have_inet6) | ||
162 | |||
143 | # libcurl (required for testing) | 163 | # libcurl (required for testing) |
144 | SAVE_LIBS=$LIBS | 164 | SAVE_LIBS=$LIBS |
145 | LIBCURL_CHECK_CONFIG(,,curl=1,curl=0) | 165 | 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) | |||
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; |