summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRobert James Kaes <rjkaes@users.sourceforge.net>2002-04-18 21:43:53 +0000
committerRobert James Kaes <rjkaes@users.sourceforge.net>2002-04-18 21:43:53 +0000
commit60f0a86c75ab6a34d38a6ffb402696127e9963e2 (patch)
treee5e6eff96c1f67204614b62bf68960ca63f8b0b8 /src
parent1691feb9bb25a95d3fac0aa6fbdaccf7ed374c19 (diff)
downloadtinyproxy-60f0a86c75ab6a34d38a6ffb402696127e9963e2.tar.gz
tinyproxy-60f0a86c75ab6a34d38a6ffb402696127e9963e2.zip
The stats now wait until after the client has finished sending all its
headers before sending the HTTP response back. This should be more standards compliant.
Diffstat (limited to 'src')
-rw-r--r--src/conns.c3
-rw-r--r--src/conns.h3
-rw-r--r--src/reqs.c18
3 files changed, 15 insertions, 9 deletions
diff --git a/src/conns.c b/src/conns.c
index 227998a..1d72bfe 100644
--- a/src/conns.c
+++ b/src/conns.c
@@ -1,4 +1,4 @@
-/* $Id: conns.c,v 1.9 2002-04-15 02:07:27 rjkaes Exp $
+/* $Id: conns.c,v 1.10 2002-04-18 21:43:52 rjkaes Exp $
*
* Create and free the connection structure. One day there could be
* other connnection related tasks put here, but for now the header
@@ -62,6 +62,7 @@ initialize_conn(int client_fd)
connptr->error_number = -1;
connptr->connect_method = FALSE;
+ connptr->show_stats = FALSE;
connptr->protocol.major = connptr->protocol.minor = 0;
diff --git a/src/conns.h b/src/conns.h
index bc05540..9fd9eea 100644
--- a/src/conns.h
+++ b/src/conns.h
@@ -1,4 +1,4 @@
-/* $Id: conns.h,v 1.8 2002-04-15 02:07:27 rjkaes Exp $
+/* $Id: conns.h,v 1.9 2002-04-18 21:43:53 rjkaes Exp $
*
* See 'conns.c' for a detailed description.
*
@@ -34,6 +34,7 @@ struct conn_s {
char *request_line;
bool_t connect_method;
+ bool_t show_stats;
/* Store the error response if there is one */
char *error_string;
diff --git a/src/reqs.c b/src/reqs.c
index a586dc6..1662b0e 100644
--- a/src/reqs.c
+++ b/src/reqs.c
@@ -1,4 +1,4 @@
-/* $Id: reqs.c,v 1.62 2002-04-18 17:58:52 rjkaes Exp $
+/* $Id: reqs.c,v 1.63 2002-04-18 21:43:53 rjkaes Exp $
*
* This is where all the work in tinyproxy is actually done. Incoming
* connections have a new thread created for them. The thread then
@@ -430,10 +430,9 @@ process_request(struct conn_s *connptr)
*/
if (config.stathost && strcmp(config.stathost, request->host) == 0) {
log_message(LOG_NOTICE, "Request for the stathost.");
+ connptr->show_stats = TRUE;
free_request_struct(request);
-
- showstats(connptr);
return NULL;
}
@@ -716,10 +715,11 @@ process_client_headers(struct conn_s *connptr)
}
/*
- * Don't send headers if there's already an error, or if this was
- * a CONNECT method (unless upstream proxy is in use.)
+ * Don't send headers if there's already an error, if the request was
+ * a stats request, or if this was a CONNECT method (unless upstream
+ * proxy is in use.)
*/
- if (connptr->server_fd == -1
+ if (connptr->server_fd == -1 || connptr->show_stats
|| (connptr->connect_method && !UPSTREAM_CONFIGURED())) {
log_message(LOG_INFO, "Not sending client headers to remote machine");
hashmap_delete(hashofheaders);
@@ -1143,7 +1143,7 @@ handle_connection(int fd)
request = process_request(connptr);
if (!request) {
- if (!connptr->error_string) {
+ if (!connptr->error_string && !connptr->show_stats) {
update_stats(STAT_BADCONN);
destroy_conn(connptr);
return;
@@ -1184,6 +1184,10 @@ handle_connection(int fd)
send_http_error_message(connptr);
destroy_conn(connptr);
return;
+ } else if (connptr->show_stats) {
+ showstats(connptr);
+ destroy_conn(connptr);
+ return;
}
if (!connptr->connect_method || UPSTREAM_CONFIGURED()) {