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
 | 
					* This file is part of Purple i2pd project and licensed under BSD3
 | 
				
			||||||
*
 | 
					*
 | 
				
			||||||
| 
						 | 
					@ -104,8 +104,7 @@ namespace datagram
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (verified)
 | 
							if (verified)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			auto h = identity.GetIdentHash();
 | 
								auto session = ObtainSession (identity.GetIdentHash());
 | 
				
			||||||
			auto session = ObtainSession(h);
 | 
					 | 
				
			||||||
			session->Ack();
 | 
								session->Ack();
 | 
				
			||||||
			auto r = FindReceiver(toPort);
 | 
								auto r = FindReceiver(toPort);
 | 
				
			||||||
			if(r)
 | 
								if(r)
 | 
				
			||||||
| 
						 | 
					@ -381,8 +380,12 @@ namespace datagram
 | 
				
			||||||
			if (!found)
 | 
								if (!found)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				m_RoutingSession = m_LocalDestination->GetRoutingSession(m_RemoteLeaseSet, true);
 | 
									m_RoutingSession = m_LocalDestination->GetRoutingSession(m_RemoteLeaseSet, true);
 | 
				
			||||||
				if (!m_RoutingSession->GetOwner () || !m_RoutingSession->IsReadyToSend ())
 | 
									if (m_RoutingSession)
 | 
				
			||||||
					m_PendingRoutingSessions.push_back (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
 | 
					* 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
 | 
						// max 64 messages buffered in send queue for each datagram session
 | 
				
			||||||
	const size_t DATAGRAM_SEND_QUEUE_MAX_SIZE = 64;
 | 
						const size_t DATAGRAM_SEND_QUEUE_MAX_SIZE = 64;
 | 
				
			||||||
	const uint64_t DATAGRAM_MAX_FLUSH_INTERVAL = 5; // in milliseconds
 | 
						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>
 | 
						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
 | 
					* This file is part of Purple i2pd project and licensed under BSD3
 | 
				
			||||||
*
 | 
					*
 | 
				
			||||||
| 
						 | 
					@ -913,7 +913,7 @@ namespace garlic
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if (!sendAckRequest && !first &&
 | 
							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
 | 
							     (m_AckRequestMsgID && ts > m_LastAckRequestSendTime + LEASESET_CONFIRMATION_TIMEOUT))) // previous request failed. try again
 | 
				
			||||||
		{	
 | 
							{	
 | 
				
			||||||
			// not LeaseSet
 | 
								// 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
 | 
					* 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_CREATE_TIMEOUT = 3; // in seconds, NSR must be send after NS received
 | 
				
			||||||
	const int ECIESX25519_SESSION_ESTABLISH_TIMEOUT = 15; // in seconds 
 | 
						const int ECIESX25519_SESSION_ESTABLISH_TIMEOUT = 15; // in seconds 
 | 
				
			||||||
	const int ECIESX25519_PREVIOUS_TAGSET_EXPIRATION_TIMEOUT = 180; // 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_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_TAGSET_MAX_NUM_TAGS = 8192; // number of tags we request new tagset after
 | 
				
			||||||
	const int ECIESX25519_MIN_NUM_GENERATED_TAGS = 24;
 | 
						const int ECIESX25519_MIN_NUM_GENERATED_TAGS = 24;
 | 
				
			||||||
| 
						 | 
					@ -164,7 +164,7 @@ namespace garlic
 | 
				
			||||||
			~ECIESX25519AEADRatchetSession ();
 | 
								~ECIESX25519AEADRatchetSession ();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			bool HandleNextMessage (uint8_t * buf, size_t len, std::shared_ptr<ReceiveRatchetTagSet> receiveTagset, int index = 0);
 | 
								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);
 | 
								std::shared_ptr<I2NPMessage> WrapOneTimeMessage (std::shared_ptr<const I2NPMessage> msg);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			const uint8_t * GetRemoteStaticKey () const { return m_RemoteStaticKey; }
 | 
								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 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 IsInactive (uint64_t ts) const { return ts > m_LastActivityTimestamp + ECIESX25519_INACTIVITY_TIMEOUT && CanBeRestarted (ts); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			bool IsRatchets () const { return true; };
 | 
								bool IsRatchets () const override { return true; };
 | 
				
			||||||
			bool IsReadyToSend () const { return m_State != eSessionStateNewSessionSent; };
 | 
								bool IsReadyToSend () const override { return m_State != eSessionStateNewSessionSent; };
 | 
				
			||||||
			bool IsTerminated () const { return m_IsTerminated; }
 | 
								bool IsTerminated () const override { return m_IsTerminated; }
 | 
				
			||||||
			uint64_t GetLastActivityTimestamp () const { return m_LastActivityTimestamp; };
 | 
								uint64_t GetLastActivityTimestamp () const override { return m_LastActivityTimestamp; };
 | 
				
			||||||
			bool CleanupUnconfirmedTags (); // return true if unaswered Ack requests, called from I2CP
 | 
								void SetAckRequestInterval (int interval) override { m_AckRequestInterval = interval; };
 | 
				
			||||||
 | 
								bool CleanupUnconfirmedTags () override; // return true if unaswered Ack requests, called from I2CP
 | 
				
			||||||
			
 | 
								
 | 
				
			||||||
		protected:
 | 
							protected:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -235,6 +236,7 @@ namespace garlic
 | 
				
			||||||
			uint64_t m_LastAckRequestSendTime = 0; // milliseconds
 | 
								uint64_t m_LastAckRequestSendTime = 0; // milliseconds
 | 
				
			||||||
			uint32_t m_AckRequestMsgID = 0; 
 | 
								uint32_t m_AckRequestMsgID = 0; 
 | 
				
			||||||
			int m_AckRequestNumAttempts = 0;
 | 
								int m_AckRequestNumAttempts = 0;
 | 
				
			||||||
 | 
								int m_AckRequestInterval = ECIESX25519_DEFAULT_ACK_REQUEST_INTERVAL; // milliseconds
 | 
				
			||||||
			
 | 
								
 | 
				
			||||||
		public:
 | 
							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
 | 
					* This file is part of Purple i2pd project and licensed under BSD3
 | 
				
			||||||
*
 | 
					*
 | 
				
			||||||
| 
						 | 
					@ -116,6 +116,7 @@ namespace garlic
 | 
				
			||||||
			virtual bool IsReadyToSend () const { return true; };
 | 
								virtual bool IsReadyToSend () const { return true; };
 | 
				
			||||||
			virtual bool IsTerminated () const { return !GetOwner (); };
 | 
								virtual bool IsTerminated () const { return !GetOwner (); };
 | 
				
			||||||
			virtual uint64_t GetLastActivityTimestamp () const { return 0; }; // non-zero for rathets only
 | 
								virtual uint64_t GetLastActivityTimestamp () const { return 0; }; // non-zero for rathets only
 | 
				
			||||||
 | 
								virtual void SetAckRequestInterval (int interval) {}; // in milliseconds, override in ECIESX25519AEADRatchetSession
 | 
				
			||||||
			
 | 
								
 | 
				
			||||||
			void SetLeaseSetUpdated ()
 | 
								void SetLeaseSetUpdated ()
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue