Skip to content

Commit 08057cc

Browse files
committed
add interceptors and version
1 parent 17ef1ba commit 08057cc

File tree

11 files changed

+104
-29
lines changed

11 files changed

+104
-29
lines changed

example/main.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ int main(int argc, char **argv) {
66
connection.port = 80;
77

88
mochios::Client client(connection);
9+
client.interceptors.request.push_back([](mochios::message::Request &request) {
10+
// logger::info("Intercepting request!");
11+
// request.print();
12+
});
913
mochios::message::Response response;
1014

1115
mochios::message::Request healthRequest("/health");

include/mochios/client/client.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,8 @@
77
#include <logger/log.h>
88

99
#include <mochios/client/options.h>
10-
#include <mochios/enums/method.h>
11-
#include <mochios/message/request.h>
12-
#include <mochios/message/response.h>
10+
#include <mochios/interceptors/interceptor.h>
11+
#include <mochios/interceptors/user_agent.h>
1312

1413
namespace mochios {
1514

@@ -21,13 +20,14 @@ class Client {
2120
mochios::client::Connection connection;
2221

2322
void connect();
24-
mochios::message::Response sendHelper(mochios::message::Request &request,
25-
const mochios::enums::method &method);
23+
mochios::message::Response sendHelper(mochios::message::Request &request);
2624

2725
public:
2826
Client(const mochios::client::Connection &connection);
2927
~Client();
3028

29+
mochios::interceptor::Interceptors interceptors;
30+
3131
mochios::message::Response get(mochios::message::Request &request);
3232
mochios::message::Response post(mochios::message::Request &request);
3333
mochios::message::Response put(mochios::message::Request &request);

include/mochios/helpers/client.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,12 @@ namespace mochios {
1515
namespace helpers {
1616

1717
std::pair<std::string, std::string>
18-
buildRequest(mochios::message::Request &request,
19-
const mochios::enums::method &method);
18+
buildRequest(mochios::message::Request &request);
2019

2120
void buildResponse(mochios::message::Response &res,
2221
std::stringstream &response);
2322

2423
mochios::message::Response send(mochios::message::Request &request,
25-
const mochios::enums::method &method,
2624
const int &socket);
2725

2826
} // namespace helpers
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#pragma once
2+
3+
#include <functional>
4+
5+
#include <mochios/message/request.h>
6+
#include <mochios/message/response.h>
7+
8+
namespace mochios {
9+
10+
namespace interceptor {
11+
12+
typedef struct {
13+
std::vector<std::function<void(mochios::message::Request &)>> request;
14+
std::vector<std::function<void(mochios::message::Response &)>> response;
15+
} Interceptors;
16+
17+
} // namespace interceptor
18+
19+
} // namespace mochios
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#pragma once
2+
3+
#include <mochios/message/request.h>
4+
#include <mochios/version.h>
5+
6+
namespace mochios {
7+
8+
namespace interceptor {
9+
10+
void userAgent(mochios::message::Request &request);
11+
12+
} // namespace interceptor
13+
14+
} // namespace mochios

include/mochios/message/request.h

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

3+
#include <mochios/enums/method.h>
34
#include <mochios/message/message.h>
45

56
namespace mochios {
@@ -13,6 +14,7 @@ class Request : public Message {
1314
~Request();
1415

1516
std::string path;
17+
mochios::enums::method method;
1618

1719
void print() override;
1820
};

include/mochios/version.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#pragma once
2+
3+
#include <string>
4+
5+
#define MOCHIOS_VERSION_MAJOR 0
6+
#define MOCHIOS_VERSION_MINOR 1
7+
#define MOCHIOS_VERSION_PATCH 0
8+
9+
namespace mochios {
10+
11+
const std::string version = std::to_string(MOCHIOS_VERSION_MAJOR) + "." +
12+
std::to_string(MOCHIOS_VERSION_MINOR) + "." +
13+
std::to_string(MOCHIOS_VERSION_PATCH);
14+
15+
}

src/client/client.cpp

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ mochios::Client::Client(const mochios::client::Connection &connection)
1717

1818
this->connect();
1919
close(this->socket);
20+
21+
this->interceptors.request.push_back(mochios::interceptor::userAgent);
2022
return;
2123
}
2224

@@ -30,37 +32,44 @@ mochios::Client::~Client() {
3032

3133
mochios::message::Response
3234
mochios::Client::get(mochios::message::Request &request) {
33-
return this->sendHelper(request, mochios::enums::method::GET);
35+
request.method = mochios::enums::method::GET;
36+
return this->sendHelper(request);
3437
}
3538

3639
mochios::message::Response
3740
mochios::Client::post(mochios::message::Request &request) {
38-
return this->sendHelper(request, mochios::enums::method::POST);
41+
request.method = mochios::enums::method::POST;
42+
return this->sendHelper(request);
3943
}
4044

4145
mochios::message::Response
4246
mochios::Client::put(mochios::message::Request &request) {
43-
return this->sendHelper(request, mochios::enums::method::PUT);
47+
request.method = mochios::enums::method::PUT;
48+
return this->sendHelper(request);
4449
}
4550

4651
mochios::message::Response
4752
mochios::Client::patch(mochios::message::Request &request) {
48-
return this->sendHelper(request, mochios::enums::method::PATCH);
53+
request.method = mochios::enums::method::PATCH;
54+
return this->sendHelper(request);
4955
}
5056

5157
mochios::message::Response
5258
mochios::Client::del(mochios::message::Request &request) {
53-
return this->sendHelper(request, mochios::enums::method::DELETE);
59+
request.method = mochios::enums::method::DELETE;
60+
return this->sendHelper(request);
5461
}
5562

5663
mochios::message::Response
5764
mochios::Client::options(mochios::message::Request &request) {
58-
return this->sendHelper(request, mochios::enums::method::OPTIONS);
65+
request.method = mochios::enums::method::OPTIONS;
66+
return this->sendHelper(request);
5967
}
6068

6169
mochios::message::Response
6270
mochios::Client::head(mochios::message::Request &request) {
63-
return this->sendHelper(request, mochios::enums::method::HEAD);
71+
request.method = mochios::enums::method::HEAD;
72+
return this->sendHelper(request);
6473
}
6574

6675
void mochios::Client::connect() {
@@ -83,11 +92,20 @@ void mochios::Client::connect() {
8392
}
8493

8594
mochios::message::Response
86-
mochios::Client::sendHelper(mochios::message::Request &request,
87-
const mochios::enums::method &method) {
88-
this->connect();
95+
mochios::Client::sendHelper(mochios::message::Request &request) {
8996
request.set("Host", this->connection.host);
9097
request.set("Accept", "*/*");
9198
request.set("Connection", "close");
92-
return mochios::helpers::send(request, method, this->socket);
99+
for (const std::function<void(mochios::message::Request &)>
100+
&requestIntercptor : this->interceptors.request) {
101+
requestIntercptor(request);
102+
}
103+
this->connect();
104+
mochios::message::Response res =
105+
mochios::helpers::send(request, this->socket);
106+
for (const std::function<void(mochios::message::Response &)>
107+
&responseInterceptor : this->interceptors.response) {
108+
responseInterceptor(res);
109+
}
110+
return res;
93111
}

src/helpers/client.cpp

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
#include <mochios/helpers/client.h>
22

33
std::pair<std::string, std::string>
4-
mochios::helpers::buildRequest(mochios::message::Request &request,
5-
const mochios::enums::method &method) {
4+
mochios::helpers::buildRequest(mochios::message::Request &request) {
65
std::ostringstream oss;
7-
oss << method << " " << request.path;
6+
oss << request.method << " " << request.path;
87
if (request.queries.size() > 0) {
98
oss << "?";
109
bool isFirst = true;
@@ -21,9 +20,9 @@ mochios::helpers::buildRequest(mochios::message::Request &request,
2120
oss << " HTTP/1.1\r\n";
2221

2322
std::string jsonifiedBody = "";
24-
if (method == mochios::enums::method::POST ||
25-
method == mochios::enums::method::PUT ||
26-
method == mochios::enums::method::PATCH) {
23+
if (request.method == mochios::enums::method::POST ||
24+
request.method == mochios::enums::method::PUT ||
25+
request.method == mochios::enums::method::PATCH) {
2726
jsonifiedBody = request.body.dumps(0);
2827
request.set("Content-Type", "application/json");
2928
request.set("Content-Length", std::to_string(jsonifiedBody.size()));
@@ -62,11 +61,9 @@ void mochios::helpers::buildResponse(mochios::message::Response &res,
6261
}
6362

6463
mochios::message::Response
65-
mochios::helpers::send(mochios::message::Request &request,
66-
const mochios::enums::method &method,
67-
const int &socket) {
64+
mochios::helpers::send(mochios::message::Request &request, const int &socket) {
6865
std::pair<std::string, std::string> requestString =
69-
mochios::helpers::buildRequest(request, method);
66+
mochios::helpers::buildRequest(request);
7067
if (brewtils::sys::send(socket, requestString.first.c_str(),
7168
requestString.first.size(), 0) < 0) {
7269
logger::error("Error sending request headers",

src/interceptors/user_agent.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#include <mochios/interceptors/user_agent.h>
2+
3+
const std::string mochiosUserAgent = "mochios/" + mochios::version;
4+
5+
void mochios::interceptor::userAgent(mochios::message::Request &request) {
6+
request.set("User-Agent", mochiosUserAgent);
7+
}

0 commit comments

Comments
 (0)