MCPcopy Create free account
hub / github.com/PurpleI2P/i2pd / SendQuickAck

Method SendQuickAck

libi2pd/Streaming.cpp:1134–1287  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1132 }
1133
1134 void Stream::SendQuickAck ()
1135 {
1136 int32_t lastReceivedSeqn = m_LastReceivedSequenceNumber;
1137 // for limit inbound speed
1138 auto ts = i2p::util::GetMillisecondsSinceEpoch ();
1139 int numPackets = 0;
1140 bool lostPackets = false;
1141 int64_t passedTime = m_PacketACKInterval * INITIAL_WINDOW_SIZE; // in microseconds // while m_LastACKSendTime == 0
1142 if (m_LastACKSendTime)
1143 passedTime = (ts - m_LastACKSendTime)*1000; // in microseconds
1144 numPackets = (passedTime + m_PacketACKIntervalRem) / m_PacketACKInterval;
1145 m_PacketACKIntervalRem = (passedTime + m_PacketACKIntervalRem) - (numPackets * m_PacketACKInterval);
1146 if (m_LastConfirmedReceivedSequenceNumber + numPackets < m_LastReceivedSequenceNumber)
1147 {
1148 lastReceivedSeqn = m_LastConfirmedReceivedSequenceNumber + numPackets;
1149 if (!m_IsAckSendScheduled)
1150 {
1151 auto ackTimeout = m_RTT/10;
1152 if (ackTimeout > m_AckDelay) ackTimeout = m_AckDelay;
1153 ScheduleAck (ackTimeout);
1154 }
1155 }
1156 if (numPackets == 0) return;
1157 // for limit inbound speed
1158 if (!m_SavedPackets.empty ())
1159 {
1160 for (auto it: m_SavedPackets)
1161 {
1162 auto seqn = it->GetSeqn ();
1163 // for limit inbound speed
1164 if (m_LastConfirmedReceivedSequenceNumber + numPackets < int(seqn))
1165 {
1166 if (!m_IsAckSendScheduled)
1167 {
1168 auto ackTimeout = m_RTT/10;
1169 if (ackTimeout > m_AckDelay) ackTimeout = m_AckDelay;
1170 ScheduleAck (ackTimeout);
1171 }
1172 if (lostPackets)
1173 break;
1174 else
1175 return;
1176 }
1177 // for limit inbound speed
1178 if ((int)seqn > lastReceivedSeqn)
1179 {
1180 lastReceivedSeqn = seqn;
1181 lostPackets = true; // for limit inbound speed
1182 }
1183 }
1184 }
1185 if (lastReceivedSeqn < 0)
1186 {
1187 LogPrint (eLogError, "Streaming: No packets have been received yet");
1188 if (m_SequenceNumber == 0)
1189 {
1190 if (m_NumResendAttempts > 1)
1191 {

Callers

nothing calls this directly

Calls 9

LogPrintFunction · 0.85
htobe32bufFunction · 0.85
htobuf32Function · 0.85
htobe16bufFunction · 0.85
htobuf16Function · 0.85
GetSeqnMethod · 0.80
GetRandomMethod · 0.80
GetBufferMethod · 0.45

Tested by

no test coverage detected