Преглед изворни кода

Temporarily disable the symmetric NAT port prediction code since the current version adds protocol overhead and probably is not that effective.

Adam Ierymenko пре 6 година
родитељ
комит
ee8682ac75
3 измењених фајлова са 13 додато и 6 уклоњено
  1. 9 6
      node/Peer.cpp
  2. 2 0
      node/SelfAwareness.cpp
  3. 2 0
      node/SelfAwareness.hpp

+ 9 - 6
node/Peer.cpp

@@ -163,6 +163,7 @@ void Peer::received(
 					}
 				} else break;
 			}
+
 			// If the path isn't a duplicate of the same localSocket AND we haven't already determined a replacePath,
 			// then find the worst path and replace it.
 			if (!redundant && replacePath == ZT_MAX_PEER_NETWORK_PATHS) {
@@ -180,6 +181,7 @@ void Peer::received(
 					}
 				}
 			}
+
 			if (replacePath != ZT_MAX_PEER_NETWORK_PATHS) {
 				if (verb == Packet::VERB_OK) {
 					RR->t->peerLearnedNewPath(tPtr,networkId,*this,path,packetId);
@@ -203,15 +205,14 @@ void Peer::received(
 	// all known external addresses for ourselves. We now do this even if we
 	// have a current path since we'll want to use new ones too.
 	if (this->trustEstablished(now)) {
-		if ((now - _lastDirectPathPushSent) >= ZT_DIRECT_PATH_PUSH_INTERVAL) {
+		const uint64_t sinceLastPush = now - _lastDirectPathPushSent;
+		if (sinceLastPush >= ZT_DIRECT_PATH_PUSH_INTERVAL) {
 			_lastDirectPathPushSent = now;
 
-			std::vector<InetAddress> pathsToPush;
-
-			std::vector<InetAddress> dps(RR->node->directPaths());
-			for(std::vector<InetAddress>::const_iterator i(dps.begin());i!=dps.end();++i)
-				pathsToPush.push_back(*i);
+			// Start with explicitly known direct endpoint paths.
+			std::vector<InetAddress> pathsToPush(RR->node->directPaths());
 
+#if 0
 			// Do symmetric NAT prediction if we are communicating indirectly.
 			if (hops > 0) {
 				std::vector<InetAddress> sym(RR->sa->getSymmetricNatPredictions());
@@ -224,6 +225,7 @@ void Peer::received(
 					}
 				}
 			}
+#endif
 
 			if (pathsToPush.size() > 0) {
 				std::vector<InetAddress>::const_iterator p(pathsToPush.begin());
@@ -258,6 +260,7 @@ void Peer::received(
 
 					if (count) {
 						outp.setAt(ZT_PACKET_IDX_PAYLOAD,(uint16_t)count);
+						outp.compress();
 						outp.armor(_key,true);
 						path->send(RR,tPtr,outp.data(),outp.size(),now);
 					}

+ 2 - 0
node/SelfAwareness.cpp

@@ -124,6 +124,7 @@ void SelfAwareness::clean(int64_t now)
 	}
 }
 
+#if 0
 std::vector<InetAddress> SelfAwareness::getSymmetricNatPredictions()
 {
 	/* This is based on ideas and strategies found here:
@@ -206,5 +207,6 @@ std::vector<InetAddress> SelfAwareness::getSymmetricNatPredictions()
 
 	return r;
 }
+#endif
 
 } // namespace ZeroTier

+ 2 - 0
node/SelfAwareness.hpp

@@ -64,12 +64,14 @@ public:
 	 */
 	void clean(int64_t now);
 
+#if 0
 	/**
 	 * If we appear to be behind a symmetric NAT, get predictions for possible external endpoints
 	 *
 	 * @return Symmetric NAT predictions or empty vector if none
 	 */
 	std::vector<InetAddress> getSymmetricNatPredictions();
+#endif
 
 private:
 	struct PhySurfaceKey