mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-06-05 20:13:44 +02:00
Controller fixes...
This commit is contained in:
parent
5309c7e082
commit
d9eacd1616
1 changed files with 42 additions and 24 deletions
|
@ -168,6 +168,15 @@ struct MemberRecord
|
||||||
bool activeBridge;
|
bool activeBridge;
|
||||||
uint64_t lastRequestTime;
|
uint64_t lastRequestTime;
|
||||||
MemberRecentHistory recentHistory;
|
MemberRecentHistory recentHistory;
|
||||||
|
|
||||||
|
MemberRecord() :
|
||||||
|
rowid(0),
|
||||||
|
authorized(false),
|
||||||
|
activeBridge(false),
|
||||||
|
lastRequestTime(0)
|
||||||
|
{
|
||||||
|
nodeId[0] = (char)0;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct NetworkRecord
|
struct NetworkRecord
|
||||||
|
@ -182,6 +191,20 @@ struct NetworkRecord
|
||||||
uint64_t creationTime;
|
uint64_t creationTime;
|
||||||
uint64_t revision;
|
uint64_t revision;
|
||||||
uint64_t memberRevisionCounter;
|
uint64_t memberRevisionCounter;
|
||||||
|
|
||||||
|
NetworkRecord() :
|
||||||
|
name((const char *)0),
|
||||||
|
flags(0),
|
||||||
|
isPrivate(true),
|
||||||
|
enableBroadcast(false),
|
||||||
|
allowPassiveBridging(false),
|
||||||
|
multicastLimit(0),
|
||||||
|
creationTime(0),
|
||||||
|
revision(0),
|
||||||
|
memberRevisionCounter(0)
|
||||||
|
{
|
||||||
|
id[0] = (char)0;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
} // anonymous namespace
|
} // anonymous namespace
|
||||||
|
@ -469,11 +492,9 @@ NetworkController::ResultCode SqliteNetworkController::doNetworkConfigRequest(co
|
||||||
const uint64_t now = OSUtils::now();
|
const uint64_t now = OSUtils::now();
|
||||||
|
|
||||||
NetworkRecord network;
|
NetworkRecord network;
|
||||||
memset(&network,0,sizeof(network));
|
|
||||||
Utils::snprintf(network.id,sizeof(network.id),"%.16llx",(unsigned long long)nwid);
|
Utils::snprintf(network.id,sizeof(network.id),"%.16llx",(unsigned long long)nwid);
|
||||||
|
|
||||||
MemberRecord member;
|
MemberRecord member;
|
||||||
memset(&member,0,sizeof(member));
|
|
||||||
Utils::snprintf(member.nodeId,sizeof(member.nodeId),"%.10llx",(unsigned long long)identity.address().toInt());
|
Utils::snprintf(member.nodeId,sizeof(member.nodeId),"%.10llx",(unsigned long long)identity.address().toInt());
|
||||||
|
|
||||||
{ // begin lock
|
{ // begin lock
|
||||||
|
@ -567,41 +588,38 @@ NetworkController::ResultCode SqliteNetworkController::doNetworkConfigRequest(co
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update Member.history
|
// Update Member.history
|
||||||
|
|
||||||
{
|
{
|
||||||
std::string fastr;
|
char mh[1024];
|
||||||
if (fromAddr) {
|
|
||||||
fastr.push_back('"');
|
|
||||||
fastr.append(_jsonEscape(fromAddr.toString()));
|
|
||||||
fastr.push_back('"');
|
|
||||||
}
|
|
||||||
char mh[4096];
|
|
||||||
Utils::snprintf(mh,sizeof(mh),
|
Utils::snprintf(mh,sizeof(mh),
|
||||||
"{"
|
"{\"ts\":%llu,\"authorized\":%s,\"clientMajorVersion\":%u,\"clientMinorVersion\":%u,\"clientRevision\":%u,\"fromAddr\":",
|
||||||
"\"ts\":%llu,"
|
|
||||||
"\"authorized\":%s,"
|
|
||||||
"\"clientMajorVersion\":%u,"
|
|
||||||
"\"clientMinorVersion\":%u,"
|
|
||||||
"\"clientRevision\":%u,"
|
|
||||||
"\"fromAddr\":%s"
|
|
||||||
"}",
|
|
||||||
(unsigned long long)now,
|
(unsigned long long)now,
|
||||||
(member.authorized) ? "true" : "false",
|
((member.authorized) ? "true" : "false"),
|
||||||
metaData.getUI(ZT_NETWORKCONFIG_REQUEST_METADATA_KEY_NODE_MAJOR_VERSION,0),
|
metaData.getUI(ZT_NETWORKCONFIG_REQUEST_METADATA_KEY_NODE_MAJOR_VERSION,0),
|
||||||
metaData.getUI(ZT_NETWORKCONFIG_REQUEST_METADATA_KEY_NODE_MINOR_VERSION,0),
|
metaData.getUI(ZT_NETWORKCONFIG_REQUEST_METADATA_KEY_NODE_MINOR_VERSION,0),
|
||||||
metaData.getUI(ZT_NETWORKCONFIG_REQUEST_METADATA_KEY_NODE_REVISION,0),
|
metaData.getUI(ZT_NETWORKCONFIG_REQUEST_METADATA_KEY_NODE_REVISION,0));
|
||||||
(fastr.length() > 0) ? fastr.c_str() : "null");
|
|
||||||
member.recentHistory.push_front(std::string(mh));
|
member.recentHistory.push_front(std::string(mh));
|
||||||
|
if (fromAddr) {
|
||||||
|
member.recentHistory.front().push_back('"');
|
||||||
|
member.recentHistory.front().append(_jsonEscape(fromAddr.toString()));
|
||||||
|
member.recentHistory.front().append("\"}");
|
||||||
|
} else {
|
||||||
|
member.recentHistory.front().append("null}");
|
||||||
|
}
|
||||||
while (member.recentHistory.size() > ZT_NETCONF_DB_MEMBER_HISTORY_LENGTH)
|
while (member.recentHistory.size() > ZT_NETCONF_DB_MEMBER_HISTORY_LENGTH)
|
||||||
member.recentHistory.pop_back();
|
member.recentHistory.pop_back();
|
||||||
std::string rhblob(member.recentHistory.toBlob());
|
std::string rhblob(member.recentHistory.toBlob());
|
||||||
sqlite3_reset(_sUpdateMemberHistory);
|
sqlite3_reset(_sUpdateMemberHistory);
|
||||||
sqlite3_bind_int64(_sUpdateMemberHistory,1,(int64_t)now);
|
sqlite3_bind_int64(_sUpdateMemberHistory,1,(sqlite3_int64)now);
|
||||||
sqlite3_bind_blob(_sUpdateMemberHistory,2,(const void *)rhblob.data(),rhblob.length(),SQLITE_STATIC);
|
sqlite3_bind_blob(_sUpdateMemberHistory,2,(const void *)rhblob.data(),(int)rhblob.length(),SQLITE_STATIC);
|
||||||
sqlite3_bind_int64(_sUpdateMemberHistory,3,member.rowid);
|
sqlite3_bind_int64(_sUpdateMemberHistory,3,member.rowid);
|
||||||
sqlite3_step(_sUpdateMemberHistory);
|
if (sqlite3_step(_sUpdateMemberHistory) != SQLITE_DONE) {
|
||||||
|
printf("!!! %s\n",sqlite3_errmsg(_db));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Don't proceed if member is not authorized
|
// Don't proceed if member is not authorized! ---------------------------
|
||||||
|
|
||||||
if (!member.authorized)
|
if (!member.authorized)
|
||||||
return NetworkController::NETCONF_QUERY_ACCESS_DENIED;
|
return NetworkController::NETCONF_QUERY_ACCESS_DENIED;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue