src/mesh/test/flame/flame-regression.cc
changeset 11485 df37afec1b0f
parent 11015 a72b38546141
--- a/src/mesh/test/flame/flame-regression.cc	Fri Jul 03 18:12:25 2015 +0200
+++ b/src/mesh/test/flame/flame-regression.cc	Thu Jul 09 23:52:12 2015 +0200
@@ -30,7 +30,6 @@
 #include "ns3/ipv4-address-helper.h"
 #include "ns3/abort.h"
 #include "ns3/pcap-test.h"
-#include "ns3/udp-echo-helper.h"
 #include "ns3/mobility-model.h"
 #include <sstream>
 
@@ -44,7 +43,8 @@
 
 FlameRegressionTest::FlameRegressionTest () : TestCase ("FLAME regression test"),
                                               m_nodes (0),
-                                              m_time (Seconds (10))
+                                              m_time (Seconds (10)),
+                                              m_sentPktsCounter (0)
 {
 }
 
@@ -125,17 +125,18 @@
 void
 FlameRegressionTest::InstallApplications ()
 {
-  UdpEchoServerHelper echoServer (9);
-  ApplicationContainer serverApps = echoServer.Install (m_nodes->Get (0));
-  serverApps.Start (Seconds (0.0));
-  serverApps.Stop (m_time);
-  UdpEchoClientHelper echoClient (m_interfaces.GetAddress (0), 9);
-  echoClient.SetAttribute ("MaxPackets", UintegerValue (300));
-  echoClient.SetAttribute ("Interval", TimeValue (Seconds (1.1)));
-  echoClient.SetAttribute ("PacketSize", UintegerValue (20));
-  ApplicationContainer clientApps = echoClient.Install (m_nodes->Get (2));
-  clientApps.Start (Seconds (1.0));
-  clientApps.Stop (m_time);
+  // client socket
+  m_clientSocket = Socket::CreateSocket (m_nodes->Get (2), TypeId::LookupByName ("ns3::UdpSocketFactory"));
+  m_clientSocket->Bind ();
+  m_clientSocket->Connect (InetSocketAddress (m_interfaces.GetAddress (0), 9));
+  m_clientSocket->SetRecvCallback (MakeCallback (&FlameRegressionTest::HandleReadClient, this));
+  Simulator::ScheduleWithContext (m_clientSocket->GetNode ()->GetId (), Seconds (1.0),
+                                  &FlameRegressionTest::SendData, this, m_clientSocket);
+
+  // server socket
+  m_serverSocket = Socket::CreateSocket (m_nodes->Get (0), TypeId::LookupByName ("ns3::UdpSocketFactory"));
+  m_serverSocket->Bind (InetSocketAddress (Ipv4Address::GetAny (), 9));
+  m_serverSocket->SetRecvCallback (MakeCallback (&FlameRegressionTest::HandleReadServer, this));
 }
 
 void
@@ -147,3 +148,38 @@
     }
 }
 
+void
+FlameRegressionTest::SendData (Ptr<Socket> socket)
+{
+  if ((Simulator::Now () < m_time) && (m_sentPktsCounter < 300))
+    {
+      socket->Send (Create<Packet> (20));
+      m_sentPktsCounter ++;
+      Simulator::ScheduleWithContext (socket->GetNode ()->GetId (), Seconds (1.1),
+                                      &FlameRegressionTest::SendData, this, socket);
+    }
+}
+
+void
+FlameRegressionTest::HandleReadServer (Ptr<Socket> socket)
+{
+  Ptr<Packet> packet;
+  Address from;
+  while ((packet = socket->RecvFrom (from)))
+    {
+      packet->RemoveAllPacketTags ();
+      packet->RemoveAllByteTags ();
+
+      socket->SendTo (packet, 0, from);
+    }
+}
+
+void
+FlameRegressionTest::HandleReadClient (Ptr<Socket> socket)
+{
+  Ptr<Packet> packet;
+  Address from;
+  while ((packet = socket->RecvFrom (from)))
+    {
+    }
+}