mirror of
				https://github.com/PurpleI2P/i2pd.git
				synced 2025-11-04 00:20:46 +00:00 
			
		
		
		
	shorter ack request  interval for datagrams
	
		
			
	
		
	
	
		
	
		
			Some checks failed
		
		
	
	
		
			
				
	
				Build containers / Building container for ${{ matrix.platform }} (armv7, linux/arm/v7) (push) Has been cancelled
				
			
		
			
				
	
				Build containers / Building container for ${{ matrix.platform }} (i386, linux/386) (push) Has been cancelled
				
			
		
			
				
	
				Build Debian packages / ${{ matrix.dist }} (bookworm) (push) Has been cancelled
				
			
		
			
				
	
				Build Debian packages / ${{ matrix.dist }} (bullseye) (push) Has been cancelled
				
			
		
			
				
	
				Build Debian packages / ${{ matrix.dist }} (buster) (push) Has been cancelled
				
			
		
			
				
	
				Build on FreeBSD / with UPnP (push) Has been cancelled
				
			
		
			
				
	
				Build on OSX / With USE_UPNP=${{ matrix.with_upnp }} (no) (push) Has been cancelled
				
			
		
			
				
	
				Build on OSX / With USE_UPNP=${{ matrix.with_upnp }} (yes) (push) Has been cancelled
				
			
		
			
				
	
				Build on Windows / ${{ matrix.arch }} (clang-x86_64, x64-clang, clang, CLANG64) (push) Has been cancelled
				
			
		
			
				
	
				Build on Windows / ${{ matrix.arch }} (i686, x86, gcc, MINGW32) (push) Has been cancelled
				
			
		
			
				
	
				Build on Windows / ${{ matrix.arch }} (ucrt-x86_64, x64-ucrt, gcc, UCRT64) (push) Has been cancelled
				
			
		
			
				
	
				Build on Windows / ${{ matrix.arch }} (x86_64, x64, gcc, MINGW64) (push) Has been cancelled
				
			
		
			
				
	
				Build on Windows / CMake ${{ matrix.arch }} (clang-x86_64, x64-clang, clang, CLANG64) (push) Has been cancelled
				
			
		
			
				
	
				Build on Windows / CMake ${{ matrix.arch }} (i686, x86, gcc, MINGW32) (push) Has been cancelled
				
			
		
			
				
	
				Build on Windows / CMake ${{ matrix.arch }} (ucrt-x86_64, x64-ucrt, gcc, UCRT64) (push) Has been cancelled
				
			
		
			
				
	
				Build on Windows / CMake ${{ matrix.arch }} (x86_64, x64, gcc, MINGW64) (push) Has been cancelled
				
			
		
			
				
	
				Build on Windows / XP (push) Has been cancelled
				
			
		
			
				
	
				Build on Ubuntu / Make with USE_UPNP=${{ matrix.with_upnp }} (no) (push) Has been cancelled
				
			
		
			
				
	
				Build on Ubuntu / Make with USE_UPNP=${{ matrix.with_upnp }} (yes) (push) Has been cancelled
				
			
		
			
				
	
				Build on Ubuntu / CMake with -DWITH_UPNP=${{ matrix.with_upnp }} (OFF) (push) Has been cancelled
				
			
		
			
				
	
				Build on Ubuntu / CMake with -DWITH_UPNP=${{ matrix.with_upnp }} (ON) (push) Has been cancelled
				
			
		
			
				
	
				Build containers / Building container for ${{ matrix.platform }} (amd64, linux/amd64) (push) Has been cancelled
				
			
		
			
				
	
				Build containers / Building container for ${{ matrix.platform }} (arm64, linux/arm64) (push) Has been cancelled
				
			
		
			
				
	
				Build containers / Pushing merged manifest (push) Has been cancelled
				
			
		
		
	
	
				
					
				
			
		
			Some checks failed
		
		
	
	Build containers / Building container for ${{ matrix.platform }} (armv7, linux/arm/v7) (push) Has been cancelled
				
			Build containers / Building container for ${{ matrix.platform }} (i386, linux/386) (push) Has been cancelled
				
			Build Debian packages / ${{ matrix.dist }} (bookworm) (push) Has been cancelled
				
			Build Debian packages / ${{ matrix.dist }} (bullseye) (push) Has been cancelled
				
			Build Debian packages / ${{ matrix.dist }} (buster) (push) Has been cancelled
				
			Build on FreeBSD / with UPnP (push) Has been cancelled
				
			Build on OSX / With USE_UPNP=${{ matrix.with_upnp }} (no) (push) Has been cancelled
				
			Build on OSX / With USE_UPNP=${{ matrix.with_upnp }} (yes) (push) Has been cancelled
				
			Build on Windows / ${{ matrix.arch }} (clang-x86_64, x64-clang, clang, CLANG64) (push) Has been cancelled
				
			Build on Windows / ${{ matrix.arch }} (i686, x86, gcc, MINGW32) (push) Has been cancelled
				
			Build on Windows / ${{ matrix.arch }} (ucrt-x86_64, x64-ucrt, gcc, UCRT64) (push) Has been cancelled
				
			Build on Windows / ${{ matrix.arch }} (x86_64, x64, gcc, MINGW64) (push) Has been cancelled
				
			Build on Windows / CMake ${{ matrix.arch }} (clang-x86_64, x64-clang, clang, CLANG64) (push) Has been cancelled
				
			Build on Windows / CMake ${{ matrix.arch }} (i686, x86, gcc, MINGW32) (push) Has been cancelled
				
			Build on Windows / CMake ${{ matrix.arch }} (ucrt-x86_64, x64-ucrt, gcc, UCRT64) (push) Has been cancelled
				
			Build on Windows / CMake ${{ matrix.arch }} (x86_64, x64, gcc, MINGW64) (push) Has been cancelled
				
			Build on Windows / XP (push) Has been cancelled
				
			Build on Ubuntu / Make with USE_UPNP=${{ matrix.with_upnp }} (no) (push) Has been cancelled
				
			Build on Ubuntu / Make with USE_UPNP=${{ matrix.with_upnp }} (yes) (push) Has been cancelled
				
			Build on Ubuntu / CMake with -DWITH_UPNP=${{ matrix.with_upnp }} (OFF) (push) Has been cancelled
				
			Build on Ubuntu / CMake with -DWITH_UPNP=${{ matrix.with_upnp }} (ON) (push) Has been cancelled
				
			Build containers / Building container for ${{ matrix.platform }} (amd64, linux/amd64) (push) Has been cancelled
				
			Build containers / Building container for ${{ matrix.platform }} (arm64, linux/arm64) (push) Has been cancelled
				
			Build containers / Pushing merged manifest (push) Has been cancelled
				
			This commit is contained in:
		
							parent
							
								
									c023051fe4
								
							
						
					
					
						commit
						3e3e0e0a62
					
				
					 5 changed files with 25 additions and 18 deletions
				
			
		| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
