Skip to content

Commit 6f22a44

Browse files
authored
Merge pull request #117 from coding-cpp/fix/110
Fix/110
2 parents 332160e + 99fdcd5 commit 6f22a44

File tree

20 files changed

+72
-171
lines changed

20 files changed

+72
-171
lines changed

.gitmodules

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,6 @@
1313
[submodule "lib/zippuccino"]
1414
path = lib/zippuccino
1515
url = [email protected]:coding-cpp/zippuccino.git
16+
[submodule "lib/mochios"]
17+
path = lib/mochios
18+
url = [email protected]:coding-cpp/mochios

CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,6 @@ target_include_directories(server
4040
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/lib/brewtils/include>
4141
$<INSTALL_INTERFACE:lib/zippuccino/include>
4242
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/lib/zippuccino/include>
43+
$<INSTALL_INTERFACE:lib/mochios/include>
44+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/lib/mochios/include>
4345
)

assets/github/build.png

26.9 KB
Loading

assets/github/start.png

-14.7 KB
Loading

example/main.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,13 @@ void about(Request &req, Response &res) {
5757
response["submodules"][4]["location"] = "lib/zippuccino";
5858
response["submodules"][4]["name"] = "Zippuccino";
5959

60+
json::object mochios;
61+
mochios["repository"] = "https://github.com/coding-cpp/mochios";
62+
mochios["work"] = "HTTP request library for C++";
63+
mochios["location"] = "lib/mochios";
64+
mochios["name"] = "Mochios";
65+
response["submodules"].push_back(mochios);
66+
6067
res.status(STATUS_CODE::OK).json(response).end();
6168
return;
6269
}

