summaryrefslogtreecommitdiff
path: root/controller/LFDB.cpp
diff options
context:
space:
mode:
authorAdam Ierymenko <[email protected]>2019-07-26 17:39:00 -0700
committerAdam Ierymenko <[email protected]>2019-07-26 17:39:00 -0700
commitf6b080b8a2c071266270de23c7b99722b2cef21a (patch)
tree1fbfdc4d07b1061a58b1eb64a6baa47082d0acc2 /controller/LFDB.cpp
parentc8c33db1d12359e38dbe0cae80143963ea0b8c8a (diff)
Abstract out change listener from controller itself to permit DBs to shadow changes from other DBs.
Diffstat (limited to 'controller/LFDB.cpp')
-rw-r--r--controller/LFDB.cpp27
1 files changed, 20 insertions, 7 deletions
diff --git a/controller/LFDB.cpp b/controller/LFDB.cpp
index 5c5b687d..1f7f701a 100644
--- a/controller/LFDB.cpp
+++ b/controller/LFDB.cpp
@@ -37,9 +37,8 @@
namespace ZeroTier
{
-LFDB::LFDB(EmbeddedNetworkController *const nc,const Identity &myId,const char *path,const char *lfOwnerPrivate,const char *lfOwnerPublic,const char *lfNodeHost,int lfNodePort,bool storeOnlineState) :
- DB(nc,myId,path),
- _nc(nc),
+LFDB::LFDB(const Identity &myId,const char *path,const char *lfOwnerPrivate,const char *lfOwnerPublic,const char *lfNodeHost,int lfNodePort,bool storeOnlineState) :
+ DB(myId,path),
_myId(myId),
_lfOwnerPrivate((lfOwnerPrivate) ? lfOwnerPrivate : ""),
_lfOwnerPublic((lfOwnerPublic) ? lfOwnerPublic : ""),
@@ -54,7 +53,7 @@ LFDB::LFDB(EmbeddedNetworkController *const nc,const Identity &myId,const char *
const uint64_t controllerAddressInt = _myId.address().toInt();
_myId.address().toString(controllerAddress);
std::string networksSelectorName("com.zerotier.controller.lfdb:"); networksSelectorName.append(controllerAddress); networksSelectorName.append("/network");
- std::string membersSelectorName("com.zerotier.controller.lfdb:"); membersSelectorName.append(controllerAddress); membersSelectorName.append("/network/member");
+ std::string membersSelectorName("com.zerotier.controller.lfdb:"); membersSelectorName.append(controllerAddress); membersSelectorName.append("/member");
httplib::Client htcli(_lfNodeHost.c_str(),_lfNodePort,600);
int64_t timeRangeStart = 0;
@@ -90,10 +89,10 @@ LFDB::LFDB(EmbeddedNetworkController *const nc,const Identity &myId,const char *
for(auto ms=ns->second.members.begin();ms!=ns->second.members.end();++ms) {
if ((_storeOnlineState)&&(ms->second.lastOnlineDirty)&&(ms->second.lastOnlineAddress)) {
+ nlohmann::json newrec,selector0,selector1,selectors,ip;
char tmp[1024],tmp2[128];
OSUtils::ztsnprintf(tmp,sizeof(tmp),"com.zerotier.controller.lfdb:%s/network/%.16llx/online",controllerAddress,(unsigned long long)ns->first);
ms->second.lastOnlineAddress.toIpString(tmp2);
- nlohmann::json newrec,selector0,selector1,selectors;
selector0["Name"] = tmp;
selector0["Ordinal"] = ms->first;
selector1["Name"] = tmp2;
@@ -101,7 +100,21 @@ LFDB::LFDB(EmbeddedNetworkController *const nc,const Identity &myId,const char *
selectors.push_back(selector0);
selectors.push_back(selector1);
newrec["Selectors"] = selectors;
- newrec["Value"] = tmp2;
+ const uint8_t *const rawip = (const uint8_t *)ms->second.lastOnlineAddress.rawIpData();
+ switch(ms->second.lastOnlineAddress) {
+ case AF_INET:
+ for(int j=0;j<4;++j)
+ ip.push_back((unsigned int)rawip[j]);
+ break;
+ case AF_INET6:
+ for(int j=0;j<16;++j)
+ ip.push_back((unsigned int)rawip[j]);
+ break;
+ default:
+ ip = tmp2; // should never happen since only IP transport is currently supported
+ break;
+ }
+ newrec["Value"] = ip;
newrec["OwnerPrivate"] = _lfOwnerPrivate;
newrec["MaskingKey"] = controllerAddress;
newrec["Timestamp"] = ms->second.lastOnlineTime;
@@ -112,7 +125,7 @@ LFDB::LFDB(EmbeddedNetworkController *const nc,const Identity &myId,const char *
ms->second.lastOnlineDirty = false;
printf("SET member online %.16llx %.10llx %s\n",ns->first,ms->first,resp->body.c_str());
} else {
- fprintf(stderr,"ERROR: LFDB: %d from node (create/update member): %s" ZT_EOL_S,resp->status,resp->body.c_str());
+ fprintf(stderr,"ERROR: LFDB: %d from node (create/update member online status): %s" ZT_EOL_S,resp->status,resp->body.c_str());
}
} else {
fprintf(stderr,"ERROR: LFDB: node is offline" ZT_EOL_S);