summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorRobert James Kaes <rjkaes@users.sourceforge.net>2002-04-16 03:20:43 +0000
committerRobert James Kaes <rjkaes@users.sourceforge.net>2002-04-16 03:20:43 +0000
commitca10b1353d59ab1d85ed6654dddec163cb91e347 (patch)
tree5006df56ebd42e1b7ff983a7fd334bdad7f9124c /src
parentc722851bcea53841cf47c3f9a3eb39e409b90de7 (diff)
Various code clean up. There is nothing new here, just mechanical changes
to the source to either remove code which is not needed, or consolidate common code into a common section.
Diffstat (limited to 'src')
-rw-r--r--src/reqs.c110
1 files changed, 43 insertions, 67 deletions
diff --git a/src/reqs.c b/src/reqs.c
index b212a1f..5f2cfec 100644
--- a/src/reqs.c
+++ b/src/reqs.c
@@ -1,4 +1,4 @@
-/* $Id: reqs.c,v 1.59 2002-04-15 04:14:03 rjkaes Exp $
+/* $Id: reqs.c,v 1.60 2002-04-16 03:20:43 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
@@ -9,7 +9,7 @@
* this feature for a buffering NNTP tunnel.)
*
* Copyright (C) 1998 Steven Young
- * Copyright (C) 1999-2001 Robert James Kaes (rjkaes@flarenet.com)
+ * Copyright (C) 1999-2002 Robert James Kaes (rjkaes@flarenet.com)
* Copyright (C) 2000 Chris Lightfoot (chris@ex-parrot.com)
*
* This program is free software; you can redistribute it and/or modify it
@@ -205,12 +205,8 @@ extract_http_url(const char *url, struct request_s *request)
request->host = safemalloc(strlen(url) + 1);
request->path = safemalloc(strlen(url) + 1);
- if (!request->host || !request->path) {
- safefree(request->host);
- safefree(request->path);
-
- return -1;
- }
+ if (!request->host || !request->path)
+ goto ERROR_EXIT;
if (sscanf
(url, "http://%[^:/]:%hu%s", request->host, &request->port,
@@ -225,14 +221,16 @@ extract_http_url(const char *url, struct request_s *request)
strcpy(request->path, "/");
} else {
log_message(LOG_ERR, "extract_http_url: Can't parse URL.");
-
- safefree(request->host);
- safefree(request->path);
-
- return -1;
+ goto ERROR_EXIT;
}
return 0;
+
+ ERROR_EXIT:
+ safefree(request->host);
+ safefree(request->path);
+
+ return -1;
}
/*
@@ -264,29 +262,18 @@ extract_ssl_url(const char *url, struct request_s *request)
static int
establish_http_connection(struct conn_s *connptr, struct request_s *request)
{
- if (write_message(connptr->server_fd,
- "%s %s HTTP/1.0\r\n",
- request->method, request->path) < 0)
- return -1;
-
- if (write_message(connptr->server_fd, "Host: %s\r\n", request->host) < 0)
- return -1;
-
- /*
- * Send the Connection header since we don't support persistant
- * connections.
- */
- if (safe_write(connptr->server_fd, "Connection: close\r\n", 19) < 0)
- return -1;
-
- return 0;
+ return write_message(connptr->server_fd,
+ "%s %s HTTP/1.0\r\n" \
+ "Host: %s\r\n" \
+ "Connection: close\r\n",
+ request->method, request->path, request->host);
}
/*
* These two defines are for the SSL tunnelling.
*/
-#define SSL_CONNECTION_RESPONSE "HTTP/1.0 200 Connection established\r\n"
-#define PROXY_AGENT "Proxy-agent: " PACKAGE "/" VERSION "\r\n"
+#define SSL_CONNECTION_RESPONSE "HTTP/1.0 200 Connection established"
+#define PROXY_AGENT "Proxy-agent: " PACKAGE "/" VERSION
/*
* Send the appropriate response to the client to establish a SSL
@@ -295,18 +282,11 @@ establish_http_connection(struct conn_s *connptr, struct request_s *request)
static inline int
send_ssl_response(struct conn_s *connptr)
{
- if (safe_write
- (connptr->client_fd, SSL_CONNECTION_RESPONSE,
- strlen(SSL_CONNECTION_RESPONSE)) < 0)
- return -1;
-
- if (safe_write(connptr->client_fd, PROXY_AGENT, strlen(PROXY_AGENT)) < 0)
- return -1;
-
- if (safe_write(connptr->client_fd, "\r\n", 2) < 0)
- return -1;
-
- return 0;
+ return write_message(connptr->client_fd,
+ "%s\r\n" \
+ "%s\r\n" \
+ "\r\n",
+ SSL_CONNECTION_RESPONSE, PROXY_AGENT);
}
/*
@@ -356,7 +336,7 @@ process_request(struct conn_s *connptr)
return NULL;
}
/*
- * NOTE: We need to add code for the simple HTTP/0.9 style GET
+ * FIXME: We need to add code for the simple HTTP/0.9 style GET
* request.
*/
@@ -481,25 +461,19 @@ pull_client_data(struct conn_s *connptr, unsigned long int length)
char *buffer;
ssize_t len;
- buffer = safemalloc(MAXBUFFSIZE);
+ buffer = safemalloc(min(MAXBUFFSIZE, length));
if (!buffer)
return -1;
do {
- len =
- safe_read(connptr->client_fd, buffer,
- min(MAXBUFFSIZE, length));
-
- if (len <= 0) {
- safefree(buffer);
- return -1;
- }
+ len = safe_read(connptr->client_fd, buffer,
+ min(MAXBUFFSIZE, length));
+ if (len <= 0)
+ goto ERROR_EXIT;
if (!connptr->error_string) {
- if (safe_write(connptr->server_fd, buffer, len) < 0) {
- safefree(buffer);
- return -1;
- }
+ if (safe_write(connptr->server_fd, buffer, len) < 0)
+ goto ERROR_EXIT;
}
length -= len;
@@ -507,6 +481,10 @@ pull_client_data(struct conn_s *connptr, unsigned long int length)
safefree(buffer);
return 0;
+
+ ERROR_EXIT:
+ safefree(buffer);
+ return -1;
}
#ifdef XTINYPROXY_ENABLE
@@ -523,7 +501,7 @@ add_xtinyproxy_header(struct conn_s *connptr)
/*
* Don't try to send if we have an invalid server handle.
*/
- if (connptr->server_fd == -1)
+ if (connptr->server_fd < 0)
return 0;
return write_message(connptr->server_fd,
@@ -541,10 +519,9 @@ static inline int
add_header_to_connection(hashmap_t hashofheaders, char *header, size_t len)
{
char *sep;
- size_t data_len;
/* Get rid of the new line and return at the end */
- chomp(header, len);
+ len -= chomp(header, len);
sep = strchr(header, ':');
if (!sep)
@@ -553,9 +530,10 @@ add_header_to_connection(hashmap_t hashofheaders, char *header, size_t len)
/* Blank out colons, spaces, and tabs. */
while (*sep == ':' || *sep == ' ' || *sep == '\t')
*sep++ = '\0';
-
- data_len = strlen(sep) + 1; /* need to add the null to the length */
- return hashmap_insert(hashofheaders, header, sep, data_len);
+
+ /* Calculate the new length of just the data */
+ len -= sep - header - 1;
+ return hashmap_insert(hashofheaders, header, sep, len);
}
/*
@@ -576,13 +554,11 @@ get_all_headers(int fd, hashmap_t hashofheaders)
* finished.
*/
if (CHECK_CRLF(header, len))
- break;
+ return 0;
if (add_header_to_connection(hashofheaders, header, len) < 0)
return -1;
}
-
- return 0;
}
/*
@@ -774,7 +750,7 @@ process_client_headers(struct conn_s *connptr)
hashmap_search(hashofheaders, data, (void **)&header);
- if (!is_anonymous_enabled() || anonymous_search(data) == 0) {
+ if (!is_anonymous_enabled() || anonymous_search(data) <= 0) {
write_message(connptr->server_fd,
"%s: %s\r\n",
data, header);