mirror of
https://github.com/PurpleI2P/i2pd
synced 2024-11-10 00:00:29 +03:00
handle immediate ack request
This commit is contained in:
parent
0046a8b3ec
commit
ae65af07c2
@ -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);
|
||||||
|
if (!delayRequested) // 0 requests an immediate ack
|
||||||
|
immediateAckRequested = true;
|
||||||
|
else if (!m_IsAckSendScheduled)
|
||||||
{
|
{
|
||||||
uint16_t delayRequested = bufbe16toh (optionData);
|
if (delayRequested < m_RTT)
|
||||||
if (delayRequested > 0 && 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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…
Reference in New Issue
Block a user