|
1501 |
} |
1501 |
} |
1502 |
// See if all pending ack'ed; if so we can delete the data |
1502 |
// See if all pending ack'ed; if so we can delete the data |
1503 |
if (m_pendingData) |
1503 |
if (m_pendingData) |
1504 |
{ // Data exists, see if can be deleted |
1504 |
{ // Data exists, see if can be entirely deleted |
1505 |
if (m_pendingData->SizeFromSeq (m_firstPendingSequence, m_highestRxAck) == 0) |
1505 |
if (m_pendingData->SizeFromSeq (m_firstPendingSequence, m_highestRxAck) == 0) |
1506 |
{ // All pending acked, can be deleted |
1506 |
{ // All pending acked, can be deleted |
1507 |
m_pendingData->Clear (); |
1507 |
m_pendingData->Clear (); |
|
1513 |
Simulator::GetDelayLeft (m_retxEvent)).GetSeconds()); |
1513 |
Simulator::GetDelayLeft (m_retxEvent)).GetSeconds()); |
1514 |
m_retxEvent.Cancel (); |
1514 |
m_retxEvent.Cancel (); |
1515 |
} |
1515 |
} |
|
|
1516 |
else // else delete just a portion |
1517 |
{ |
1518 |
while (m_pendingData->data.begin () != m_pendingData->data.end ()) |
1519 |
{ |
1520 |
std::vector< Ptr<Packet> >::iterator dataI = m_pendingData->data.begin (); |
1521 |
Ptr<Packet> data = *dataI; |
1522 |
if (m_firstPendingSequence + SequenceNumber (data->GetSize ()) <= m_highestRxAck) |
1523 |
{ |
1524 |
m_pendingData->data.erase (dataI); |
1525 |
m_pendingData->size -= data->GetSize (); |
1526 |
m_firstPendingSequence += data->GetSize (); |
1527 |
} |
1528 |
else |
1529 |
{ |
1530 |
break; |
1531 |
} |
1532 |
} |
1533 |
} |
1516 |
} |
1534 |
} |
1517 |
// Try to send more data |
1535 |
// Try to send more data |
1518 |
SendPendingData (m_connected); |
1536 |
SendPendingData (m_connected); |