|
|
| 759 |
break; |
759 |
break; |
| 760 |
case TX_DATA: |
760 |
case TX_DATA: |
| 761 |
NS_LOG_LOGIC ("TcpSocketImpl " << this <<" Action TX_DATA"); |
761 |
NS_LOG_LOGIC ("TcpSocketImpl " << this <<" Action TX_DATA"); |
| 762 |
SendPendingData (); |
762 |
SendPendingData (m_connected); |
| 763 |
break; |
763 |
break; |
| 764 |
case PEER_CLOSE: |
764 |
case PEER_CLOSE: |
| 765 |
NS_ASSERT (false); // This should be processed in ProcessPacketAction |
765 |
NS_ASSERT (false); // This should be processed in ProcessPacketAction |
|
|
| 855 |
NotifySend (GetTxAvailable ()); |
855 |
NotifySend (GetTxAvailable ()); |
| 856 |
} |
856 |
} |
| 857 |
} |
857 |
} |
| 858 |
SendPendingData (); |
858 |
SendPendingData (m_connected); //send acks if we are connected |
| 859 |
break; |
859 |
break; |
| 860 |
case NEW_ACK: |
860 |
case NEW_ACK: |
| 861 |
NS_LOG_LOGIC ("TcpSocketImpl " << this <<" Action NEW_ACK_TX"); |
861 |
NS_LOG_LOGIC ("TcpSocketImpl " << this <<" Action NEW_ACK_TX"); |
|
|
862 |
//check to see of the ACK had data with it; if so, pass it along |
| 863 |
//to NEW_SEQ_RX |
| 864 |
if(p->GetSize () > 0) |
| 865 |
{ |
| 866 |
Simulator::ScheduleNow(&TcpSocketImpl::ProcessPacketAction, |
| 867 |
this, |
| 868 |
NEW_SEQ_RX, |
| 869 |
p, |
| 870 |
tcpHeader, |
| 871 |
fromAddress); |
| 872 |
} |
| 862 |
if (tcpHeader.GetAckNumber () < m_highestRxAck) //old ack, do nothing |
873 |
if (tcpHeader.GetAckNumber () < m_highestRxAck) //old ack, do nothing |
| 863 |
{ |
874 |
{ |
| 864 |
break; |
875 |
break; |
|
|
| 1001 |
<< " s " << s |
1012 |
<< " s " << s |
| 1002 |
<< " datasize " << p->GetSize() ); |
1013 |
<< " datasize " << p->GetSize() ); |
| 1003 |
uint8_t flags = 0; |
1014 |
uint8_t flags = 0; |
| 1004 |
if (withAck) |
|
|
| 1005 |
{ |
| 1006 |
flags |= TcpHeader::ACK; |
| 1007 |
} |
| 1008 |
uint32_t sz = p->GetSize (); // Size of packet |
1015 |
uint32_t sz = p->GetSize (); // Size of packet |
| 1009 |
uint32_t remainingData = m_pendingData->SizeFromSeq( |
1016 |
uint32_t remainingData = m_pendingData->SizeFromSeq( |
| 1010 |
m_firstPendingSequence, |
1017 |
m_firstPendingSequence, |
|
|
| 1014 |
flags = TcpHeader::FIN; |
1021 |
flags = TcpHeader::FIN; |
| 1015 |
m_state = FIN_WAIT_1; |
1022 |
m_state = FIN_WAIT_1; |
| 1016 |
} |
1023 |
} |
| 1017 |
|
1024 |
if (withAck) |
|
|
1025 |
{ |
| 1026 |
flags |= TcpHeader::ACK; |
| 1027 |
} |
| 1018 |
TcpHeader header; |
1028 |
TcpHeader header; |
| 1019 |
header.SetFlags (flags); |
1029 |
header.SetFlags (flags); |
| 1020 |
header.SetSequenceNumber (m_nextTxSequence); |
1030 |
header.SetSequenceNumber (m_nextTxSequence); |
|
|
| 1386 |
} |
1396 |
} |
| 1387 |
} |
1397 |
} |
| 1388 |
// Try to send more data |
1398 |
// Try to send more data |
| 1389 |
SendPendingData(); |
1399 |
SendPendingData (m_connected); |
| 1390 |
} |
1400 |
} |
| 1391 |
|
1401 |
|
| 1392 |
Ptr<TcpSocketImpl> TcpSocketImpl::Copy () |
1402 |
Ptr<TcpSocketImpl> TcpSocketImpl::Copy () |
|
|
| 1440 |
m_cWnd = m_segmentSize; // Collapse cwnd (re-enter slowstart) |
1450 |
m_cWnd = m_segmentSize; // Collapse cwnd (re-enter slowstart) |
| 1441 |
// For Tahoe, we also reset nextTxSeq |
1451 |
// For Tahoe, we also reset nextTxSeq |
| 1442 |
m_nextTxSequence = m_highestRxAck; |
1452 |
m_nextTxSequence = m_highestRxAck; |
| 1443 |
SendPendingData (); |
1453 |
SendPendingData (m_connected); |
| 1444 |
} |
1454 |
} |
| 1445 |
} |
1455 |
} |
| 1446 |
|
1456 |
|