-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathHttpMessage.cpp
More file actions
95 lines (71 loc) · 2.26 KB
/
HttpMessage.cpp
File metadata and controls
95 lines (71 loc) · 2.26 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
#include "HttpMessage.h"
bool HttpHeader::hasFieldValue(std::size_t key, std::string_view value) const {
auto it = m_fields.find(key);
if (it != m_fields.end()) {
return it->second == value;
}
return false;
}
bool HttpHeader::hasFieldValue(std::string_view field, std::string_view value) const {
const auto key = calcKey(field);
return hasFieldValue(key, value);
}
void HttpHeader::insert(std::string_view field, std::string_view value) {
const auto key = calcKey(field);
m_fields[key] = value;
}
std::size_t HttpHeader::calcKey(std::string_view field) {
return std::hash<std::string_view>{}(field);
}
HttpMessageBuilderBase::HttpMessageBuilderBase(HttpRequest &message)
: m_message{ message } {
}
HttpRequestLineBuilder HttpMessageBuilderBase::line() {
return { m_message };
}
HttpHeaderBuilder HttpMessageBuilderBase::header() {
return { m_message };
}
HttpBodyBuilder HttpMessageBuilderBase::body() {
return { m_message };
}
HttpMessageBuilderBase::operator HttpRequest() {
return std::move(m_message);
}
HttpRequest & HttpMessageBuilderBase::getMessage() {
return m_message;
}
HttpRequestLineBuilder& HttpRequestLineBuilder::setMethod(HTTP_METHOD method) {
getMessage().m_line.m_method = method;
return *this;
}
HttpRequestLineBuilder& HttpRequestLineBuilder::setPath(std::string_view path) {
getMessage().m_line.m_path = path;
return *this;
}
HttpRequestLineBuilder& HttpRequestLineBuilder::setHttpVersion(HTTP_VERSION version) {
getMessage().m_line.m_httpVersion = version;
return *this;
}
HttpHeaderBuilder& HttpHeaderBuilder::add(std::string_view field, std::string_view value) {
auto &header = getMessage().m_header;
header.insert(field, value);
return *this;
}
HttpBodyBuilder& HttpBodyBuilder::set(std::string_view value) {
auto &body = getMessage().m_body.m_data;
body = value;
return *this;
}
HttpRequest::Builder HttpRequest::create() {
return {};
}
const HttpRequestLine& HttpRequest::line() const {
return m_line;
}
const HttpHeader& HttpRequest::headers() const {
return m_header;
}
const HttpBody& HttpRequest::body() const {
return m_body;
}