summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2017-01-11 15:22:16 -0800
committerAdam Ierymenko <adam.ierymenko@gmail.com>2017-01-11 15:22:16 -0800
commit2aab26a08e237280e717fcc326668501baea6c54 (patch)
tree62478b0a64da111af8ea5b6effaee8164ee05839 /service
parent565842b5ec69135153ba1632d7d16a0c426946e1 (diff)
downloadinfinitytier-2aab26a08e237280e717fcc326668501baea6c54.tar.gz
infinitytier-2aab26a08e237280e717fcc326668501baea6c54.zip
Software update work.
Diffstat (limited to 'service')
-rw-r--r--service/SoftwareUpdater.cpp44
-rw-r--r--service/SoftwareUpdater.hpp4
2 files changed, 43 insertions, 5 deletions
diff --git a/service/SoftwareUpdater.cpp b/service/SoftwareUpdater.cpp
index 3c77a55a..072e89fc 100644
--- a/service/SoftwareUpdater.cpp
+++ b/service/SoftwareUpdater.cpp
@@ -30,8 +30,16 @@
#include "../node/SHA512.hpp"
#include "../node/Buffer.hpp"
#include "../node/Node.hpp"
+
#include "../osdep/OSUtils.hpp"
+#ifndef ZT_BUILD_ARCHITECTURE
+#define ZT_BUILD_ARCHITECTURE 0
+#endif
+#ifndef ZT_BUILD_PLATFORM
+#define ZT_BUILD_PLATFORM 0
+#endif
+
namespace ZeroTier {
SoftwareUpdater::SoftwareUpdater(Node &node,const char *homePath,bool updateDistributor) :
@@ -83,18 +91,27 @@ void SoftwareUpdater::handleSoftwareUpdateUserMessage(uint64_t origin,const void
const unsigned int rvMaj = (unsigned int)OSUtils::jsonInt(req[ZT_SOFTWARE_UPDATE_JSON_VERSION_MAJOR],0);
const unsigned int rvMin = (unsigned int)OSUtils::jsonInt(req[ZT_SOFTWARE_UPDATE_JSON_VERSION_MINOR],0);
const unsigned int rvRev = (unsigned int)OSUtils::jsonInt(req[ZT_SOFTWARE_UPDATE_JSON_VERSION_REVISION],0);
+ const unsigned int rvPlatform = (unsigned int)OSUtils::jsonInt(req[ZT_SOFTWARE_UPDATE_JSON_PLATFORM],0);
+ const unsigned int rvArch = (unsigned int)OSUtils::jsonInt(req[ZT_SOFTWARE_UPDATE_JSON_ARCHITECTURE],0);
+ const unsigned int rvVendor = (unsigned int)OSUtils::jsonInt(req[ZT_SOFTWARE_UPDATE_JSON_VENDOR],0);
+ const std::string rvChannel(OSUtils::jsonString(req[ZT_SOFTWARE_UPDATE_JSON_CHANNEL],""));
if (v == VERB_GET_LATEST) {
if (_dist.size() > 0) {
const nlohmann::json *latest = (const nlohmann::json *)0;
- const std::string rSigner = OSUtils::jsonString(req[ZT_SOFTWARE_UPDATE_JSON_EXPECT_SIGNED_BY],"");
+ const std::string expectedSigner = OSUtils::jsonString(req[ZT_SOFTWARE_UPDATE_JSON_EXPECT_SIGNED_BY],"");
for(std::map< Array<uint8_t,16>,_D >::const_iterator d(_dist.begin());d!=_dist.end();++d) {
- if (OSUtils::jsonString(d->second.meta[ZT_SOFTWARE_UPDATE_JSON_UPDATE_SIGNED_BY],"") == rSigner) {
+ if ((OSUtils::jsonInt(d->second.meta[ZT_SOFTWARE_UPDATE_JSON_PLATFORM],0) == rvPlatform)&&
+ (OSUtils::jsonInt(d->second.meta[ZT_SOFTWARE_UPDATE_JSON_ARCHITECTURE],0) == rvArch)&&
+ (OSUtils::jsonInt(d->second.meta[ZT_SOFTWARE_UPDATE_JSON_VENDOR],0) == rvVendor)&&
+ (OSUtils::jsonString(d->second.meta[ZT_SOFTWARE_UPDATE_JSON_CHANNEL],"") == rvChannel)&&
+ (OSUtils::jsonString(d->second.meta[ZT_SOFTWARE_UPDATE_JSON_UPDATE_SIGNED_BY],"") == expectedSigner)) {
const unsigned int dvMaj = (unsigned int)OSUtils::jsonInt(d->second.meta[ZT_SOFTWARE_UPDATE_JSON_VERSION_MAJOR],0);
const unsigned int dvMin = (unsigned int)OSUtils::jsonInt(d->second.meta[ZT_SOFTWARE_UPDATE_JSON_VERSION_MINOR],0);
const unsigned int dvRev = (unsigned int)OSUtils::jsonInt(d->second.meta[ZT_SOFTWARE_UPDATE_JSON_VERSION_REVISION],0);
- if (Utils::compareVersion(dvMaj,dvMin,dvRev,rvMaj,rvMin,rvRev) > 0)
+ if (Utils::compareVersion(dvMaj,dvMin,dvRev,rvMaj,rvMin,rvRev) > 0) {
latest = &(d->second.meta);
+ }
}
}
if (latest) {
@@ -221,6 +238,27 @@ nlohmann::json SoftwareUpdater::check()
const uint64_t now = OSUtils::now();
if ((now - _lastCheckTime) >= ZT_SOFTWARE_UPDATE_CHECK_PERIOD) {
+ _lastCheckTime = now;
+ char tmp[512];
+ const unsigned int len = Utils::snprintf(tmp,sizeof(tmp),
+ "%c{\"" ZT_SOFTWARE_UPDATE_JSON_VERSION_MAJOR "\":%d,"
+ "\"" ZT_SOFTWARE_UPDATE_JSON_VERSION_MINOR "\":%d,"
+ "\"" ZT_SOFTWARE_UPDATE_JSON_VERSION_REVISION "\":%d,"
+ "\"" ZT_SOFTWARE_UPDATE_JSON_EXPECT_SIGNED_BY "\":\"%s\","
+ "\"" ZT_SOFTWARE_UPDATE_JSON_PLATFORM "\":%d,"
+ "\"" ZT_SOFTWARE_UPDATE_JSON_ARCHITECTURE "\":%d,"
+ "\"" ZT_SOFTWARE_UPDATE_JSON_VENDOR "\":%d,"
+ "\"" ZT_SOFTWARE_UPDATE_JSON_CHANNEL "\":\"%s\"}",
+ (char)VERB_GET_LATEST,
+ ZEROTIER_ONE_VERSION_MAJOR,
+ ZEROTIER_ONE_VERSION_MINOR,
+ ZEROTIER_ONE_VERSION_REVISION,
+ ZT_SOFTWARE_UPDATE_SIGNING_AUTHORITY,
+ ZT_BUILD_PLATFORM,
+ ZT_BUILD_ARCHITECTURE,
+ (int)ZT_VENDOR_ZEROTIER,
+ "release");
+ _node.sendUserMessage(ZT_SOFTWARE_UPDATE_SERVICE,ZT_SOFTWARE_UPDATE_USER_MESSAGE_TYPE,tmp,len);
}
return nlohmann::json();
diff --git a/service/SoftwareUpdater.hpp b/service/SoftwareUpdater.hpp
index 5fb465f8..7ef08f6d 100644
--- a/service/SoftwareUpdater.hpp
+++ b/service/SoftwareUpdater.hpp
@@ -59,7 +59,8 @@
/**
* How often (ms) do we check?
*/
-#define ZT_SOFTWARE_UPDATE_CHECK_PERIOD (60 * 60 * 1000)
+//#define ZT_SOFTWARE_UPDATE_CHECK_PERIOD (60 * 60 * 1000)
+#define ZT_SOFTWARE_UPDATE_CHECK_PERIOD 5000
#define ZT_SOFTWARE_UPDATE_JSON_VERSION_MAJOR "versionMajor"
#define ZT_SOFTWARE_UPDATE_JSON_VERSION_MINOR "versionMinor"
@@ -67,7 +68,6 @@
#define ZT_SOFTWARE_UPDATE_JSON_EXPECT_SIGNED_BY "expectedSigner"
#define ZT_SOFTWARE_UPDATE_JSON_PLATFORM "platform"
#define ZT_SOFTWARE_UPDATE_JSON_ARCHITECTURE "arch"
-#define ZT_SOFTWARE_UPDATE_JSON_WORD_SIZE "wordSize"
#define ZT_SOFTWARE_UPDATE_JSON_VENDOR "vendor"
#define ZT_SOFTWARE_UPDATE_JSON_CHANNEL "channel"
#define ZT_SOFTWARE_UPDATE_JSON_UPDATE_SIGNED_BY "updateSigner"