1.1 --- a/src/internet-stack/tcp-socket-impl.cc Thu Aug 14 17:39:43 2008 -0400
1.2 +++ b/src/internet-stack/tcp-socket-impl.cc Thu Aug 14 18:25:33 2008 -0400
1.3 @@ -1569,12 +1569,17 @@
1.4 virtual bool RunTests (void);
1.5 private:
1.6 void Test1 (void); //send string "Hello world" server->client
1.7 + void Test2 (uint32_t payloadSize);
1.8 Ptr<Node> CreateInternetNode ();
1.9 Ptr<SimpleNetDevice> AddSimpleNetDevice (Ptr<Node>,const char*,const char*);
1.10
1.11 - void HandleConnectionCreated (Ptr<Socket>, const Address &);
1.12 - void HandleRecv (Ptr<Socket> sock);
1.13 -
1.14 + void Test1_HandleConnectionCreated (Ptr<Socket>, const Address &);
1.15 + void Test1_HandleRecv (Ptr<Socket> sock);
1.16 +
1.17 + void Test2_HandleConnectionCreated (Ptr<Socket>, const Address &);
1.18 + void Test2_HandleRecv (Ptr<Socket> sock);
1.19 + uint32_t test2_payloadSize;
1.20 +
1.21 void Reset ();
1.22
1.23 Ptr<Node> node0;
1.24 @@ -1606,6 +1611,7 @@
1.25 TcpSocketImplTest::RunTests (void)
1.26 {
1.27 Test1();
1.28 + Test2(600);
1.29 return result;
1.30 }
1.31
1.32 @@ -1638,10 +1644,10 @@
1.33 listeningSock->Listen (0);
1.34 listeningSock->SetAcceptCallback
1.35 (MakeNullCallback<bool, Ptr< Socket >, const Address &> (),
1.36 - MakeCallback(&TcpSocketImplTest::HandleConnectionCreated,this));
1.37 + MakeCallback(&TcpSocketImplTest::Test1_HandleConnectionCreated,this));
1.38
1.39 sock1->Connect(serverremoteaddr);
1.40 - sock1->SetRecvCallback (MakeCallback(&TcpSocketImplTest::HandleRecv, this));
1.41 + sock1->SetRecvCallback (MakeCallback(&TcpSocketImplTest::Test1_HandleRecv, this));
1.42
1.43 Simulator::Run ();
1.44 Simulator::Destroy ();
1.45 @@ -1652,6 +1658,49 @@
1.46 Reset ();
1.47 }
1.48
1.49 +void
1.50 +TcpSocketImplTest::Test2 (uint32_t payloadSize)
1.51 +{
1.52 + test2_payloadSize = payloadSize;
1.53 + const char* netmask = "255.255.255.0";
1.54 + const char* ipaddr0 = "192.168.1.1";
1.55 + const char* ipaddr1 = "192.168.1.2";
1.56 + node0 = CreateInternetNode ();
1.57 + node1 = CreateInternetNode ();
1.58 + dev0 = AddSimpleNetDevice (node0, ipaddr0, netmask);
1.59 + dev1 = AddSimpleNetDevice (node1, ipaddr1, netmask);
1.60 +
1.61 + channel = CreateObject<SimpleChannel> ();
1.62 + dev0->SetChannel (channel);
1.63 + dev1->SetChannel (channel);
1.64 +
1.65 + Ptr<SocketFactory> sockFactory0 = node0->GetObject<TcpSocketFactory> ();
1.66 + Ptr<SocketFactory> sockFactory1 = node1->GetObject<TcpSocketFactory> ();
1.67 +
1.68 + listeningSock = sockFactory0->CreateSocket();
1.69 + sock1 = sockFactory1->CreateSocket();
1.70 +
1.71 + uint16_t port = 50000;
1.72 + InetSocketAddress serverlocaladdr (Ipv4Address::GetAny(), port);
1.73 + InetSocketAddress serverremoteaddr (Ipv4Address(ipaddr0), port);
1.74 +
1.75 + listeningSock->Bind(serverlocaladdr);
1.76 + listeningSock->Listen (0);
1.77 + listeningSock->SetAcceptCallback
1.78 + (MakeNullCallback<bool, Ptr< Socket >, const Address &> (),
1.79 + MakeCallback(&TcpSocketImplTest::Test2_HandleConnectionCreated,this));
1.80 +
1.81 + sock1->Connect(serverremoteaddr);
1.82 + sock1->SetRecvCallback (MakeCallback(&TcpSocketImplTest::Test2_HandleRecv, this));
1.83 +
1.84 + Simulator::Run ();
1.85 + Simulator::Destroy ();
1.86 +
1.87 + result = result && (rxBytes1 == test2_payloadSize);
1.88 +
1.89 + Reset ();
1.90 +}
1.91 +
1.92 Ptr<Node>
1.93 TcpSocketImplTest::CreateInternetNode ()
1.94 {
1.95 @@ -1675,7 +1724,7 @@
1.96 }
1.97
1.98 void
1.99 -TcpSocketImplTest::HandleConnectionCreated (Ptr<Socket> s, const Address & addr)
1.100 +TcpSocketImplTest::Test1_HandleConnectionCreated (Ptr<Socket> s, const Address & addr)
1.101 {
1.102 NS_ASSERT(s != listeningSock);
1.103 NS_ASSERT(sock0 == 0);
1.104 @@ -1684,20 +1733,16 @@
1.105 Ptr<Packet> p = Create<Packet> (hello, 13);
1.106 sock0->Send(p);
1.107
1.108 - sock0->SetRecvCallback (MakeCallback(&TcpSocketImplTest::HandleRecv, this));
1.109 + sock0->SetRecvCallback (MakeCallback(&TcpSocketImplTest::Test1_HandleRecv, this));
1.110 }
1.111
1.112 void
1.113 -TcpSocketImplTest::HandleRecv (Ptr<Socket> sock)
1.114 +TcpSocketImplTest::Test1_HandleRecv (Ptr<Socket> sock)
1.115 {
1.116 NS_ASSERT (sock == sock0 | sock == sock1);
1.117 Ptr<Packet> p = sock->Recv();
1.118 uint32_t sz = p->GetSize();
1.119 - if (sock == sock0)
1.120 - {
1.121 - rxBytes0 += sz;
1.122 - }
1.123 - else if (sock == sock1)
1.124 + if (sock == sock1)
1.125 {
1.126 rxBytes1 += sz;
1.127 rxPayload = new uint8_t[sz];
1.128 @@ -1710,6 +1755,34 @@
1.129 }
1.130
1.131 void
1.132 +TcpSocketImplTest::Test2_HandleConnectionCreated (Ptr<Socket> s, const Address & addr)
1.133 +{
1.134 + NS_ASSERT(s != listeningSock);
1.135 + NS_ASSERT(sock0 == 0);
1.136 + sock0 = s;
1.137 + Ptr<Packet> p = Create<Packet> (test2_payloadSize);
1.138 + sock0->Send(p);
1.139 +
1.140 + sock0->SetRecvCallback (MakeCallback(&TcpSocketImplTest::Test2_HandleRecv, this));
1.141 +}
1.142 +
1.143 +void
1.144 +TcpSocketImplTest::Test2_HandleRecv (Ptr<Socket> sock)
1.145 +{
1.146 + NS_ASSERT (sock == sock0 | sock == sock1);
1.147 + Ptr<Packet> p = sock->Recv();
1.148 + uint32_t sz = p->GetSize();
1.149 + if (sock == sock1)
1.150 + {
1.151 + rxBytes1 += sz;
1.152 + }
1.153 + else
1.154 + {
1.155 + NS_FATAL_ERROR ("Recv from unknown socket "<<sock);
1.156 + }
1.157 +}
1.158 +
1.159 +void
1.160 TcpSocketImplTest::Reset ()
1.161 {
1.162 node0 = 0;