Browse Source

handle immediate ack request

pull/2101/head
orignal 3 months ago
parent
commit
ae65af07c2
  1. 12
      libi2pd/Streaming.cpp
  2. 2
      libi2pd/Streaming.h

12
libi2pd/Streaming.cpp

@ -326,12 +326,16 @@ namespace stream
LogPrint (eLogInfo, "Streaming: Invalid option size ", optionSize, " Discarded"); LogPrint (eLogInfo, "Streaming: Invalid option size ", optionSize, " Discarded");
return false; return false;
} }
if (!flags) return true;
bool immediateAckRequested = false;
if (flags & PACKET_FLAG_DELAY_REQUESTED) if (flags & PACKET_FLAG_DELAY_REQUESTED)
{
if (!m_IsAckSendScheduled)
{ {
uint16_t delayRequested = bufbe16toh (optionData); uint16_t delayRequested = bufbe16toh (optionData);
if (delayRequested > 0 && delayRequested < m_RTT) if (!delayRequested) // 0 requests an immediate ack
immediateAckRequested = true;
else if (!m_IsAckSendScheduled)
{
if (delayRequested < m_RTT)
{ {
m_IsAckSendScheduled = true; m_IsAckSendScheduled = true;
m_AckSendTimer.expires_from_now (boost::posix_time::milliseconds(delayRequested)); m_AckSendTimer.expires_from_now (boost::posix_time::milliseconds(delayRequested));
@ -432,6 +436,8 @@ namespace stream
return false; return false;
} }
} }
if (immediateAckRequested)
SendQuickAck ();
return true; return true;
} }

2
libi2pd/Streaming.h

@ -283,7 +283,7 @@ namespace stream
float m_WindowSize, m_LastWindowDropSize, m_WindowDropTargetSize; float m_WindowSize, m_LastWindowDropSize, m_WindowDropTargetSize;
int m_WindowIncCounter, m_RTO, m_AckDelay, m_PrevRTTSample; int m_WindowIncCounter, m_RTO, m_AckDelay, m_PrevRTTSample;
double m_Jitter; double m_Jitter;
uint64_t m_MinPacingTime, m_PacingTime, m_PacingTimeRem, m_DropWindowDelayTime, m_LastSendTime; // microseconds uint64_t m_MinPacingTime, m_PacingTime, m_PacingTimeRem, m_LastSendTime; // microseconds
uint64_t m_LastACKSendTime, m_PacketACKInterval, m_PacketACKIntervalRem; // for limit inbound speed uint64_t m_LastACKSendTime, m_PacketACKInterval, m_PacketACKIntervalRem; // for limit inbound speed
int m_NumResendAttempts, m_NumPacketsToSend; int m_NumResendAttempts, m_NumPacketsToSend;
size_t m_MTU; size_t m_MTU;

Loading…
Cancel
Save