plugins/ip-faces: Updating TcpFace implementation
In addition to changes to follow latest API changes in ndnSIM, the
helper ndn::IpFacesHelper allows scheduling TcpFace creation at specific
point of simulation.
Refs #1006 (http://redmine.named-data.net/)
diff --git a/plugins/ip-faces/ndn-tcp-face.cc b/plugins/ip-faces/ndn-tcp-face.cc
index 4ef8908..68a7d08 100644
--- a/plugins/ip-faces/ndn-tcp-face.cc
+++ b/plugins/ip-faces/ndn-tcp-face.cc
@@ -110,6 +110,8 @@
NS_OBJECT_ENSURE_REGISTERED (TcpFace);
+const Callback< void, Ptr<Face> > TcpFace::NULL_CREATE_CALLBACK = MakeNullCallback< void, Ptr<Face> > ();
+
TypeId
TcpFace::GetTypeId ()
{
@@ -144,19 +146,31 @@
}
void
-TcpFace::RegisterProtocolHandler (ProtocolHandler handler)
+TcpFace::RegisterProtocolHandlers (const InterestHandler &interestHandler, const DataHandler &dataHandler)
{
NS_LOG_FUNCTION (this);
- Face::RegisterProtocolHandler (handler);
-
+ Face::RegisterProtocolHandlers (interestHandler, dataHandler);
m_socket->SetRecvCallback (MakeCallback (&TcpFace::ReceiveFromTcp, this));
}
-bool
-TcpFace::SendImpl (Ptr<Packet> packet)
+void
+TcpFace:: UnRegisterProtocolHandlers ()
{
+ m_socket->SetRecvCallback (MakeNullCallback< void, Ptr<Socket> > ());
+ Face::UnRegisterProtocolHandlers ();
+}
+
+bool
+TcpFace::Send (Ptr<Packet> packet)
+{
+ if (!Face::Send (packet))
+ {
+ return false;
+ }
+
NS_LOG_FUNCTION (this << packet);
+
Ptr<Packet> boundary = Create<Packet> ();
TcpBoundaryHeader hdr (packet);
boundary->AddHeader (hdr);
@@ -247,7 +261,7 @@
}
Ptr<TcpFace>
-TcpFace::CreateOrGetFace (Ptr<Node> node, Ipv4Address address)
+TcpFace::CreateOrGetFace (Ptr<Node> node, Ipv4Address address, Callback< void, Ptr<Face> > onCreate)
{
NS_LOG_FUNCTION (address);
@@ -257,6 +271,8 @@
Ptr<Socket> socket = Socket::CreateSocket (node, TcpSocketFactory::GetTypeId ());
Ptr<TcpFace> face = CreateObject<TcpFace> (node, socket, address);
+
+ face->SetCreateCallback (onCreate);
socket->SetConnectCallback (MakeCallback (&TcpFace::OnConnect, face),
MakeNullCallback< void, Ptr< Socket > > ());
@@ -268,6 +284,12 @@
}
void
+TcpFace::SetCreateCallback (Callback< void, Ptr<Face> > callback)
+{
+ m_onCreateCallback = callback;
+}
+
+void
TcpFace::OnConnect (Ptr<Socket> socket)
{
NS_LOG_FUNCTION (this << socket);
@@ -279,6 +301,12 @@
socket->SetCloseCallbacks (MakeCallback (&TcpFace::OnTcpConnectionClosed, this),
MakeCallback (&TcpFace::OnTcpConnectionClosed, this));
+
+ if (!m_onCreateCallback.IsNull ())
+ {
+ m_onCreateCallback (this);
+ m_onCreateCallback = NULL_CREATE_CALLBACK;
+ }
}
std::ostream&