From e1a66999b6e2a8de00e3e2fb3d73d0b86e534282 Mon Sep 17 00:00:00 2001 From: Nate Choe Date: Sun, 30 Jan 2022 21:37:47 -0600 Subject: [PATCH] Added error checking with sending responses --- example/logs | 8 ++++++++ example/site/easteregg.html | 2 ++ example/site/egg.png | Bin 0 -> 7416 bytes example/sitefile | 1 + src/connections.c | 16 +++++++++------- src/include/connections.h | 3 ++- src/responses.c | 1 + 7 files changed, 23 insertions(+), 8 deletions(-) create mode 100644 example/site/egg.png diff --git a/example/logs b/example/logs index 7e2e489..845393b 100644 --- a/example/logs +++ b/example/logs @@ -43,3 +43,11 @@ [2022-01-31T03:25:44Z] swebs started [2022-01-31T03:25:48Z] Couldn't find swebs user [2022-01-31T03:25:48Z] swebs started +[2022-01-31T03:35:13Z] Couldn't find swebs user +[2022-01-31T03:35:13Z] swebs started +[2022-01-31T03:35:35Z] Couldn't find swebs user +[2022-01-31T03:35:35Z] swebs started +[2022-01-31T03:36:20Z] Couldn't find swebs user +[2022-01-31T03:36:20Z] swebs started +[2022-01-31T03:37:29Z] Couldn't find swebs user +[2022-01-31T03:37:29Z] swebs started diff --git a/example/site/easteregg.html b/example/site/easteregg.html index 972bba0..2266a5a 100644 --- a/example/site/easteregg.html +++ b/example/site/easteregg.html @@ -1 +1,3 @@

You found the easter egg!

+ +

There should be a picture of an egg here, but it doesn't show. go to 127.0.0.1:8000/egg.png to see it.

diff --git a/example/site/egg.png b/example/site/egg.png new file mode 100644 index 0000000000000000000000000000000000000000..4b0fc4ddd17f5f246b784f3a8a4db0c3a5373060 GIT binary patch literal 7416 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 literal 0 HcmV?d00001 diff --git a/example/sitefile b/example/sitefile index 9bdbd0e..34e21ff 100644 --- a/example/sitefile +++ b/example/sitefile @@ -10,5 +10,6 @@ read /blog/.* site/blog/ #/blog/2021-1-25.html turns into site/blog//blog/2021-1-25.html set host 127.0.0.1:8000 read / site/easteregg.html +read /egg.png site/egg.png set host .* read /alldomains site/alldomains.html diff --git a/src/connections.c b/src/connections.c index 29ab843..87d7f77 100644 --- a/src/connections.c +++ b/src/connections.c @@ -200,17 +200,19 @@ static int processChar(Connection *conn, char c, Sitefile *site) { conn->receivedBody >= conn->bodylen) getResponse(conn, site); if (conn->progress == SEND_RESPONSE) { - for (;;) { + while (conn->len > 0) { char buffer[1024]; size_t readLen = read(conn->fd, buffer, sizeof(buffer)); - if (readLen == 0) - break; if (readLen < 0) return 1; - size_t writeLen = sendStream(conn->stream, - buffer, readLen); - if (writeLen < readLen) - return 1; + while (readLen > 0) { + size_t writeLen = sendStream(conn->stream, + buffer, readLen); + if (writeLen < 0) + return 1; + readLen -= writeLen; + } + conn->len -= readLen; } resetConnection(conn); } diff --git a/src/include/connections.h b/src/include/connections.h index 1d445d5..c91e439 100644 --- a/src/include/connections.h +++ b/src/include/connections.h @@ -55,7 +55,8 @@ typedef struct Connection { size_t receivedBody; int fd; - //the fd of the response + size_t len; + //the fd and length of the response left to send char *currLine; //persistent diff --git a/src/responses.c b/src/responses.c index 7f9bfa2..b11c91a 100644 --- a/src/responses.c +++ b/src/responses.c @@ -95,6 +95,7 @@ static int readResponse(Connection *conn, char *path) { goto error; lseek(fd, 0, SEEK_SET); sendHeader(conn, CODE_200, len); + conn->len = len; return fd; error: sendErrorResponse(conn, ERROR_500);