aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorReyk Floeter <reyk@esdenera.com>2014-07-14 20:02:43 +0200
committerReyk Floeter <reyk@esdenera.com>2014-07-14 20:02:43 +0200
commit788c33498ec649d73a73a8f65f73878a34e5d313 (patch)
treee1be34777901bfa12e296598f0ee05399da1a40e
parent96f89aa8441368158f5b347b90c13e1acbfdd149 (diff)
downloadhttpd-788c33498ec649d73a73a8f65f73878a34e5d313.tar.gz
httpd-788c33498ec649d73a73a8f65f73878a34e5d313.zip
sync
-rw-r--r--httpd.h2
-rw-r--r--server.c2
-rw-r--r--server_http.c10
3 files changed, 9 insertions, 5 deletions
diff --git a/httpd.h b/httpd.h
index 3834e80..bd24c43 100644
--- a/httpd.h
+++ b/httpd.h
@@ -398,7 +398,7 @@ int server_writeheader_http(struct client *);
int server_writeresponse_http(struct client *);
int server_response_http(struct client *, u_int, struct media_type *,
size_t);
-void server_reset_http(struct client *);
+void server_reset_http(struct client *, int);
void server_close_http(struct client *);
int server_response(struct httpd *, struct client *);
diff --git a/server.c b/server.c
index b72d556..977b864 100644
--- a/server.c
+++ b/server.c
@@ -412,7 +412,7 @@ server_error(struct bufferevent *bev, short error, void *arg)
return;
if (clt->clt_persist) {
- server_reset_http(clt);
+ server_reset_http(clt, 1);
bufferevent_enable(clt->clt_bev, EV_READ|EV_WRITE);
return;
} else
diff --git a/server_http.c b/server_http.c
index ad2add8..061e8a4 100644
--- a/server_http.c
+++ b/server_http.c
@@ -321,7 +321,6 @@ server_read_http(struct bufferevent *bev, void *arg)
if (clt->clt_toread <= 0) {
if (server_response(env, clt) == -1)
return;
- clt->clt_done = 0;
}
}
if (clt->clt_done) {
@@ -502,18 +501,23 @@ server_read_httpchunks(struct bufferevent *bev, void *arg)
}
void
-server_reset_http(struct client *clt)
+server_reset_http(struct client *clt, int all)
{
struct http_descriptor *desc = clt->clt_desc;
- server_httpdesc_free(desc);
desc->http_method = 0;
desc->http_chunked = 0;
+ desc->http_lastheader = NULL;
clt->clt_headerlen = 0;
clt->clt_line = 0;
clt->clt_done = 0;
clt->clt_toread = TOREAD_HTTP_HEADER;
clt->clt_bev->readcb = server_read_http;
+
+ if (!all)
+ return;
+
+ server_httpdesc_free(desc);
if (clt->clt_fd != -1) {
close(clt->clt_fd);
clt->clt_fd = -1;