X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=src%2Fconnection.c;h=8f78bba6c373a6078b5421bb5787d5bbcb73fdea;hb=04a443914e05704e6fcf58b738dcde5f75ce6a97;hp=65714c7b6421dec5705cb1f9b3d6c8699446cfcc;hpb=4aa2eea6b3115cab6f3165c4391d523d5df61e51;p=tlsproxy%2Ftlsproxy.git
diff --git a/src/connection.c b/src/connection.c
index 65714c7..8f78bba 100644
--- a/src/connection.c
+++ b/src/connection.c
@@ -17,11 +17,9 @@
* along with this program. If not, see .
*/
-#include
+#include "tlsproxy.h"
+#include "connection.h"
-#include
-#include
-#include
/* close() */
#include
/* getaddrinfo() */
@@ -29,13 +27,10 @@
/* poll() */
#include
-#include "connection.h"
-#include "tlsproxy.h"
-
-/* Maximum line of the request line. Longer request lines are aborted with an
- * error. The standard doesn't specify a maximum line length but this should
- * be a good limit to make processing simpler. */
+/* Maximum line of a HTTP request line. Longer request lines are aborted with
+ * an error. The standard doesn't specify a maximum line length but this
+ * should be a good limit to make processing simpler. */
#define MAX_REQUEST_LINE 4096
@@ -76,10 +71,10 @@ void handle_connection(int client_socket) {
/* Read request line (CONNECT ..) and headers (they are discarded). */
result = read_http_request(client_fd, buffer, sizeof(buffer));
- if (result == -1) {
- /* Read error. */
+ if (-1 == result) {
+ /* Read error, client_fd already closed. */
return;
- } else if (result == -2) {
+ } else if (-2 == result) {
/* EOF */
send_close_bad_request(client_fd);
return;
@@ -115,6 +110,7 @@ void handle_connection(int client_socket) {
server_fd = fdopen(server_socket, "a+");
if (NULL == server_fd) {
send_close_forwarding_failure(client_fd);
+ close(server_socket);
return;
}
@@ -125,11 +121,11 @@ void handle_connection(int client_socket) {
/* Read response line from proxy server. */
result = read_http_request(server_fd, buffer, sizeof(buffer));
- if (result == -1) {
- /* Read error. */
+ if (-1 == result) {
+ /* Read error, server_fd already closed. */
send_close_forwarding_failure(client_fd);
return;
- } else if (result == -2) {
+ } else if (-2 == result) {
/* EOF */
fclose(server_fd);
send_close_forwarding_failure(client_fd);
@@ -275,8 +271,8 @@ static int read_from_write_to(int from, int to) {
return -1;
}
if (size_read != size_written) {
- printf("only written %ld of %ld bytes!\n", (long int)size_read,
- (long int)size_written);
+ printf("only written %ld of %ld bytes!\n", (long int)size_written,
+ (long int)size_read);
return -1;
}
@@ -343,7 +339,7 @@ static int connect_to_host(const char *hostname, const char *port) {
/* Parse HTTP CONNECT request string and save its parameters.
*
- * The following format is expected: "CONNECT host:port HTTP/1.y".
+ * The following format is expected: "CONNECT host:port HTTP/1.x".
*
* request and host must have the same size! port must be at least 6 bytes
* long (5 + '\0').