diff options
author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2017-04-27 19:36:03 -0700 |
---|---|---|
committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2017-04-27 19:36:03 -0700 |
commit | 62578a21625025a2e2681c8da6126270ead47aa7 (patch) | |
tree | 0375a0c1476bf5c972ecafa71d638d08117bb438 /controller/EmbeddedNetworkController.cpp | |
parent | 9e80db0fd169de19d5d343e8b6998c8ace4aeb22 (diff) | |
download | infinitytier-62578a21625025a2e2681c8da6126270ead47aa7.tar.gz infinitytier-62578a21625025a2e2681c8da6126270ead47aa7.zip |
Reduce memory use and a bit of cleanup.
Diffstat (limited to 'controller/EmbeddedNetworkController.cpp')
-rw-r--r-- | controller/EmbeddedNetworkController.cpp | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/controller/EmbeddedNetworkController.cpp b/controller/EmbeddedNetworkController.cpp index a41a4a94..61aa23ae 100644 --- a/controller/EmbeddedNetworkController.cpp +++ b/controller/EmbeddedNetworkController.cpp @@ -719,6 +719,7 @@ unsigned int EmbeddedNetworkController::handleControlPlaneHttpPOST( member["lastModified"] = now; json &revj = member["revision"]; member["revision"] = (revj.is_number() ? ((uint64_t)revj + 1ULL) : 1ULL); + _removeMemberNonPersistedFields(member); _db.saveNetworkMember(nwid,address,member); _pushMemberUpdate(now,nwid,member); } @@ -1017,10 +1018,11 @@ unsigned int EmbeddedNetworkController::handleControlPlaneHttpPOST( network["id"] = nwids; network["nwid"] = nwids; // legacy - if (true) { + if (network != origNetwork) { json &revj = network["revision"]; network["revision"] = (revj.is_number() ? ((uint64_t)revj + 1ULL) : 1ULL); network["lastModified"] = now; + _removeNetworkNonPersistedFields(network); _db.saveNetwork(nwid,network); // Send an update to all members of the network @@ -1187,6 +1189,10 @@ void EmbeddedNetworkController::_request( const Identity &identity, const Dictionary<ZT_NETWORKCONFIG_METADATA_DICT_CAPACITY> &metaData) { + char nwids[24]; + JSONDB::NetworkSummaryInfo ns; + json network,member,origMember; + if (((!_signingId)||(!_signingId.hasPrivate()))||(_signingId.address().toInt() != (nwid >> 24))||(!_sender)) return; @@ -1200,17 +1206,13 @@ void EmbeddedNetworkController::_request( lrt = now; } - char nwids[24]; Utils::snprintf(nwids,sizeof(nwids),"%.16llx",nwid); - json network,member; - JSONDB::NetworkSummaryInfo ns; if (!_db.getNetworkAndMember(nwid,identity.address().toInt(),network,member,ns)) { _sender->ncSendError(nwid,requestPacketId,identity.address(),NetworkController::NC_ERROR_OBJECT_NOT_FOUND); return; } - - const bool newMember = (member.size() == 0); - json origMember(member); // for detecting modification later + origMember = member; + const bool newMember = ((!member.is_object())||(member.size() == 0)); _initMember(member); { @@ -1235,10 +1237,12 @@ void EmbeddedNetworkController::_request( } // These are always the same, but make sure they are set - const std::string addrs(identity.address().toString()); - member["id"] = addrs; - member["address"] = addrs; - member["nwid"] = nwids; + { + const std::string addrs(identity.address().toString()); + member["id"] = addrs; + member["address"] = addrs; + member["nwid"] = nwids; + } // Determine whether and how member is authorized const char *authorizedBy = (const char *)0; @@ -1347,6 +1351,7 @@ void EmbeddedNetworkController::_request( if (!authorizedBy) { if (origMember != member) { member["lastModified"] = now; + _removeMemberNonPersistedFields(member); _db.saveNetworkMember(nwid,identity.address().toInt(),member); } _sender->ncSendError(nwid,requestPacketId,identity.address(),NetworkController::NC_ERROR_ACCESS_DENIED); @@ -1697,6 +1702,7 @@ void EmbeddedNetworkController::_request( if (member != origMember) { member["lastModified"] = now; + _removeMemberNonPersistedFields(member); _db.saveNetworkMember(nwid,identity.address().toInt(),member); } |