diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/HttpRequest.cpp | 5 | ||||
-rw-r--r-- | src/HttpRequest.h | 3 | ||||
-rw-r--r-- | src/HttpResponse.cpp | 2 | ||||
-rw-r--r-- | src/HttpResponse.h | 3 | ||||
-rw-r--r-- | src/main.cpp | 19 |
5 files changed, 26 insertions, 6 deletions
diff --git a/src/HttpRequest.cpp b/src/HttpRequest.cpp index 351c971..27a5ce5 100644 --- a/src/HttpRequest.cpp +++ b/src/HttpRequest.cpp @@ -10,6 +10,11 @@ HttpRequest::HttpRequest(const std::string& request_string) while ((pos = s.find("\r\n")) != std::string::npos) { line = s.substr(0, pos); + if (line.find("GET ") != std::string::npos) { + m_uri = s.substr(4, line.find(" ", 5) - 4); + std::cout << m_uri << std::endl; + } + // If the line contains a colon, we assume it's a header. // TODO: This may not always be the case. size_t delim_pos = 0; diff --git a/src/HttpRequest.h b/src/HttpRequest.h index 5f3a9f5..3d20e57 100644 --- a/src/HttpRequest.h +++ b/src/HttpRequest.h @@ -6,7 +6,10 @@ class HttpRequest { public: HttpRequest(const std::string& request_string); + + std::string uri() const { return m_uri; } std::string header(const std::string& header_key) const { return m_headers.at(header_key); }; private: std::map<std::string, std::string> m_headers; + std::string m_uri; }; diff --git a/src/HttpResponse.cpp b/src/HttpResponse.cpp index a9ebbab..2adf84e 100644 --- a/src/HttpResponse.cpp +++ b/src/HttpResponse.cpp @@ -9,6 +9,8 @@ static std::string status_code_string(HttpStatusCode status_code) return "200 OK"; case HttpStatusCode::Forbidden: return "403 Forbidden"; + case HttpStatusCode::NotFound: + return "404 Not Found"; } } diff --git a/src/HttpResponse.h b/src/HttpResponse.h index c1d9762..3da6cb8 100644 --- a/src/HttpResponse.h +++ b/src/HttpResponse.h @@ -5,7 +5,8 @@ enum class HttpStatusCode { OK = 200, - Forbidden = 403 + Forbidden = 403, + NotFound = 404 }; class HttpResponse { diff --git a/src/main.cpp b/src/main.cpp index 25fb548..bb475bd 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -18,12 +18,21 @@ int main(int argc, char** argv) HttpResponse response; response.add_header("Server", "cfws"); - if (request.header("Accept-Language").find("zh") == std::string::npos) { - response.set_status_code(HttpStatusCode::Forbidden); - response.set_content("Please set your language to Chinese to access this page."); - } else { + if (request.uri() == "/") { response.set_status_code(HttpStatusCode::OK); - response.set_content("Welcome to the page."); + response.add_header("Content-Type", "text/html"); + response.set_content("<h1>Welcome to the web server!</h1><a href=\"/language\">Click here!</a>"); + } else if (request.uri() == "/language") { + if (request.header("Accept-Language").find("zh") == std::string::npos) { + response.set_status_code(HttpStatusCode::Forbidden); + response.set_content("Please set your language to Chinese to access this page."); + } else { + response.set_status_code(HttpStatusCode::OK); + response.set_content("Welcome to the page."); + } + } else { + response.set_status_code(HttpStatusCode::NotFound); + response.set_content("Page not found!"); } client.send(response); |