include/expresso/core/router.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ class Router {
3737
expresso::messages::Response &response);
3838
std::map<std::string, void (*)(expresso::messages::Request &request,
3939
expresso::messages::Response &response)> &
40-
fetchMapFromMethod(expresso::enums::method method);
41-
void addRoute(expresso::enums::method method, std::string path,
40+
fetchMapFromMethod(mochios::enums::method method);
41+
void addRoute(mochios::enums::method method, std::string path,
4242
void (*handler)(expresso::messages::Request &request,
4343
expresso::messages::Response &response));
4444

include/expresso/enums/method.h

Lines changed: 0 additions & 26 deletions
This file was deleted.

include/expresso/messages/cookie.h

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,16 @@
11
#pragma once
22

3-
#include <string>
4-
5-
#include <brewtils/url.h>
3+
#include <mochios/messages/cookie.h>
64

75
namespace expresso {
86

97
namespace messages {
108

11-
class Cookie {
9+
class Cookie : public mochios::messages::Cookie {
1210
public:
13-
bool secure;
14-
bool httpOnly;
15-
bool partitioned;
16-
17-
std::string name;
18-
std::string value;
19-
std::string domain;
20-
std::string path;
21-
std::string expires;
22-
std::string maxAge;
23-
std::string sameSite;
24-
2511
Cookie();
12+
Cookie(const std::string &data);
2613
~Cookie();
27-
28-
std::string serialize();
2914
};
3015

3116
} // namespace messages

include/expresso/messages/request.h

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,34 @@
11
#pragma once
22

3+
#include <mochios/messages/request.h>
4+
35
#include <expresso/messages/response.h>
46

57
namespace expresso {
68

79
namespace messages {
810

9-
class Request {
11+
class Request : public mochios::messages::Request {
1012
private:
1113
public:
12-
Request();
14+
Request(const std::string &path);
1315
~Request();
1416

1517
bool xhr;
1618
int contentLength;
1719

1820
std::string host;
1921
std::string hostname;
20-
expresso::enums::method method;
21-
std::string path;
2222
std::string httpVersion;
2323

2424
// tempPath used internally for referencing. DO NOT USE IT! Use `path`
2525
// instead.
2626
std::string tempPath;
27-
28-
json::object body;
29-
std::vector<Cookie *> cookies;
30-
std::map<std::string, std::string> headers;
31-
std::map<std::string, std::string> params;
32-
std::map<std::string, std::string> queries;
27+
std::vector<expresso::messages::Cookie *> cookies;
3328

3429
expresso::messages::Response *res;
3530

36-
void print();
31+
void print() override;
3732
};
3833

3934
} // namespace messages

include/expresso/messages/response.h

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,26 +7,25 @@
77
#include <brewtils/string.h>
88
#include <brewtils/sys.h>
99
#include <json/object.h>
10+
#include <mochios/enums/method.h>
11+
#include <mochios/messages/response.h>
1012
#include <zippuccino/zipper.h>
1113

12-
#include <expresso/enums/method.h>
1314
#include <expresso/enums/status_code.h>
1415
#include <expresso/messages/cookie.h>
1516

1617
namespace expresso {
1718

1819
namespace messages {
1920

20-
class Response {
21+
class Response : public mochios::messages::Response {
2122
private:
2223
bool hasEnded;
2324

2425
int socket;
25-
expresso::enums::STATUS_CODE statusCode;
2626

2727
std::string message;
2828
std::vector<Cookie *> cookies;
29-
std::map<std::string, std::string> headers;
3029

3130
void sendToClient();
3231
void sendHeaders();
@@ -51,7 +50,7 @@ class Response {
5150
void sendInvalidRange();
5251

5352
void end();
54-
void print();
53+
void print() override;
5554
};
5655

5756
} // namespace messages

include/expresso/middleware/cors.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,15 @@ class Cors : public Middleware {
1515

1616
std::set<std::string> origins;
1717
std::set<std::string> headers;
18-
std::set<expresso::enums::method> methods;
18+
std::set<mochios::enums::method> methods;
1919

2020
public:
2121
Cors();
2222
~Cors();
2323

2424
void allowOrigin(std::string origin);
2525
void allowMethod(std::string method);
26-
void allowMethod(expresso::enums::method method);
26+
void allowMethod(mochios::enums::method method);
2727
void allowHeader(std::string header);
2828
void allowCredentials(bool credentials);
2929

lib/mochios

Submodule mochios added at 4fa51ea

src/core/router.cpp

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,42 +25,42 @@ expresso::core::Router::~Router() {
2525
void expresso::core::Router::get(
2626
std::string path, void (*handler)(expresso::messages::Request &request,
2727
expresso::messages::Response &response)) {
28-
this->addRoute(expresso::enums::method::GET, path, handler);
28+
this->addRoute(mochios::enums::method::GET, path, handler);
2929
return;
3030
}
3131

3232
void expresso::core::Router::post(
3333
std::string path, void (*handler)(expresso::messages::Request &request,
3434
expresso::messages::Response &response)) {
35-
this->addRoute(expresso::enums::method::POST, path, handler);
35+
this->addRoute(mochios::enums::method::POST, path, handler);
3636
return;
3737
}
3838

3939
void expresso::core::Router::put(
4040
std::string path, void (*handler)(expresso::messages::Request &request,
4141
expresso::messages::Response &response)) {
42-
this->addRoute(expresso::enums::method::PUT, path, handler);
42+
this->addRoute(mochios::enums::method::PUT, path, handler);
4343
return;
4444
}
4545

4646
void expresso::core::Router::patch(
4747
std::string path, void (*handler)(expresso::messages::Request &request,
4848
expresso::messages::Response &response)) {
49-
this->addRoute(expresso::enums::method::PATCH, path, handler);
49+
this->addRoute(mochios::enums::method::PATCH, path, handler);
5050
return;
5151
}
5252

5353
void expresso::core::Router::del(
5454
std::string path, void (*handler)(expresso::messages::Request &request,
5555
expresso::messages::Response &response)) {
56-
this->addRoute(expresso::enums::method::DELETE, path, handler);
56+
this->addRoute(mochios::enums::method::DELETE, path, handler);
5757
return;
5858
}
5959

6060
void expresso::core::Router::options(
6161
std::string path, void (*handler)(expresso::messages::Request &request,
6262
expresso::messages::Response &response)) {
63-
this->addRoute(expresso::enums::method::OPTIONS, path, handler);
63+
this->addRoute(mochios::enums::method::OPTIONS, path, handler);
6464
return;
6565
}
6666

@@ -157,20 +157,20 @@ bool expresso::core::Router::handleMiddlewares(
157157
std::map<std::string,
158158
void (*)(expresso::messages::Request &request,
159159
expresso::messages::Response &response)> &
160-
expresso::core::Router::fetchMapFromMethod(expresso::enums::method method) {
160+
expresso::core::Router::fetchMapFromMethod(mochios::enums::method method) {
161161
switch (method) {
162-
case expresso::enums::method::GET:
162+
case mochios::enums::method::GET:
163163
return this->getMap;
164-
case expresso::enums::method::POST:
164+
case mochios::enums::method::POST:
165165
return this->postMap;
166-
case expresso::enums::method::PUT:
166+
case mochios::enums::method::PUT:
167167
return this->putMap;
168-
case expresso::enums::method::PATCH:
168+
case mochios::enums::method::PATCH:
169169

170170
return this->patchMap;
171-
case expresso::enums::method::DELETE:
171+
case mochios::enums::method::DELETE:
172172
return this->deleteMap;
173-
case expresso::enums::method::OPTIONS:
173+
case mochios::enums::method::OPTIONS:
174174
return this->optionsMap;
175175
default:
176176
logger::error("Invalid method: " + std::to_string(static_cast<int>(method)),
@@ -184,7 +184,7 @@ expresso::core::Router::fetchMapFromMethod(expresso::enums::method method) {
184184
}
185185

186186
void expresso::core::Router::addRoute(
187-
expresso::enums::method method, std::string path,
187+
mochios::enums::method method, std::string path,
188188
void (*handler)(expresso::messages::Request &request,
189189
expresso::messages::Response &response)) {
190190
if (path[0] != '/') {

src/core/server.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,8 @@ void expresso::core::Server::handleConnection(int clientSocket) {
104104

105105
charRequest.resize(totalBytesRead);
106106
std::string request(charRequest.data());
107-
expresso::messages::Response *res = new expresso::messages::Response(clientSocket);
107+
expresso::messages::Response *res =
108+
new expresso::messages::Response(clientSocket);
108109

109110
try {
110111
expresso::messages::Request req = this->makeRequest(request);
@@ -124,24 +125,23 @@ void expresso::core::Server::handleConnection(int clientSocket) {
124125

125126
expresso::messages::Request
126127
expresso::core::Server::makeRequest(std::string &request) noexcept(false) {
127-
expresso::messages::Request req;
128128
std::string line;
129129
std::istringstream stream(request);
130130
std::getline(stream, line);
131131

132132
std::vector<std::string> parts = brewtils::string::split(line, " ");
133133
const std::string method = brewtils::string::upper(parts[0]);
134134
std::set<std::string>::const_iterator methodIter =
135-
expresso::enums::methods.find(method);
136-
if (methodIter == expresso::enums::methods.end()) {
135+
mochios::enums::methods.find(method);
136+
if (methodIter == mochios::enums::methods.end()) {
137137
logger::error("Unsupported HTTP method: " + method,
138138
"expresso::core::Server::makeRequest(std::string &request) "
139139
"noexcept(false)");
140140
}
141141

142-
req.method = static_cast<expresso::enums::method>(
143-
std::distance(expresso::enums::methods.begin(), methodIter) - 1);
144-
req.path = parts[1];
142+
expresso::messages::Request req(parts[1]);
143+
req.method = static_cast<mochios::enums::method>(
144+
std::distance(mochios::enums::methods.begin(), methodIter) - 1);
145145
req.httpVersion = parts[2];
146146
if (req.httpVersion.substr(0, 5) != "HTTP/") {
147147
logger::error("Invalid HTTP version: " + req.httpVersion,
@@ -206,8 +206,8 @@ expresso::core::Server::makeRequest(std::string &request) noexcept(false) {
206206
req.tempPath = req.tempPath.substr(0, req.tempPath.size() - 1);
207207
}
208208

209-
if (req.method == expresso::enums::method::GET ||
210-
req.method == expresso::enums::method::HEAD) {
209+
if (req.method == mochios::enums::method::GET ||
210+
req.method == mochios::enums::method::HEAD) {
211211
return req;
212212
}
213213

src/enums/method.cpp

Lines changed: 0 additions & 36 deletions
This file was deleted.

0 commit comments

Comments
 (0)