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; 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;