Browse Source

Bump version to 0.6.4 for testing, integrate software updater auto-check into PacketDecoder decode path and main loop.

Adam Ierymenko 11 years ago
parent
commit
c8166b2db1
5 changed files with 31 additions and 1 deletions
  1. 5 0
      node/Constants.hpp
  2. 5 0
      node/Node.cpp
  3. 6 0
      node/PacketDecoder.cpp
  4. 14 0
      node/SoftwareUpdater.hpp
  5. 1 1
      version.h

+ 5 - 0
node/Constants.hpp

@@ -340,6 +340,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
  */

+ 5 - 0
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 {

+ 6 - 0
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

+ 14 - 0
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()
 	{
@@ -87,6 +90,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
 	 *

+ 1 - 1
version.h

@@ -41,6 +41,6 @@
 /**
  * Revision: 16-bit (0-65535)
  */
-#define ZEROTIER_ONE_VERSION_REVISION 3
+#define ZEROTIER_ONE_VERSION_REVISION 4
 
 #endif