[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r5046 - in libmicrohttpd: . src/daemon src/include
From: |
gnunet |
Subject: |
[GNUnet-SVN] r5046 - in libmicrohttpd: . src/daemon src/include |
Date: |
Wed, 13 Jun 2007 18:09:32 -0600 (MDT) |
Author: grothoff
Date: 2007-06-13 18:09:32 -0600 (Wed, 13 Jun 2007)
New Revision: 5046
Modified:
libmicrohttpd/README
libmicrohttpd/src/daemon/daemon.c
libmicrohttpd/src/daemon/daemontest.c
libmicrohttpd/src/daemon/minimal_example.c
libmicrohttpd/src/daemon/response.c
libmicrohttpd/src/daemon/session.c
libmicrohttpd/src/include/microhttpd.h
Log:
extended API, setting content length automatically if needed
Modified: libmicrohttpd/README
===================================================================
--- libmicrohttpd/README 2007-06-13 23:09:25 UTC (rev 5045)
+++ libmicrohttpd/README 2007-06-14 00:09:32 UTC (rev 5046)
@@ -27,7 +27,12 @@
- send proper error code back if headers are too long
(investigate what we should do with those headers,
read? give user control?)
+- http 1.0 compatibility (if 1.0, force connection
+ close at the end!)
+
+
+
For IPv6:
=========
daemon.c:
@@ -41,3 +46,13 @@
- define appropriate APIs
- everything else
+
+Other:
+======
+- allow client to determine http 1.0 vs. 1.1
+ (API extension)
+- allow client to control size of input/output
+ buffers
+
+
+
Modified: libmicrohttpd/src/daemon/daemon.c
===================================================================
--- libmicrohttpd/src/daemon/daemon.c 2007-06-13 23:09:25 UTC (rev 5045)
+++ libmicrohttpd/src/daemon/daemon.c 2007-06-14 00:09:32 UTC (rev 5046)
@@ -467,6 +467,7 @@
strerror(errno));
return NULL;
}
+ /* FIXME: setsockopt: SO_REUSEADDR? */
memset(&servaddr,
0,
sizeof(struct sockaddr_in));
@@ -541,7 +542,8 @@
close(daemon->connections->socket_fd);
daemon->connections->socket_fd = -1;
}
- pthread_join(daemon->connections->pid, &unused);
+ if (0 != (daemon->options & MHD_USE_THREAD_PER_CONNECTION))
+ pthread_join(daemon->connections->pid, &unused);
MHD_cleanup_sessions(daemon);
}
Modified: libmicrohttpd/src/daemon/daemontest.c
===================================================================
--- libmicrohttpd/src/daemon/daemontest.c 2007-06-13 23:09:25 UTC (rev
5045)
+++ libmicrohttpd/src/daemon/daemontest.c 2007-06-14 00:09:32 UTC (rev
5046)
@@ -29,6 +29,7 @@
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
+#include <stdio.h>
static int testStartError() {
struct MHD_Daemon * d;
Modified: libmicrohttpd/src/daemon/minimal_example.c
===================================================================
--- libmicrohttpd/src/daemon/minimal_example.c 2007-06-13 23:09:25 UTC (rev
5045)
+++ libmicrohttpd/src/daemon/minimal_example.c 2007-06-14 00:09:32 UTC (rev
5046)
@@ -49,7 +49,7 @@
struct MHD_Response * response;
int ret;
- if (0 != strcmp(me, "GET"))
+ if (0 != strcmp(method, "GET"))
return MHD_NO; /* unexpected method */
response = MHD_create_response_from_data(strlen(me),
(void*) me,
Modified: libmicrohttpd/src/daemon/response.c
===================================================================
--- libmicrohttpd/src/daemon/response.c 2007-06-13 23:09:25 UTC (rev 5045)
+++ libmicrohttpd/src/daemon/response.c 2007-06-14 00:09:32 UTC (rev 5046)
@@ -126,6 +126,27 @@
/**
+ * Get a particular header from the response.
+ *
+ * @param key which header to get
+ * @return NULL if header does not exist
+ */
+const char *
+MHD_get_response_header(struct MHD_Response * response,
+ const char * key) {
+ struct MHD_HTTP_Header * pos;
+ pos = response->first_header;
+ while (pos != NULL) {
+ if (0 == strcmp(key,
+ pos->header))
+ return pos->value;
+ pos = pos->next;
+ }
+ return NULL;
+}
+
+
+/**
* Create a response object. The response object can be extended with
* header information and then be used any number of times.
*
Modified: libmicrohttpd/src/daemon/session.c
===================================================================
--- libmicrohttpd/src/daemon/session.c 2007-06-13 23:09:25 UTC (rev 5045)
+++ libmicrohttpd/src/daemon/session.c 2007-06-14 00:09:32 UTC (rev 5046)
@@ -111,7 +111,7 @@
(response == NULL) ||
(session->response != NULL) ||
(session->bodyReceived == 0) ||
- (session->headers_received == 0) )
+ (session->headersReceived == 0) )
return MHD_NO;
MHD_increment_response_rc(response);
session->response = response;
@@ -131,13 +131,13 @@
fd_set * write_fd_set,
fd_set * except_fd_set,
int * max_fd) {
- if ( (session->headers_received == 0) ||
+ if ( (session->headersReceived == 0) ||
(session->readLoc < session->read_buffer_size) )
FD_SET(session->socket_fd, read_fd_set);
if (session->response != NULL)
FD_SET(session->socket_fd, write_fd_set);
if ( (session->socket_fd > *max_fd) &&
- ( (session->headers_received == 0) ||
+ ( (session->headersReceived == 0) ||
(session->readLoc < session->read_buffer_size) ||
(session->response != NULL) ) )
*max_fd = session->socket_fd;
@@ -310,7 +310,7 @@
struct MHD_Access_Handler * ah;
unsigned int processed;
- if (session->headers_received == 0)
+ if (session->headersReceived == 0)
abort(); /* bad timing... */
ah = MHD_find_access_handler(session);
processed = session->readLoc;
@@ -356,7 +356,7 @@
if ( (session->readLoc >= session->read_buffer_size) &&
- (session->headers_received == 0) ) {
+ (session->headersReceived == 0) ) {
/* need to grow read buffer */
tmp = malloc(session->read_buffer_size * 2 + MHD_MAX_BUF_SIZE);
memcpy(tmp,
@@ -405,6 +405,34 @@
}
/**
+ * Check if we need to set some additional headers
+ * for http-compiliance.
+ */
+static void
+MHD_add_extra_headers(struct MHD_Session * session) {
+ const char * have;
+ char buf[128];
+
+ if (session->response->total_size == -1) {
+ have = MHD_get_response_header(session->response,
+ "Connection");
+ if (have == NULL)
+ MHD_add_response_header(session->response,
+ "Connection",
+ "close");
+ } else if (NULL == MHD_get_response_header(session->response,
+ "Content-length")) {
+ snprintf(buf,
+ 128,
+ "%llu",
+ (unsigned long long) session->response->total_size);
+ MHD_add_response_header(session->response,
+ "Content-length",
+ buf);
+ }
+}
+
+/**
* Allocate the session's write buffer and
* fill it with all of the headers from the
* HTTPd's response.
@@ -417,6 +445,7 @@
char code[32];
char * data;
+ MHD_add_extra_headers(session);
sprintf(code,
"HTTP/1.1 %u\r\n",
session->responseCode);
@@ -551,7 +580,7 @@
abort(); /* internal error */
if (session->messagePos == response->data_size) {
if ( (session->bodyReceived == 0) ||
- (session->headers_received == 0) )
+ (session->headersReceived == 0) )
abort(); /* internal error */
MHD_destroy_response(response);
session->responseCode = 0;
Modified: libmicrohttpd/src/include/microhttpd.h
===================================================================
--- libmicrohttpd/src/include/microhttpd.h 2007-06-13 23:09:25 UTC (rev
5045)
+++ libmicrohttpd/src/include/microhttpd.h 2007-06-14 00:09:32 UTC (rev
5046)
@@ -507,6 +507,17 @@
void * iterator_cls);
+/**
+ * Get a particular header from the response.
+ *
+ * @param key which header to get
+ * @return NULL if header does not exist
+ */
+const char *
+MHD_get_response_header(struct MHD_Response * response,
+ const char * key);
+
+
#if 0 /* keep Emacsens' auto-indent happy */
{
#endif
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r5046 - in libmicrohttpd: . src/daemon src/include,
gnunet <=