-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathHttpResponse.cpp
More file actions
115 lines (91 loc) · 1.93 KB
/
Copy pathHttpResponse.cpp
File metadata and controls
115 lines (91 loc) · 1.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include "HttpResponse.h"
#include "Logger.h"
#include <sstream>
using namespace std;
void HttpResponse::setHeader(
const string& key,
const string& value)
{
headers[key] = value;
}
void HttpResponse::setChunked(bool value)
{
chunked = value;
}
bool HttpResponse::isChunked() const
{
return chunked;
}
const string& HttpResponse::getBody() const
{
return body;
}
string HttpResponse::getHeader(
const string& key) const
{
auto it = headers.find(key);
if(it == headers.end())
return "";
return it->second;
}
const unordered_map<string, string>&
HttpResponse::getHeaders() const
{
return headers;
}
HttpResponse::HttpResponse()
{
status = "200 OK";
headers["Content-Type"] = "text/plain";
headers["Connection"] = "close";
}
void HttpResponse::setStatus(
const string& status)
{
this->status = status;
}
void HttpResponse::setContentType(
const string& type)
{
setHeader("Content-Type", type);
}
void HttpResponse::setBody(
const string& body)
{
this->body = body;
}
string HttpResponse::buildHeaders() const
{
string response;
response += "HTTP/1.1 ";
response += status;
response += "\r\n";
// Write all headers
for(const auto& header : headers)
{
response += header.first;
response += ": ";
response += header.second;
response += "\r\n";
}
// Content-Length is NOT sent for chunked responses
if(!chunked &&
headers.find("Content-Length") == headers.end())
{
response += "Content-Length: ";
response += to_string(body.size());
response += "\r\n";
}
// Connection header
if(headers.find("Connection") == headers.end())
{
response += "Connection: close\r\n";
}
response += "\r\n";
return response;
}
string HttpResponse::build() const
{
Logger::debug("Response created: status=" + status);
return buildHeaders() + body;
}