summaryrefslogtreecommitdiff
path: root/controller
diff options
context:
space:
mode:
Diffstat (limited to 'controller')
-rw-r--r--controller/SqliteNetworkController.cpp66
1 files changed, 42 insertions, 24 deletions
diff --git a/controller/SqliteNetworkController.cpp b/controller/SqliteNetworkController.cpp
index 378d7d5c..48a55f68 100644
--- a/controller/SqliteNetworkController.cpp
+++ b/controller/SqliteNetworkController.cpp
@@ -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;