mirror of
https://github.com/ZeroTier/ZeroTierOne
synced 2025-08-22 06:14:02 -07:00
bug fixes
This commit is contained in:
parent
2911bac529
commit
474f5b9f4b
4 changed files with 270 additions and 264 deletions
|
@ -15,9 +15,12 @@
|
|||
|
||||
namespace ZeroTier {
|
||||
|
||||
DBMirrorSet::DBMirrorSet(DB::ChangeListener *listener) :
|
||||
_listener(listener),
|
||||
_running(true)
|
||||
DBMirrorSet::DBMirrorSet(DB::ChangeListener *listener)
|
||||
: _listener(listener)
|
||||
, _running(true)
|
||||
, _syncCheckerThread()
|
||||
, _dbs()
|
||||
, _dbs_l()
|
||||
{
|
||||
_syncCheckerThread = std::thread([this]() {
|
||||
for(;;) {
|
||||
|
|
|
@ -554,37 +554,8 @@ void EmbeddedNetworkController::request(
|
|||
_queue.post(qe);
|
||||
}
|
||||
|
||||
void EmbeddedNetworkController::configureHTTPControlPlane(
|
||||
httplib::Server &s,
|
||||
const std::function<void(const httplib::Request&, httplib::Response&, std::string)> setContent)
|
||||
std::string EmbeddedNetworkController::networkUpdateFromPostData(uint64_t networkID, const std::string &body)
|
||||
{
|
||||
s.Get("/controller/network", [&](const httplib::Request &req, httplib::Response &res) {
|
||||
std::set<uint64_t> networkIds;
|
||||
_db.networks(networkIds);
|
||||
char tmp[64];
|
||||
|
||||
auto out = json::array();
|
||||
for(std::set<uint64_t>::const_iterator i(networkIds.begin()); i != networkIds.end(); ++i) {
|
||||
OSUtils::ztsnprintf(tmp, sizeof(tmp), "%.16llx", *i);
|
||||
out.push_back(tmp);
|
||||
}
|
||||
|
||||
setContent(req, res, out.dump());
|
||||
});
|
||||
|
||||
s.Get("/controller/network/([0-9a-fA-F]{16})", [&](const httplib::Request &req, httplib::Response &res) {
|
||||
auto networkID = req.matches[1];
|
||||
uint64_t nwid = Utils::hexStrToU64(networkID.str().c_str());
|
||||
json network;
|
||||
if (!_db.get(nwid, network)) {
|
||||
res.status = 404;
|
||||
return;
|
||||
}
|
||||
|
||||
setContent(req, res, network.dump());
|
||||
});
|
||||
|
||||
auto _networkUpdateFromPostData = [&](uint64_t networkID, const std::string &body) -> std::string {
|
||||
json b = OSUtils::jsonParse(body);
|
||||
|
||||
char nwids[24];
|
||||
|
@ -837,9 +808,40 @@ void EmbeddedNetworkController::configureHTTPControlPlane(
|
|||
_db.save(network, true);
|
||||
|
||||
return network.dump();
|
||||
};
|
||||
}
|
||||
|
||||
void EmbeddedNetworkController::configureHTTPControlPlane(
|
||||
httplib::Server &s,
|
||||
const std::function<void(const httplib::Request&, httplib::Response&, std::string)> setContent)
|
||||
{
|
||||
s.Get("/controller/network", [&](const httplib::Request &req, httplib::Response &res) {
|
||||
std::set<uint64_t> networkIds;
|
||||
_db.networks(networkIds);
|
||||
char tmp[64];
|
||||
|
||||
auto out = json::array();
|
||||
for(std::set<uint64_t>::const_iterator i(networkIds.begin()); i != networkIds.end(); ++i) {
|
||||
OSUtils::ztsnprintf(tmp, sizeof(tmp), "%.16llx", *i);
|
||||
out.push_back(tmp);
|
||||
}
|
||||
|
||||
setContent(req, res, out.dump());
|
||||
});
|
||||
|
||||
s.Get("/controller/network/([0-9a-fA-F]{16})", [&](const httplib::Request &req, httplib::Response &res) {
|
||||
auto networkID = req.matches[1];
|
||||
uint64_t nwid = Utils::hexStrToU64(networkID.str().c_str());
|
||||
json network;
|
||||
if (!_db.get(nwid, network)) {
|
||||
res.status = 404;
|
||||
return;
|
||||
}
|
||||
|
||||
setContent(req, res, network.dump());
|
||||
});
|
||||
|
||||
auto createNewNetwork = [&](const httplib::Request &req, httplib::Response &res) {
|
||||
fprintf(stderr, "creating new network (new style)\n");
|
||||
uint64_t nwid = 0;
|
||||
uint64_t nwidPrefix = (Utils::hexStrToU64(_signingIdAddressString.c_str()) << 24) & 0xffffffffff000000ULL;
|
||||
uint64_t nwidPostfix = 0;
|
||||
|
@ -857,7 +859,7 @@ void EmbeddedNetworkController::configureHTTPControlPlane(
|
|||
return;
|
||||
}
|
||||
|
||||
setContent(req, res, _networkUpdateFromPostData(nwid, req.body));
|
||||
setContent(req, res, networkUpdateFromPostData(nwid, req.body));
|
||||
};
|
||||
s.Put("/controller/network", createNewNetwork);
|
||||
s.Post("/controller/network", createNewNetwork);
|
||||
|
@ -886,7 +888,7 @@ void EmbeddedNetworkController::configureHTTPControlPlane(
|
|||
res.status = 503;
|
||||
return;
|
||||
}
|
||||
setContent(req, res, _networkUpdateFromPostData(nwid, req.body));
|
||||
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);
|
||||
|
|
|
@ -82,6 +82,8 @@ private:
|
|||
void _request(uint64_t nwid,const InetAddress &fromAddr,uint64_t requestPacketId,const Identity &identity,const Dictionary<ZT_NETWORKCONFIG_METADATA_DICT_CAPACITY> &metaData);
|
||||
void _startThreads();
|
||||
|
||||
std::string networkUpdateFromPostData(uint64_t networkID, const std::string &body);
|
||||
|
||||
struct _RQEntry
|
||||
{
|
||||
uint64_t nwid;
|
||||
|
|
|
@ -1002,8 +1002,6 @@ public:
|
|||
return _termReason;
|
||||
}
|
||||
|
||||
startHTTPControlPlane();
|
||||
|
||||
// Save primary port to a file so CLIs and GUIs can learn it easily
|
||||
char portstr[64];
|
||||
OSUtils::ztsnprintf(portstr,sizeof(portstr),"%u",_ports[0]);
|
||||
|
@ -1056,6 +1054,8 @@ public:
|
|||
}
|
||||
_node->setNetconfMaster((void *)_controller);
|
||||
|
||||
startHTTPControlPlane();
|
||||
|
||||
// Join existing networks in networks.d
|
||||
{
|
||||
std::vector<std::string> networksDotD(OSUtils::listDirectory((_homePath + ZT_PATH_SEPARATOR_S "networks.d").c_str()));
|
||||
|
@ -1971,7 +1971,7 @@ public:
|
|||
|
||||
_controlPlane.set_exception_handler([&](const httplib::Request &req, httplib::Response &res, std::exception_ptr ep) {
|
||||
char buf[1024];
|
||||
auto fmt = "{\"error\": %d, \"description\": \"%\"}";
|
||||
auto fmt = "{\"error\": %d, \"description\": \"%s\"}";
|
||||
try {
|
||||
std::rethrow_exception(ep);
|
||||
} catch (std::exception &e) {
|
||||
|
@ -1984,7 +1984,6 @@ public:
|
|||
});
|
||||
|
||||
if (_controller) {
|
||||
// TODO: Wire up controller
|
||||
_controller->configureHTTPControlPlane(_controlPlane, setContent);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue