From 62ee1c68a54bdc744cc2dac69cdeaa5585c93261 Mon Sep 17 00:00:00 2001 From: Niels Provos Date: Sat, 2 Dec 2006 21:29:54 +0000 Subject: merge from trunk: - CLOCK_MONOTONIC fixes - http content-length fixes svn:r292 --- evdns.c | 6 +++++- event.c | 6 +++++- http.c | 31 ++++++++++++++++++------------- 3 files changed, 28 insertions(+), 15 deletions(-) diff --git a/evdns.c b/evdns.c index 085ffa62..b61d0f2f 100644 --- a/evdns.c +++ b/evdns.c @@ -799,7 +799,11 @@ transaction_id_pick(void) { #ifdef DNS_USE_CPU_CLOCK_FOR_ID struct timespec ts; u16 trans_id; - if (clock_gettime(CLOCK_MONOTONIC, &ts)) +#ifdef CLOCK_MONOTONIC + if (clock_gettime(CLOCK_MONOTONIC, &ts) == -1) +#else + if (clock_gettime(CLOCK_REALTIME, &ts) == -1) +#endif event_err(1, "clock_gettime"); trans_id = ts.tv_nsec & 0xffff; #endif diff --git a/event.c b/event.c index b5bda5c4..864d4d26 100644 --- a/event.c +++ b/event.c @@ -149,8 +149,12 @@ gettime(struct timeval *tp) { #ifdef HAVE_CLOCK_GETTIME struct timespec ts; - + +#ifdef HAVE_CLOCK_MONOTONIC if (clock_gettime(CLOCK_MONOTONIC, &ts) == -1) +#else + if (clock_gettime(CLOCK_REALTIME, &ts) == -1) +#endif return (-1); tp->tv_sec = ts.tv_sec; tp->tv_usec = ts.tv_nsec / 1000; diff --git a/http.c b/http.c index 83f3dd80..c3036a96 100644 --- a/http.c +++ b/http.c @@ -302,21 +302,26 @@ evhttp_make_header_response(struct evhttp_connection *evcon, req->response_code_line); evbuffer_add(evcon->output_buffer, line, strlen(line)); - /* Potentially add headers */ - if (evhttp_find_header(req->output_headers, "Content-Type") == NULL) { + /* Potentially add headers for unidentified content. */ + if (EVBUFFER_LENGTH(req->output_buffer) && + evhttp_find_header(req->output_headers, "Content-Type") == NULL) { evhttp_add_header(req->output_headers, "Content-Type", "text/html; charset=ISO-8859-1"); - } - - /* - * we need to add the content length if the user did not give it, - * this is required for persistent connections to work. - */ - if (evhttp_find_header(req->output_headers, "Content-Length") == NULL){ - static char len[12]; - snprintf(len, sizeof(len), "%ld", - (long)EVBUFFER_LENGTH(req->output_buffer)); - evhttp_add_header(req->output_headers, "Content-Length", len); + /* + * we need to add the content length if the user did + * not give it, this is required for persistent + * connections to work. + */ + if (evhttp_find_header(req->output_headers, + "Transfer-Encoding") == NULL && + evhttp_find_header(req->output_headers, + "Content-Length") == NULL) { + static char len[12]; + snprintf(len, sizeof(len), "%ld", + (long)EVBUFFER_LENGTH(req->output_buffer)); + evhttp_add_header(req->output_headers, + "Content-Length", len); + } } /* if the request asked for a close, we send a close, too */ -- cgit v1.2.1