Slight refactor of TCP code so two way connections don't bug out
authorRaj Bhattacharjea <raj.b@gatech.edu>
Tue Feb 05 15:29:17 2008 -0500 (2008-02-05)
changeset 231608b68583df24
parent 2294 aa08830477cb
child 2317 e4fc78d60b6b
Slight refactor of TCP code so two way connections don't bug out
src/internet-node/tcp-socket.cc
src/internet-node/tcp-socket.h
     1.1 --- a/src/internet-node/tcp-socket.cc	Fri Feb 01 15:16:44 2008 +0000
     1.2 +++ b/src/internet-node/tcp-socket.cc	Tue Feb 05 15:29:17 2008 -0500
     1.3 @@ -495,7 +495,9 @@
     1.4      case SYN_TX:
     1.5        NS_LOG_LOGIC ("TcpSocket " << this <<" Action SYN_TX");
     1.6        // TCP SYN Flag consumes one byte
     1.7 -      m_nextTxSequence+= 1;
     1.8 +      // is the above correct? we're SENDING a syn, not acking back -- Raj
     1.9 +      // commented out for now
    1.10 +      // m_nextTxSequence+= 1;
    1.11        SendEmptyPacket (TcpHeader::SYN);
    1.12        break;
    1.13      case SYN_ACK_TX:
    1.14 @@ -537,11 +539,7 @@
    1.15        NS_LOG_LOGIC ("TcpSocket " << this <<" Action APP_NOTIFY");
    1.16        break;
    1.17      case SERV_NOTIFY:
    1.18 -      NS_LOG_LOGIC ("TcpSocket " << this <<" Action SERV_NOTIFY");
    1.19 -      NS_LOG_LOGIC ("TcpSocket " << this << " Connected!");
    1.20 -      NotifyConnectionSucceeded ();
    1.21 -      m_connected = true; // ! This is bogus; fix when we clone the tcp
    1.22 -      m_endPoint->SetPeer (m_defaultAddress, m_defaultPort);
    1.23 +      NS_ASSERT (false); // This should be processed in ProcessPacketAction
    1.24        break;
    1.25      case LAST_ACTION:
    1.26        NS_LOG_LOGIC ("TcpSocket " << this <<" Action LAST_ACTION");
    1.27 @@ -571,15 +569,16 @@
    1.28            m_endPoint->SetLocalAddress (ipv4->GetAddress (localIfIndex));
    1.29          }
    1.30        // TCP SYN consumes one byte
    1.31 -      m_nextRxSequence++;
    1.32 +      m_nextRxSequence = tcpHeader.GetSequenceNumber() + SequenceNumber(1);
    1.33        SendEmptyPacket (TcpHeader::SYN | TcpHeader::ACK);
    1.34        break;
    1.35      case ACK_TX_1:
    1.36        NS_LOG_LOGIC ("TcpSocket " << this <<" Action ACK_TX_1");
    1.37        // TCP SYN consumes one byte
    1.38 -      m_nextRxSequence++;
    1.39 +      m_nextRxSequence = tcpHeader.GetSequenceNumber() + SequenceNumber(1);
    1.40        SendEmptyPacket (TcpHeader::ACK);
    1.41        m_rxWindowSize = tcpHeader.GetWindowSize ();
    1.42 +      m_nextTxSequence = tcpHeader.GetAckNumber ();
    1.43        if (tcpHeader.GetAckNumber () > m_highestRxAck)
    1.44        {
    1.45          m_highestRxAck = tcpHeader.GetAckNumber ();
    1.46 @@ -653,6 +652,15 @@
    1.47          }
    1.48        break;
    1.49      }
    1.50 +    case SERV_NOTIFY:
    1.51 +      NS_LOG_LOGIC ("TcpSocket " << this <<" Action SERV_NOTIFY");
    1.52 +      NS_LOG_LOGIC ("TcpSocket " << this << " Connected!");
    1.53 +      NotifyConnectionSucceeded ();
    1.54 +      m_connected = true; // ! This is bogus; fix when we clone the tcp
    1.55 +      m_endPoint->SetPeer (m_defaultAddress, m_defaultPort);
    1.56 +      //treat the connection orientation final ack as a newack
    1.57 +      CommonNewAck (tcpHeader.GetAckNumber (), true);
    1.58 +      break;
    1.59      default:
    1.60        break;
    1.61    }
     2.1 --- a/src/internet-node/tcp-socket.h	Fri Feb 01 15:16:44 2008 +0000
     2.2 +++ b/src/internet-node/tcp-socket.h	Tue Feb 05 15:29:17 2008 -0500
     2.3 @@ -131,7 +131,6 @@
     2.4    
     2.5    //sequence info, reciever side
     2.6    SequenceNumber m_nextRxSequence;
     2.7 -  SequenceNumber m_nextAckSequence;
     2.8  
     2.9    //history data
    2.10    UnAckData_t m_bufferedData;