summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/HttpRequest.cpp5
-rw-r--r--src/HttpRequest.h3
-rw-r--r--src/HttpResponse.cpp2
-rw-r--r--src/HttpResponse.h3
-rw-r--r--src/main.cpp19
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);