Controller fixes...

This commit is contained in:
Adam Ierymenko 2016-06-29 17:02:03 +00:00
parent 5309c7e082
commit d9eacd1616

View File

@ -168,6 +168,15 @@ struct MemberRecord
bool activeBridge;
uint64_t lastRequestTime;
MemberRecentHistory recentHistory;
MemberRecord() :
rowid(0),
authorized(false),
activeBridge(false),
lastRequestTime(0)
{
nodeId[0] = (char)0;
}
};
struct NetworkRecord
@ -182,6 +191,20 @@ struct NetworkRecord
uint64_t creationTime;
uint64_t revision;
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
@ -469,11 +492,9 @@ NetworkController::ResultCode SqliteNetworkController::doNetworkConfigRequest(co
const uint64_t now = OSUtils::now();
NetworkRecord network;
memset(&network,0,sizeof(network));
Utils::snprintf(network.id,sizeof(network.id),"%.16llx",(unsigned long long)nwid);
MemberRecord member;
memset(&member,0,sizeof(member));
Utils::snprintf(member.nodeId,sizeof(member.nodeId),"%.10llx",(unsigned long long)identity.address().toInt());
{ // begin lock
@ -567,41 +588,38 @@ NetworkController::ResultCode SqliteNetworkController::doNetworkConfigRequest(co
}
// Update Member.history
{
std::string fastr;
if (fromAddr) {
fastr.push_back('"');
fastr.append(_jsonEscape(fromAddr.toString()));
fastr.push_back('"');
}
char mh[4096];
char mh[1024];
Utils::snprintf(mh,sizeof(mh),
"{"
"\"ts\":%llu,"
"\"authorized\":%s,"
"\"clientMajorVersion\":%u,"
"\"clientMinorVersion\":%u,"
"\"clientRevision\":%u,"
"\"fromAddr\":%s"
"}",
"{\"ts\":%llu,\"authorized\":%s,\"clientMajorVersion\":%u,\"clientMinorVersion\":%u,\"clientRevision\":%u,\"fromAddr\":",
(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_MINOR_VERSION,0),
metaData.getUI(ZT_NETWORKCONFIG_REQUEST_METADATA_KEY_NODE_REVISION,0),
(fastr.length() > 0) ? fastr.c_str() : "null");
metaData.getUI(ZT_NETWORKCONFIG_REQUEST_METADATA_KEY_NODE_REVISION,0));
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)
member.recentHistory.pop_back();
std::string rhblob(member.recentHistory.toBlob());
sqlite3_reset(_sUpdateMemberHistory);
sqlite3_bind_int64(_sUpdateMemberHistory,1,(int64_t)now);
sqlite3_bind_blob(_sUpdateMemberHistory,2,(const void *)rhblob.data(),rhblob.length(),SQLITE_STATIC);
sqlite3_bind_int64(_sUpdateMemberHistory,1,(sqlite3_int64)now);
sqlite3_bind_blob(_sUpdateMemberHistory,2,(const void *)rhblob.data(),(int)rhblob.length(),SQLITE_STATIC);
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)
return NetworkController::NETCONF_QUERY_ACCESS_DENIED;