From 7a889d47229be77573688d75c2cc84d76cdebef4 Mon Sep 17 00:00:00 2001 From: Lorenz Stechauner Date: Mon, 4 Jun 2018 22:53:32 +0200 Subject: [PATCH] PHP Error handling --- src/client.cpp | 79 +++++++++++++++++++++++++++++--------------------- 1 file changed, 46 insertions(+), 33 deletions(-) diff --git a/src/client.cpp b/src/client.cpp index 233b251..5ce28bf 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include "network/Socket.h" #include "network/http/HttpRequest.h" @@ -114,6 +115,7 @@ string getETag(string filename) { #include #include + long getPosition(std::string str, char c, int occurence) { int tempOccur = 0; int num = 0; @@ -292,53 +294,64 @@ bool connection_handler(const char *preprefix, const char *col1, const char *col } fclose(file); + int c = fgetc(pipes.stdout); + if (c == -1) { + // No Data -> Error + req.respond((statuscode == 0) ? 500 : statuscode); + statuscode = -1; + } else { + ungetc(c, pipes.stdout); + } file = pipes.stdout; } - statuscode = (statuscode == 0) ? 200 : statuscode; + if (statuscode != -1) { + statuscode = (statuscode == 0) ? 200 : statuscode; - bool compress = path.isStatic() && type.find("text/") == 0 && req.isExistingField("Accept-Encoding") && - req.getField("Accept-Encoding").find("deflate") != string::npos; + bool compress = path.isStatic() && type.find("text/") == 0 && + req.isExistingField("Accept-Encoding") && + req.getField("Accept-Encoding").find("deflate") != string::npos; - if (compress) { - req.setField("Accept-Ranges", "none"); - } + if (compress) { + req.setField("Accept-Ranges", "none"); + } - if (compress && req.isExistingField("Range")) { - req.respond(416); - } else if (req.isExistingField("Range")) { - string range = req.getField("Range"); - if (range.find("bytes=") != 0 || !path.isStatic()) { + if (compress && req.isExistingField("Range")) { req.respond(416); - } else { - fseek(file, 0L, SEEK_END); - long len = ftell(file); - fseek(file, 0L, SEEK_SET); - long p = range.find('-'); - if (p == string::npos) { + } else if (req.isExistingField("Range")) { + string range = req.getField("Range"); + if (range.find("bytes=") != 0 || !path.isStatic()) { req.respond(416); } else { - string part1 = range.substr(6, (unsigned long) (p - 6)); - string part2 = range.substr((unsigned long) (p + 1), - range.length() - p - 1); - long num1 = stol(part1, nullptr, 10); - long num2 = len - 1; - if (!part2.empty()) { - num2 = stol(part2, nullptr, 10); - } - if (num1 < 0 || num1 >= len || num2 < 0 || num2 >= len) { + fseek(file, 0L, SEEK_END); + long len = ftell(file); + fseek(file, 0L, SEEK_SET); + long p = range.find('-'); + if (p == string::npos) { req.respond(416); } else { - req.setField("Content-Range", - (string) "bytes " + to_string(num1) + "-" + - to_string(num2) + - "/" + to_string(len)); - req.respond(206, file, compress, num1, num2); + string part1 = range.substr(6, (unsigned long) (p - 6)); + string part2 = range.substr((unsigned long) (p + 1), + range.length() - p - 1); + long num1 = stol(part1, nullptr, 10); + long num2 = len - 1; + if (!part2.empty()) { + num2 = stol(part2, nullptr, 10); + } + if (num1 < 0 || num1 >= len || num2 < 0 || num2 >= len) { + req.respond(416); + } else { + req.setField("Content-Range", + (string) "bytes " + to_string(num1) + "-" + + to_string(num2) + + "/" + to_string(len)); + req.respond(206, file, compress, num1, num2); + } } } + } else { + req.respond(statuscode, file, compress); } - } else { - req.respond(statuscode, file, compress); } } }