/*
 | 
			
		||||
* Copyright (c) 2013-2024, The PurpleI2P Project
 | 
			
		||||
* Copyright (c) 2013-2025, The PurpleI2P Project
 | 
			
		||||
*
 | 
			
		||||
* This file is part of Purple i2pd project and licensed under BSD3
 | 
			
		||||
*
 | 
			
		||||
| 
						 | 
				
			
			@ -104,8 +104,7 @@ namespace datagram
 | 
			
		|||
 | 
			
		||||
		if (verified)
 | 
			
		||||
		{
 | 
			
		||||
			auto h = identity.GetIdentHash();
 | 
			
		||||
			auto session = ObtainSession(h);
 | 
			
		||||
			auto session = ObtainSession (identity.GetIdentHash());
 | 
			
		||||
			session->Ack();
 | 
			
		||||
			auto r = FindReceiver(toPort);
 | 
			
		||||
			if(r)
 | 
			
		||||
| 
						 | 
				
			
			@ -381,8 +380,12 @@ namespace datagram
 | 
			
		|||
			if (!found)
 | 
			
		||||
			{
 | 
			
		||||
				m_RoutingSession = m_LocalDestination->GetRoutingSession(m_RemoteLeaseSet, true);
 | 
			
		||||
				if (!m_RoutingSession->GetOwner () || !m_RoutingSession->IsReadyToSend ())
 | 
			
		||||
					m_PendingRoutingSessions.push_back (m_RoutingSession);
 | 
			
		||||
				if (m_RoutingSession)
 | 
			
		||||
				{	
 | 
			
		||||
					m_RoutingSession->SetAckRequestInterval (DATAGRAM_SESSION_ACK_REQUEST_INTERVAL);
 | 
			
		||||
					if (!m_RoutingSession->GetOwner () || !m_RoutingSession->IsReadyToSend ())
 | 
			
		||||
						m_PendingRoutingSessions.push_back (m_RoutingSession);
 | 
			
		||||
				}	
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
/*
 | 
			
		||||
* Copyright (c) 2013-2024, The PurpleI2P Project
 | 
			
		||||
* Copyright (c) 2013-2025, The PurpleI2P Project
 | 
			
		||||
*
 | 
			
		||||
* This file is part of Purple i2pd project and licensed under BSD3
 | 
			
		||||
*
 | 
			
		||||
| 
						 | 
				
			
			@ -44,6 +44,7 @@ namespace datagram
 | 
			
		|||
	// max 64 messages buffered in send queue for each datagram session
 | 
			
		||||
	const size_t DATAGRAM_SEND_QUEUE_MAX_SIZE = 64;
 | 
			
		||||
	const uint64_t DATAGRAM_MAX_FLUSH_INTERVAL = 5; // in milliseconds
 | 
			
		||||
	const int DATAGRAM_SESSION_ACK_REQUEST_INTERVAL = 5500; // in milliseconds
 | 
			
		||||
 | 
			
		||||
	class DatagramSession : public std::enable_shared_from_this<DatagramSession>
 | 
			
		||||
	{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
/*
 | 
			
		||||
* Copyright (c) 2013-2024, The PurpleI2P Project
 | 
			
		||||
* Copyright (c) 2013-2025, The PurpleI2P Project
 | 
			
		||||
*
 | 
			
		||||
* This file is part of Purple i2pd project and licensed under BSD3
 | 
			
		||||
*
 | 
			
		||||
| 
						 | 
				
			
			@ -913,7 +913,7 @@ namespace garlic
 | 
			
		|||
			}
 | 
			
		||||
		}
 | 
			
		||||
		if (!sendAckRequest && !first &&
 | 
			
		||||
		    ((!m_AckRequestMsgID && ts > m_LastAckRequestSendTime + ECIESX25519_ACK_REQUEST_INTERVAL) || // regular request
 | 
			
		||||
		    ((!m_AckRequestMsgID && ts > m_LastAckRequestSendTime + m_AckRequestInterval) || // regular request
 | 
			
		||||
		     (m_AckRequestMsgID && ts > m_LastAckRequestSendTime + LEASESET_CONFIRMATION_TIMEOUT))) // previous request failed. try again
 | 
			
		||||
		{	
 | 
			
		||||
			// not LeaseSet
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
/*
 | 
			
		||||
* Copyright (c) 2013-2024, The PurpleI2P Project
 | 
			
		||||
* Copyright (c) 2013-2025, The PurpleI2P Project
 | 
			
		||||
*
 | 
			
		||||
* This file is part of Purple i2pd project and licensed under BSD3
 | 
			
		||||
*
 | 
			
		||||
| 
						 | 
				
			
			@ -33,7 +33,7 @@ namespace garlic
 | 
			
		|||
	const int ECIESX25519_SESSION_CREATE_TIMEOUT = 3; // in seconds, NSR must be send after NS received
 | 
			
		||||
	const int ECIESX25519_SESSION_ESTABLISH_TIMEOUT = 15; // in seconds 
 | 
			
		||||
	const int ECIESX25519_PREVIOUS_TAGSET_EXPIRATION_TIMEOUT = 180; // in seconds
 | 
			
		||||
	const int ECIESX25519_ACK_REQUEST_INTERVAL = 33000; // in milliseconds
 | 
			
		||||
	const int ECIESX25519_DEFAULT_ACK_REQUEST_INTERVAL = 33000; // in milliseconds
 | 
			
		||||
	const int ECIESX25519_ACK_REQUEST_MAX_NUM_ATTEMPTS = 3;
 | 
			
		||||
	const int ECIESX25519_TAGSET_MAX_NUM_TAGS = 8192; // number of tags we request new tagset after
 | 
			
		||||
	const int ECIESX25519_MIN_NUM_GENERATED_TAGS = 24;
 | 
			
		||||
| 
						 | 
				
			
			@ -164,7 +164,7 @@ namespace garlic
 | 
			
		|||
			~ECIESX25519AEADRatchetSession ();
 | 
			
		||||
 | 
			
		||||
			bool HandleNextMessage (uint8_t * buf, size_t len, std::shared_ptr<ReceiveRatchetTagSet> receiveTagset, int index = 0);
 | 
			
		||||
			std::shared_ptr<I2NPMessage> WrapSingleMessage (std::shared_ptr<const I2NPMessage> msg);
 | 
			
		||||
			std::shared_ptr<I2NPMessage> WrapSingleMessage (std::shared_ptr<const I2NPMessage> msg) override;
 | 
			
		||||
			std::shared_ptr<I2NPMessage> WrapOneTimeMessage (std::shared_ptr<const I2NPMessage> msg);
 | 
			
		||||
 | 
			
		||||
			const uint8_t * GetRemoteStaticKey () const { return m_RemoteStaticKey; }
 | 
			
		||||
| 
						 | 
				
			
			@ -180,11 +180,12 @@ namespace garlic
 | 
			
		|||
			bool CanBeRestarted (uint64_t ts) const { return ts > m_SessionCreatedTimestamp + ECIESX25519_RESTART_TIMEOUT; }
 | 
			
		||||
			bool IsInactive (uint64_t ts) const { return ts > m_LastActivityTimestamp + ECIESX25519_INACTIVITY_TIMEOUT && CanBeRestarted (ts); }
 | 
			
		||||
 | 
			
		||||
			bool IsRatchets () const { return true; };
 | 
			
		||||
			bool IsReadyToSend () const { return m_State != eSessionStateNewSessionSent; };
 | 
			
		||||
			bool IsTerminated () const { return m_IsTerminated; }
 | 
			
		||||
			uint64_t GetLastActivityTimestamp () const { return m_LastActivityTimestamp; };
 | 
			
		||||
			bool CleanupUnconfirmedTags (); // return true if unaswered Ack requests, called from I2CP
 | 
			
		||||
			bool IsRatchets () const override { return true; };
 | 
			
		||||
			bool IsReadyToSend () const override { return m_State != eSessionStateNewSessionSent; };
 | 
			
		||||
			bool IsTerminated () const override { return m_IsTerminated; }
 | 
			
		||||
			uint64_t GetLastActivityTimestamp () const override { return m_LastActivityTimestamp; };
 | 
			
		||||
			void SetAckRequestInterval (int interval) override { m_AckRequestInterval = interval; };
 | 
			
		||||
			bool CleanupUnconfirmedTags () override; // return true if unaswered Ack requests, called from I2CP
 | 
			
		||||
			
 | 
			
		||||
		protected:
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -235,6 +236,7 @@ namespace garlic
 | 
			
		|||
			uint64_t m_LastAckRequestSendTime = 0; // milliseconds
 | 
			
		||||
			uint32_t m_AckRequestMsgID = 0; 
 | 
			
		||||
			int m_AckRequestNumAttempts = 0;
 | 
			
		||||
			int m_AckRequestInterval = ECIESX25519_DEFAULT_ACK_REQUEST_INTERVAL; // milliseconds
 | 
			
		||||
			
 | 
			
		||||
		public:
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
/*
 | 
			
		||||
* Copyright (c) 2013-2024, The PurpleI2P Project
 | 
			
		||||
* Copyright (c) 2013-2025, The PurpleI2P Project
 | 
			
		||||
*
 | 
			
		||||
* This file is part of Purple i2pd project and licensed under BSD3
 | 
			
		||||
*
 | 
			
		||||
| 
						 | 
				
			
			@ -116,7 +116,8 @@ namespace garlic
 | 
			
		|||
			virtual bool IsReadyToSend () const { return true; };
 | 
			
		||||
			virtual bool IsTerminated () const { return !GetOwner (); };
 | 
			
		||||
			virtual uint64_t GetLastActivityTimestamp () const { return 0; }; // non-zero for rathets only
 | 
			
		||||
 | 
			
		||||
			virtual void SetAckRequestInterval (int interval) {}; // in milliseconds, override in ECIESX25519AEADRatchetSession
 | 
			
		||||
			
 | 
			
		||||
			void SetLeaseSetUpdated ()
 | 
			
		||||
			{
 | 
			
		||||
				if (m_LeaseSetUpdateStatus != eLeaseSetDoNotSend) m_LeaseSetUpdateStatus = eLeaseSetUpdated;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue