diff options
author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2013-12-26 20:57:17 -0800 |
---|---|---|
committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2013-12-26 20:57:17 -0800 |
commit | c8166b2db15b692d2c3deba2b7b82343ba478873 (patch) | |
tree | b418e8a043185f14d321b77ae20e440a230fde28 | |
parent | 54c2c945e00b4da9931bf16c762860886704c6b3 (diff) | |
download | infinitytier-c8166b2db15b692d2c3deba2b7b82343ba478873.tar.gz infinitytier-c8166b2db15b692d2c3deba2b7b82343ba478873.zip |
Bump version to 0.6.4 for testing, integrate software updater auto-check into PacketDecoder decode path and main loop.
-rw-r--r-- | node/Constants.hpp | 5 | ||||
-rw-r--r-- | node/Node.cpp | 5 | ||||
-rw-r--r-- | node/PacketDecoder.cpp | 6 | ||||
-rw-r--r-- | node/SoftwareUpdater.hpp | 14 | ||||
-rw-r--r-- | version.h | 2 |
5 files changed, 31 insertions, 1 deletions
diff --git a/node/Constants.hpp b/node/Constants.hpp index 85af3b28..20983db9 100644 --- a/node/Constants.hpp +++ b/node/Constants.hpp @@ -341,6 +341,11 @@ error_no_byte_order_defined; #define ZT_UPDATE_MIN_INTERVAL 120000 /** + * Maximum interval between attempts to do a software update + */ +#define ZT_UPDATE_MAX_INTERVAL 28800000 + +/** * Update HTTP timeout in seconds */ #define ZT_UPDATE_HTTP_TIMEOUT 30 diff --git a/node/Node.cpp b/node/Node.cpp index dd0e47ed..cd8cfb5e 100644 --- a/node/Node.cpp +++ b/node/Node.cpp @@ -434,6 +434,9 @@ Node::ReasonForTermination Node::run() #ifdef ZT_AUTO_UPDATE if (ZT_DEFAULTS.updateLatestNfoURL.length()) _r->updater = new SoftwareUpdater(_r); + else { + LOG("WARNING: unable to enable software updates: latest .nfo URL from ZT_DEFAULTS is empty (does this platform actually support software updates?)"); + } #endif // Bind local port for core I/O @@ -575,6 +578,8 @@ Node::ReasonForTermination Node::run() _r->mc->clean(); _r->topology->clean(); _r->nc->clean(); + if (_r->updater) + _r->updater->checkIfMaxIntervalExceeded(now); } try { diff --git a/node/PacketDecoder.cpp b/node/PacketDecoder.cpp index 1c6d09ca..ca9f18a3 100644 --- a/node/PacketDecoder.cpp +++ b/node/PacketDecoder.cpp @@ -41,6 +41,7 @@ #include "NodeConfig.hpp" #include "Service.hpp" #include "Demarc.hpp" +#include "SoftwareUpdater.hpp" namespace ZeroTier { @@ -265,6 +266,11 @@ bool PacketDecoder::_doOK(const RuntimeEnvironment *_r,const SharedPtr<Peer> &pe unsigned int vRevision = at<uint16_t>(ZT_PROTO_VERB_HELLO__OK__IDX_REVISION); TRACE("%s(%s): OK(HELLO), version %u.%u.%u",source().toString().c_str(),_remoteAddress.toString().c_str(),vMajor,vMinor,vRevision); peer->setRemoteVersion(vMajor,vMinor,vRevision); + + // If a supernode has a version higher than ours, this causes a software + // update check to run now. + if ((_r->updater)&&(_r->topology->isSupernode(peer->address()))) + _r->updater->sawRemoteVersion(vMajor,vMinor,vRevision); } break; case Packet::VERB_WHOIS: { // Right now only supernodes are allowed to send OK(WHOIS) to prevent diff --git a/node/SoftwareUpdater.hpp b/node/SoftwareUpdater.hpp index 5e47bbea..477bc7e3 100644 --- a/node/SoftwareUpdater.hpp +++ b/node/SoftwareUpdater.hpp @@ -76,6 +76,9 @@ public: /** * Check for updates now regardless of last check time or version + * + * This only starts a check if one is not in progress. Otherwise it does + * nothing. */ inline void checkNow() { @@ -88,6 +91,17 @@ public: } /** + * Check for updates now if it's been longer than ZT_UPDATE_MAX_INTERVAL + * + * This is called periodically from the main loop. + */ + inline void checkIfMaxIntervalExceeded(uint64_t now) + { + if ((now - _lastUpdateAttempt) >= ZT_UPDATE_MAX_INTERVAL) + checkNow(); + } + + /** * Pack three-component version into a 64-bit integer * * @param vmaj Major version (0..65535) @@ -41,6 +41,6 @@ /** * Revision: 16-bit (0-65535) */ -#define ZEROTIER_ONE_VERSION_REVISION 3 +#define ZEROTIER_ONE_VERSION_REVISION 4 #endif |