|
|
| 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); |