[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r5287 - libmicrohttpd/src/daemon
From: |
gnunet |
Subject: |
[GNUnet-SVN] r5287 - libmicrohttpd/src/daemon |
Date: |
Sun, 8 Jul 2007 23:20:21 -0600 (MDT) |
Author: grothoff
Date: 2007-07-08 23:20:20 -0600 (Sun, 08 Jul 2007)
New Revision: 5287
Modified:
libmicrohttpd/src/daemon/connection.c
libmicrohttpd/src/daemon/daemon.c
libmicrohttpd/src/daemon/daemontest_post.c
Log:
ipv6 support
Modified: libmicrohttpd/src/daemon/connection.c
===================================================================
--- libmicrohttpd/src/daemon/connection.c 2007-07-09 04:32:38 UTC (rev
5286)
+++ libmicrohttpd/src/daemon/connection.c 2007-07-09 05:20:20 UTC (rev
5287)
@@ -837,16 +837,18 @@
connection->method = NULL;
free(connection->url);
connection->url = NULL;
- free(connection->version);
- connection->version = NULL;
free(connection->write_buffer);
connection->write_buffer = NULL;
connection->write_buffer_size = 0;
- if (connection->read_close != 0) {
+ if ( (connection->read_close != 0) ||
+ (0 != strcasecmp("HTTP/1.1",
+ connection->version)) ) {
/* closed for reading => close for good! */
CLOSE(connection->socket_fd);
connection->socket_fd = -1;
}
+ free(connection->version);
+ connection->version = NULL;
}
return MHD_YES;
}
Modified: libmicrohttpd/src/daemon/daemon.c
===================================================================
--- libmicrohttpd/src/daemon/daemon.c 2007-07-09 04:32:38 UTC (rev 5286)
+++ libmicrohttpd/src/daemon/daemon.c 2007-07-09 05:20:20 UTC (rev 5287)
@@ -209,16 +209,20 @@
static int
MHD_accept_connection(struct MHD_Daemon * daemon) {
struct MHD_Connection * connection;
- struct sockaddr addr;
+ struct sockaddr_in6 addr6;
+ struct sockaddr * addr = (struct sockaddr*) &addr6;
socklen_t addrlen;
int s;
- addrlen = sizeof(struct sockaddr);
- memset(&addr,
+
+ if (sizeof(struct sockaddr) > sizeof(struct sockaddr_in6))
+ abort(); /* fatal, serious error */
+ addrlen = sizeof(struct sockaddr_in6);
+ memset(addr,
0,
- sizeof(struct sockaddr));
+ sizeof(struct sockaddr_in6));
s = ACCEPT(daemon->socket_fd,
- &addr,
+ addr,
&addrlen);
if ( (s < 0) ||
(addrlen <= 0) ) {
@@ -228,7 +232,7 @@
return MHD_NO;
}
if (MHD_NO == daemon->apc(daemon->apc_cls,
- &addr,
+ addr,
addrlen)) {
CLOSE(s);
return MHD_YES;
@@ -239,7 +243,7 @@
sizeof(struct MHD_Connection));
connection->addr = malloc(addrlen);
memcpy(connection->addr,
- &addr,
+ addr,
addrlen);
connection->addr_len = addrlen;
connection->socket_fd = s;
@@ -463,18 +467,23 @@
MHD_AccessHandlerCallback dh,
void * dh_cls,
...) {
+ const int on = 1;
struct MHD_Daemon * retVal;
int socket_fd;
- struct sockaddr_in servaddr;
-
+ struct sockaddr_in servaddr4;
+ struct sockaddr_in6 servaddr6;
+ const struct sockaddr * servaddr;
+ socklen_t addrlen;
+
if ((options & MHD_USE_SSL) != 0)
return NULL;
- if ((options & MHD_USE_IPv6) != 0)
- return NULL;
if ( (port == 0) ||
(dh == NULL) )
return NULL;
- socket_fd = SOCKET(AF_INET, SOCK_STREAM, 0);
+ if ((options & MHD_USE_IPv6) != 0)
+ socket_fd = SOCKET(PF_INET6, SOCK_STREAM, 0);
+ else
+ socket_fd = SOCKET(PF_INET, SOCK_STREAM, 0);
if (socket_fd < 0) {
if ((options & MHD_USE_DEBUG) != 0)
fprintf(stderr,
@@ -482,15 +491,35 @@
STRERROR(errno));
return NULL;
}
- /* FIXME: setsockopt: SO_REUSEADDR? */
- memset(&servaddr,
- 0,
- sizeof(struct sockaddr_in));
- servaddr.sin_family = AF_INET;
- servaddr.sin_port = htons(port);
+ if ( (SETSOCKOPT(socket_fd,
+ SOL_SOCKET,
+ SO_REUSEADDR,
+ &on,
+ sizeof(on)) < 0) &&
+ (options & MHD_USE_DEBUG) != 0)
+ fprintf(stderr,
+ "setsockopt failed: %s\n",
+ STRERROR(errno));
+ if ((options & MHD_USE_IPv6) != 0) {
+ memset(&servaddr6,
+ 0,
+ sizeof(struct sockaddr_in6));
+ servaddr6.sin6_family = AF_INET6;
+ servaddr6.sin6_port = htons(port);
+ servaddr = (struct sockaddr*) &servaddr6;
+ addrlen = sizeof(struct sockaddr_in6);
+ } else {
+ memset(&servaddr4,
+ 0,
+ sizeof(struct sockaddr_in));
+ servaddr4.sin_family = AF_INET;
+ servaddr4.sin_port = htons(port);
+ servaddr = (struct sockaddr*) &servaddr4;
+ addrlen = sizeof(struct sockaddr_in);
+ }
if (BIND(socket_fd,
- (struct sockaddr *)&servaddr,
- sizeof(struct sockaddr_in)) < 0) {
+ servaddr,
+ addrlen) < 0) {
if ( (options & MHD_USE_DEBUG) != 0)
fprintf(stderr,
"Failed to bind to port %u: %s\n",
Modified: libmicrohttpd/src/daemon/daemontest_post.c
===================================================================
--- libmicrohttpd/src/daemon/daemontest_post.c 2007-07-09 04:32:38 UTC (rev
5286)
+++ libmicrohttpd/src/daemon/daemontest_post.c 2007-07-09 05:20:20 UTC (rev
5287)
@@ -402,7 +402,7 @@
return 2;
errorCount += testInternalPost();
errorCount += testMultithreadedPost();
- errorCount += testExternalPost();
+ errorCount += testExternalPost();
if (errorCount != 0)
fprintf(stderr,
"Error (code: %u)\n",
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r5287 - libmicrohttpd/src/daemon,
gnunet <=