From a042d0bbefba84b2f64b0bf3ec6687819e5f8c75 Mon Sep 17 00:00:00 2001 From: Tom Henderson Date: Mon, 12 May 2008 06:39:00 -0700 Subject: [PATCH] Move API for socket factory to a Socket::CreateSocket () factory method --- examples/tcp-large-transfer.cc | 5 ++--- examples/wifi-adhoc.cc | 7 +++---- examples/wifi-ap.cc | 2 +- samples/main-simple.cc | 6 ++---- src/applications/onoff/onoff-application.cc | 3 +-- src/applications/packet-sink/packet-sink.cc | 4 +--- src/applications/udp-echo/udp-echo-client.cc | 4 +--- src/applications/udp-echo/udp-echo-server.cc | 4 +--- src/node/socket.cc | 12 ++++++++++++ src/node/socket.h | 11 +++++++++++ src/routing/olsr/olsr-agent-impl.cc | 7 +++---- 11 files changed, 38 insertions(+), 27 deletions(-) diff --git a/examples/tcp-large-transfer.cc b/examples/tcp-large-transfer.cc index 641de0537..ee7d831b0 100644 --- a/examples/tcp-large-transfer.cc +++ b/examples/tcp-large-transfer.cc @@ -176,9 +176,8 @@ int main (int argc, char *argv[]) apps.Start (Seconds (0.0)); // and generate traffic to remote sink. - Ptr socketFactory = - c0.Get (0)->GetObject (); - Ptr localSocket = socketFactory->CreateSocket (); + //TypeId tid = TypeId::LookupByName ("ns3::Tcp"); + Ptr localSocket = Socket::CreateSocket (c0.Get (0), Tcp::GetTypeId ()); localSocket->Bind (); Simulator::ScheduleNow (&StartFlow, localSocket, nBytes, ipInterfs.GetAddress (1), servPort); diff --git a/examples/wifi-adhoc.cc b/examples/wifi-adhoc.cc index 3bc51ed50..1759f3643 100644 --- a/examples/wifi-adhoc.cc +++ b/examples/wifi-adhoc.cc @@ -102,9 +102,8 @@ Experiment::ReceivePacket (Ptr socket) Ptr Experiment::SetupPacketReceive (Ptr node) { - TypeId tid = TypeId::LookupByName ("ns3::PacketSocketFactory"); - Ptr socketFactory = node->GetObject (tid); - Ptr sink = socketFactory->CreateSocket (); + TypeId tid = TypeId::LookupByName ("ns3::PacketSocket"); + Ptr sink = Socket::CreateSocket (node, tid); sink->Bind (); sink->SetRecvCallback (MakeCallback (&Experiment::ReceivePacket, this)); return sink; @@ -137,7 +136,7 @@ Experiment::Run (const WifiHelper &wifi) socket.SetPhysicalAddress (devices.Get (1)->GetAddress ()); socket.SetProtocol (1); - OnOffHelper onoff ("ns3::PacketSocketFactory", Address (socket)); + OnOffHelper onoff ("ns3::PacketSocket", Address (socket)); onoff.SetAttribute ("OnTime", RandomVariableValue (ConstantVariable (250))); onoff.SetAttribute ("OffTime", RandomVariableValue (ConstantVariable (0))); onoff.SetAttribute ("DataRate", DataRateValue (DataRate (60000000))); diff --git a/examples/wifi-ap.cc b/examples/wifi-ap.cc index 7c2c266fa..ecc82eaca 100644 --- a/examples/wifi-ap.cc +++ b/examples/wifi-ap.cc @@ -162,7 +162,7 @@ int main (int argc, char *argv[]) socket.SetPhysicalAddress (staDevs.Get (1)->GetAddress ()); socket.SetProtocol (1); - OnOffHelper onoff ("ns3::PacketSocketFactory", Address (socket)); + OnOffHelper onoff ("ns3::PacketSocket", Address (socket)); onoff.SetAttribute ("OnTime", RandomVariableValue (ConstantVariable (42))); onoff.SetAttribute ("OffTime", RandomVariableValue (ConstantVariable (0))); diff --git a/samples/main-simple.cc b/samples/main-simple.cc index d8878be4b..719406f27 100644 --- a/samples/main-simple.cc +++ b/samples/main-simple.cc @@ -49,13 +49,11 @@ RunSimulation (void) TypeId tid = TypeId::LookupByName ("ns3::Udp"); - Ptr socketFactory = c.Get (0)->GetObject (tid); - - Ptr sink = socketFactory->CreateSocket (); + Ptr sink = Socket::CreateSocket (c.Get (0), tid); InetSocketAddress local = InetSocketAddress (Ipv4Address::GetAny (), 80); sink->Bind (local); - Ptr source = socketFactory->CreateSocket (); + Ptr source = Socket::CreateSocket (c.Get (0), tid); InetSocketAddress remote = InetSocketAddress (Ipv4Address::GetLoopback (), 80); source->Connect (remote); diff --git a/src/applications/onoff/onoff-application.cc b/src/applications/onoff/onoff-application.cc index 311c30519..271304715 100644 --- a/src/applications/onoff/onoff-application.cc +++ b/src/applications/onoff/onoff-application.cc @@ -130,8 +130,7 @@ void OnOffApplication::StartApplication() // Called at time specified by Start // Create the socket if not already if (!m_socket) { - Ptr socketFactory = GetNode ()->GetObject (m_tid); - m_socket = socketFactory->CreateSocket (); + m_socket = Socket::CreateSocket (GetNode(), m_tid); m_socket->Bind (); m_socket->Connect (m_peer); } diff --git a/src/applications/packet-sink/packet-sink.cc b/src/applications/packet-sink/packet-sink.cc index c35c8e4d7..d4478dc32 100644 --- a/src/applications/packet-sink/packet-sink.cc +++ b/src/applications/packet-sink/packet-sink.cc @@ -80,9 +80,7 @@ void PacketSink::StartApplication() // Called at time specified by Start // Create the socket if not already if (!m_socket) { - Ptr socketFactory = - GetNode ()->GetObject (m_tid); - m_socket = socketFactory->CreateSocket (); + m_socket = Socket::CreateSocket (GetNode(), m_tid); m_socket->Bind (m_local); m_socket->Listen (0); } diff --git a/src/applications/udp-echo/udp-echo-client.cc b/src/applications/udp-echo/udp-echo-client.cc index b452c3d86..3241b49c5 100644 --- a/src/applications/udp-echo/udp-echo-client.cc +++ b/src/applications/udp-echo/udp-echo-client.cc @@ -96,9 +96,7 @@ UdpEchoClient::StartApplication (void) if (!m_socket) { TypeId tid = TypeId::LookupByName ("ns3::Udp"); - Ptr socketFactory = - GetNode ()->GetObject (tid); - m_socket = socketFactory->CreateSocket (); + m_socket = Socket::CreateSocket (GetNode(), tid); m_socket->Bind (); m_socket->Connect (InetSocketAddress (m_peerAddress, m_peerPort)); } diff --git a/src/applications/udp-echo/udp-echo-server.cc b/src/applications/udp-echo/udp-echo-server.cc index bfbfde1b4..badd4ec92 100644 --- a/src/applications/udp-echo/udp-echo-server.cc +++ b/src/applications/udp-echo/udp-echo-server.cc @@ -72,9 +72,7 @@ UdpEchoServer::StartApplication (void) if (!m_socket) { TypeId tid = TypeId::LookupByName ("ns3::Udp"); - Ptr socketFactory = - GetNode ()->GetObject (tid); - m_socket = socketFactory->CreateSocket (); + m_socket = Socket::CreateSocket (GetNode(), tid); InetSocketAddress local = InetSocketAddress (Ipv4Address::GetAny (), m_port); m_socket->Bind (local); } diff --git a/src/node/socket.cc b/src/node/socket.cc index 039b635a2..07e44be6d 100644 --- a/src/node/socket.cc +++ b/src/node/socket.cc @@ -22,7 +22,9 @@ #include "ns3/log.h" #include "ns3/packet.h" +#include "node.h" #include "socket.h" +#include "socket-factory.h" NS_LOG_COMPONENT_DEFINE ("Socket"); @@ -83,6 +85,16 @@ Socket::~Socket () NS_LOG_FUNCTION_NOARGS (); } +Ptr +Socket::CreateSocket (Ptr node, TypeId tid) +{ + Ptr s; + Ptr socketFactory = node->GetObject (tid); + s = socketFactory->CreateSocket (); + NS_ASSERT (s != 0); + return s; +} + void Socket::SetCloseCallback (Callback > closeCompleted) { diff --git a/src/node/socket.h b/src/node/socket.h index cde3e3a1d..9f106dc75 100644 --- a/src/node/socket.h +++ b/src/node/socket.h @@ -98,6 +98,17 @@ public: SOCKET_ERRNO_LAST }; + /** + * This method wraps the creation of sockets that is performed + * by a socket factory on a given node based on a TypeId. + * + * \return A smart pointer to a newly created socket. + * + * \param node The node on which to create the socket + * \param tid The TypeId of the socket to create + */ + static Ptr CreateSocket (Ptr node, TypeId tid); + /** * \return the errno associated to the last call which failed in this * socket. Each socket's errno is initialized to zero diff --git a/src/routing/olsr/olsr-agent-impl.cc b/src/routing/olsr/olsr-agent-impl.cc index 3031982f5..19257306a 100644 --- a/src/routing/olsr/olsr-agent-impl.cc +++ b/src/routing/olsr/olsr-agent-impl.cc @@ -258,9 +258,7 @@ void AgentImpl::Start () // Add OLSR as routing protocol, with slightly higher priority than // static routing. m_ipv4->AddRoutingProtocol (m_routingTable, 10); - - Ptr socketFactory = GetObject (Udp::GetTypeId ()); - + Ipv4Address loopback ("127.0.0.1"); for (uint32_t i = 0; i < m_ipv4->GetNInterfaces (); i++) { @@ -281,7 +279,8 @@ void AgentImpl::Start () } // Create a socket to listen only on this interface - Ptr socket = socketFactory->CreateSocket (); + Ptr socket = Socket::CreateSocket (GetObject (), + Udp::GetTypeId()); socket->SetRecvCallback (MakeCallback (&AgentImpl::RecvOlsr, this)); if (socket->Bind (InetSocketAddress (addr, OLSR_PORT_NUMBER))) {