summaryrefslogtreecommitdiff
path: root/controller
diff options
context:
space:
mode:
authorGrant Limberg <[email protected]>2023-08-28 12:54:29 -0700
committerGrant Limberg <[email protected]>2023-08-28 12:54:29 -0700
commit69c590ff8122bfafb696b4b76a27cd6bb4a546a7 (patch)
treebdceaa6d2965a9335d6f7b0202ff8ad5f74fcfa5 /controller
parent5becb41bd4b26674d28ed5979b7d329049d1d857 (diff)
parent72533cbd1352571aa1991eb3fa3fb5a4ffd07679 (diff)
Merge branch 'dev' into temporal
Diffstat (limited to 'controller')
-rw-r--r--controller/EmbeddedNetworkController.cpp80
-rw-r--r--controller/EmbeddedNetworkController.hpp1
2 files changed, 59 insertions, 22 deletions
diff --git a/controller/EmbeddedNetworkController.cpp b/controller/EmbeddedNetworkController.cpp
index b60c375c..85fbb4dc 100644
--- a/controller/EmbeddedNetworkController.cpp
+++ b/controller/EmbeddedNetworkController.cpp
@@ -863,9 +863,17 @@ std::string EmbeddedNetworkController::networkUpdateFromPostData(uint64_t networ
void EmbeddedNetworkController::configureHTTPControlPlane(
httplib::Server &s,
+ httplib::Server &sv6,
const std::function<void(const httplib::Request&, httplib::Response&, std::string)> setContent)
{
- s.Get("/controller/network", [&, setContent](const httplib::Request &req, httplib::Response &res) {
+ // Control plane Endpoints
+ std::string networkListPath = "/controller/network";
+ std::string networkPath = "/controller/network/([0-9a-fA-F]{16})";
+ std::string oldAndBustedNetworkCreatePath = "/controller/network/([0-9a-fA-F]{10})______";
+ std::string memberListPath = "/controller/network/([0-9a-fA-F]{16})/member";
+ std::string memberPath = "/controller/network/([0-9a-fA-F]{16})/member/([0-9a-fA-F]{10})";
+
+ auto networkListGet = [&, setContent](const httplib::Request &req, httplib::Response &res) {
std::set<uint64_t> networkIds;
_db.networks(networkIds);
char tmp[64];
@@ -877,9 +885,11 @@ void EmbeddedNetworkController::configureHTTPControlPlane(
}
setContent(req, res, out.dump());
- });
+ };
+ s.Get(networkListPath, networkListGet);
+ sv6.Get(networkListPath, networkListGet);
- s.Get("/controller/network/([0-9a-fA-F]{16})", [&, setContent](const httplib::Request &req, httplib::Response &res) {
+ auto networkGet = [&, setContent](const httplib::Request &req, httplib::Response &res) {
auto networkID = req.matches[1];
uint64_t nwid = Utils::hexStrToU64(networkID.str().c_str());
json network;
@@ -889,7 +899,9 @@ void EmbeddedNetworkController::configureHTTPControlPlane(
}
setContent(req, res, network.dump());
- });
+ };
+ s.Get(networkPath, networkGet);
+ sv6.Get(networkPath, networkGet);
auto createNewNetwork = [&, setContent](const httplib::Request &req, httplib::Response &res) {
fprintf(stderr, "creating new network (new style)\n");
@@ -912,8 +924,10 @@ void EmbeddedNetworkController::configureHTTPControlPlane(
setContent(req, res, networkUpdateFromPostData(nwid, req.body));
};
- s.Put("/controller/network", createNewNetwork);
- s.Post("/controller/network", createNewNetwork);
+ s.Put(networkListPath, createNewNetwork);
+ s.Post(networkListPath, createNewNetwork);
+ sv6.Put(networkListPath, createNewNetwork);
+ sv6.Post(networkListPath, createNewNetwork);
auto createNewNetworkOldAndBusted = [&, setContent](const httplib::Request &req, httplib::Response &res) {
auto inID = req.matches[1].str();
@@ -941,10 +955,24 @@ void EmbeddedNetworkController::configureHTTPControlPlane(
}
setContent(req, res, networkUpdateFromPostData(nwid, req.body));
};
- s.Put("/controller/network/([0-9a-fA-F]{10})______", createNewNetworkOldAndBusted);
- s.Post("/controller/network/([0-9a-fA-F]{10})______", createNewNetworkOldAndBusted);
+ s.Put(oldAndBustedNetworkCreatePath, createNewNetworkOldAndBusted);
+ s.Post(oldAndBustedNetworkCreatePath, createNewNetworkOldAndBusted);
+ sv6.Put(oldAndBustedNetworkCreatePath, createNewNetworkOldAndBusted);
+ sv6.Post(oldAndBustedNetworkCreatePath, createNewNetworkOldAndBusted);
+
+ auto networkPost = [&, setContent](const httplib::Request &req, httplib::Response &res) {
+ auto networkID = req.matches[1].str();
+ uint64_t nwid = Utils::hexStrToU64(networkID.c_str());
+
+ res.status = 200;
+ setContent(req, res, networkUpdateFromPostData(nwid, req.body));
+ };
+ s.Put(networkPath, networkPost);
+ s.Post(networkPath, networkPost);
+ sv6.Put(networkPath, networkPost);
+ sv6.Post(networkPath, networkPost);
- s.Delete("/controller/network/([0-9a-fA-F]{16})", [&, setContent](const httplib::Request &req, httplib::Response &res) {
+ auto networkDelete = [&, setContent](const httplib::Request &req, httplib::Response &res) {
auto networkID = req.matches[1].str();
uint64_t nwid = Utils::hexStrToU64(networkID.c_str());
@@ -956,9 +984,11 @@ void EmbeddedNetworkController::configureHTTPControlPlane(
_db.eraseNetwork(nwid);
setContent(req, res, network.dump());
- });
+ };
+ s.Delete(networkPath, networkDelete);
+ sv6.Delete(networkPath, networkDelete);
- s.Get("/controller/network/([0-9a-fA-F]{16})/member", [&, setContent](const httplib::Request &req, httplib::Response &res) {
+ auto memberListGet = [&, setContent](const httplib::Request &req, httplib::Response &res) {
auto networkID = req.matches[1];
uint64_t nwid = Utils::hexStrToU64(networkID.str().c_str());
json network;
@@ -967,24 +997,24 @@ void EmbeddedNetworkController::configureHTTPControlPlane(
return;
}
- json out = json::array();
+ json out = json::object();
std::vector<json> memTmp;
if (_db.get(nwid, network, memTmp)) {
for (auto m = memTmp.begin(); m != memTmp.end(); ++m) {
int revision = OSUtils::jsonInt((*m)["revision"], 0);
std::string id = OSUtils::jsonString((*m)["id"], "");
if (id.length() == 10) {
- json tmp = json::object();
- tmp[id] = revision;
- out.push_back(tmp);
+ out[id] = revision;
}
}
}
setContent(req, res, out.dump());
- });
+ };
+ s.Get(memberListPath, memberListGet);
+ sv6.Get(memberListPath, memberListGet);
- s.Get("/controller/network/([0-9a-fA-F]{16})/member/([0-9a-fA-F]{10})", [&, setContent](const httplib::Request &req, httplib::Response &res) {
+ auto memberGet = [&, setContent](const httplib::Request &req, httplib::Response &res) {
auto networkID = req.matches[1];
auto memberID = req.matches[2];
uint64_t nwid = Utils::hexStrToU64(networkID.str().c_str());
@@ -997,7 +1027,9 @@ void EmbeddedNetworkController::configureHTTPControlPlane(
}
setContent(req, res, member.dump());
- });
+ };
+ s.Get(memberPath, memberGet);
+ sv6.Get(memberPath, memberGet);
auto memberPost = [&, setContent](const httplib::Request &req, httplib::Response &res) {
auto networkID = req.matches[1].str();
@@ -1102,10 +1134,12 @@ void EmbeddedNetworkController::configureHTTPControlPlane(
setContent(req, res, member.dump());
};
- s.Put("/controller/network/([0-9a-fA-F]{16})/member/([0-9a-fA-F]{10})", memberPost);
- s.Post("/controller/network/([0-9a-fA-F]{16})/member/([0-9a-fA-F]{10})", memberPost);
+ s.Put(memberPath, memberPost);
+ s.Post(memberPath, memberPost);
+ sv6.Put(memberPath, memberPost);
+ sv6.Post(memberPath, memberPost);
- s.Delete("/controller/network/([0-9a-fA-F]{16})/member/([0-9a-fA-F]{10})", [&, setContent](const httplib::Request &req, httplib::Response &res) {
+ auto memberDelete = [&, setContent](const httplib::Request &req, httplib::Response &res) {
auto networkID = req.matches[1].str();
auto memberID = req.matches[2].str();
@@ -1126,7 +1160,9 @@ void EmbeddedNetworkController::configureHTTPControlPlane(
_db.eraseMember(nwid, address);
setContent(req, res, member.dump());
- });
+ };
+ s.Delete(memberPath, memberDelete);
+ sv6.Delete(memberPath, memberDelete);
}
void EmbeddedNetworkController::handleRemoteTrace(const ZT_RemoteTrace &rt)
diff --git a/controller/EmbeddedNetworkController.hpp b/controller/EmbeddedNetworkController.hpp
index ef369be3..4ea00b65 100644
--- a/controller/EmbeddedNetworkController.hpp
+++ b/controller/EmbeddedNetworkController.hpp
@@ -70,6 +70,7 @@ public:
void configureHTTPControlPlane(
httplib::Server &s,
+ httplib::Server &sV6,
const std::function<void(const httplib::Request&, httplib::Response&, std::string)>);
void handleRemoteTrace(const ZT_RemoteTrace &rt);