summaryrefslogtreecommitdiff
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
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.
-rw-r--r--ChangeLog4
-rw-r--r--src/conns.c3
-rw-r--r--src/conns.h3
-rw-r--r--src/reqs.c18
4 files changed, 19 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index 8fbb8d8..9c0d6d4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
2002-04-18 Robert James Kaes <rjkaes@flarenet.com>
+ * src/reqs.c: Added a new show_stats field in the conn_s structure
+ so that we will process the client's headers properly before
+ trying to send a HTTP response back.
+
* src/sock.c (getpeer_string): Removed the hstrerror() call since
it's not supported on all machines, and it's not really needed
anyway.
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()) {