mirror of
				https://github.com/PurpleI2P/i2pd.git
				synced 2025-11-04 08:30:46 +00:00 
			
		
		
		
	don't adjust clock if offsets came from same router
This commit is contained in:
		
							parent
							
								
									c5a1806528
								
							
						
					
					
						commit
						70639f1139
					
				
					 3 changed files with 26 additions and 12 deletions
				
			
		| 
						 | 
				
			
			@ -210,11 +210,14 @@ namespace transport
 | 
			
		|||
		return ep.port ();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	void SSU2Server::AdjustTimeOffset (int64_t offset)
 | 
			
		||||
	void SSU2Server::AdjustTimeOffset (int64_t offset, std::shared_ptr<const i2p::data::IdentityEx> from)
 | 
			
		||||
	{
 | 
			
		||||
		if (offset)
 | 
			
		||||
		{	
 | 
			
		||||
			if (m_PendingTimeOffset) // one more
 | 
			
		||||
			{	
 | 
			
		||||
				if (m_PendingTimeOffsetFrom && from && 
 | 
			
		||||
					m_PendingTimeOffsetFrom->GetIdentHash ().GetLL()[0] != from->GetIdentHash ().GetLL()[0]) // from different routers
 | 
			
		||||
				{	
 | 
			
		||||
					if (std::abs (m_PendingTimeOffset - offset) < SSU2_CLOCK_SKEW)
 | 
			
		||||
					{	
 | 
			
		||||
| 
						 | 
				
			
			@ -225,12 +228,22 @@ namespace transport
 | 
			
		|||
					else
 | 
			
		||||
						LogPrint (eLogWarning, "SSU2: Time offsets are too different. Clock not adjusted");
 | 
			
		||||
					m_PendingTimeOffset = 0;
 | 
			
		||||
					m_PendingTimeOffsetFrom = nullptr;
 | 
			
		||||
				}
 | 
			
		||||
				else
 | 
			
		||||
					LogPrint (eLogWarning, "SSU2: Time offsets from same router. Clock not adjusted");
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
			{	
 | 
			
		||||
				m_PendingTimeOffset = offset; // first 
 | 
			
		||||
				m_PendingTimeOffsetFrom = from;
 | 
			
		||||
			}	
 | 
			
		||||
		}	
 | 
			
		||||
		else
 | 
			
		||||
		{	
 | 
			
		||||
			m_PendingTimeOffset = 0; // reset
 | 
			
		||||
			m_PendingTimeOffsetFrom = nullptr;
 | 
			
		||||
		}	
 | 
			
		||||
	}	
 | 
			
		||||
		
 | 
			
		||||
	boost::asio::ip::udp::socket& SSU2Server::OpenSocket (const boost::asio::ip::udp::endpoint& localEndpoint)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -67,7 +67,7 @@ namespace transport
 | 
			
		|||
			bool IsSupported (const boost::asio::ip::address& addr) const;
 | 
			
		||||
			uint16_t GetPort (bool v4) const;
 | 
			
		||||
			bool IsSyncClockFromPeers () const { return m_IsSyncClockFromPeers; };
 | 
			
		||||
			void AdjustTimeOffset (int64_t offset);
 | 
			
		||||
			void AdjustTimeOffset (int64_t offset, std::shared_ptr<const i2p::data::IdentityEx> from);
 | 
			
		||||
 | 
			
		||||
			void AddSession (std::shared_ptr<SSU2Session> session);
 | 
			
		||||
			void RemoveSession (uint64_t connID);
 | 
			
		||||
| 
						 | 
				
			
			@ -164,6 +164,7 @@ namespace transport
 | 
			
		|||
			bool m_IsPublished; // if we maintain introducers
 | 
			
		||||
			bool m_IsSyncClockFromPeers;
 | 
			
		||||
			int64_t m_PendingTimeOffset; // during peer test
 | 
			
		||||
			std::shared_ptr<const i2p::data::IdentityEx> m_PendingTimeOffsetFrom;
 | 
			
		||||
 | 
			
		||||
			// proxy
 | 
			
		||||
			bool m_IsThroughProxy;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1671,10 +1671,10 @@ namespace transport
 | 
			
		|||
						if (std::abs (offset) > SSU2_CLOCK_THRESHOLD)
 | 
			
		||||
						{	
 | 
			
		||||
							LogPrint (eLogWarning, "SSU2: Time offset ", offset, " from ", m_RemoteEndpoint);
 | 
			
		||||
							m_Server.AdjustTimeOffset (-offset);
 | 
			
		||||
							m_Server.AdjustTimeOffset (-offset, GetRemoteIdentity ());
 | 
			
		||||
						}	
 | 
			
		||||
						else
 | 
			
		||||
							m_Server.AdjustTimeOffset (0);
 | 
			
		||||
							m_Server.AdjustTimeOffset (0, nullptr);
 | 
			
		||||
					}
 | 
			
		||||
					else if (std::abs (offset) > SSU2_CLOCK_SKEW)
 | 
			
		||||
					{
 | 
			
		||||
| 
						 | 
				
			
			@ -2485,7 +2485,7 @@ namespace transport
 | 
			
		|||
				i2p::context.SetTestingV6 (testing);
 | 
			
		||||
		}
 | 
			
		||||
		if (!testing)
 | 
			
		||||
			m_Server.AdjustTimeOffset (0); // reset time offset when testing is over
 | 
			
		||||
			m_Server.AdjustTimeOffset (0, nullptr); // reset time offset when testing is over
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	size_t SSU2Session::CreateAddressBlock (uint8_t * buf, size_t len, const boost::asio::ip::udp::endpoint& ep)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue