changeset: 4376:3c87569af13f user: Mathieu Lacage date: Mon Nov 24 08:00:44 2008 +0100 summary: avoid infinite stack recursions diff -r 66e6e15db3ce -r 3c87569af13f src/internet-stack/ipv4-end-point.cc --- a/src/internet-stack/ipv4-end-point.cc Mon Nov 24 07:44:20 2008 +0100 +++ b/src/internet-stack/ipv4-end-point.cc Mon Nov 24 08:00:44 2008 +0100 @@ -21,6 +21,7 @@ #include "ipv4-end-point.h" #include "ns3/packet.h" #include "ns3/log.h" +#include "ns3/simulator.h" NS_LOG_COMPONENT_DEFINE ("Ipv4EndPoint"); @@ -95,9 +96,14 @@ Ipv4EndPoint::ForwardUp (Ptr p, Ipv4Address saddr, uint16_t sport) { if (!m_rxCallback.IsNull ()) - { - m_rxCallback (p, saddr, sport); - } + { + Simulator::ScheduleNow (&Ipv4EndPoint::DoForwardUp, this, p, saddr, sport); + } +} +void +Ipv4EndPoint::DoForwardUp (Ptr p, Ipv4Address saddr, uint16_t sport) +{ + m_rxCallback (p, saddr, sport); } void @@ -109,8 +115,16 @@ (uint32_t)icmpCode << icmpInfo); if (!m_icmpCallback.IsNull ()) { - m_icmpCallback (icmpSource,icmpTtl,icmpType,icmpCode,icmpInfo); + Simulator::ScheduleNow (&Ipv4EndPoint::DoForwardIcmp, this, + icmpSource, icmpTtl, icmpType, icmpCode, icmpInfo); } +} +void +Ipv4EndPoint::DoForwardIcmp (Ipv4Address icmpSource, uint8_t icmpTtl, + uint8_t icmpType, uint8_t icmpCode, + uint32_t icmpInfo) +{ + m_icmpCallback (icmpSource,icmpTtl,icmpType,icmpCode,icmpInfo); } }; // namespace ns3 diff -r 66e6e15db3ce -r 3c87569af13f src/internet-stack/ipv4-end-point.h --- a/src/internet-stack/ipv4-end-point.h Mon Nov 24 07:44:20 2008 +0100 +++ b/src/internet-stack/ipv4-end-point.h Mon Nov 24 08:00:44 2008 +0100 @@ -69,6 +69,10 @@ uint32_t icmpInfo); private: + void DoForwardUp (Ptr p, Ipv4Address saddr, uint16_t sport); + void DoForwardIcmp (Ipv4Address icmpSource, uint8_t icmpTtl, + uint8_t icmpType, uint8_t icmpCode, + uint32_t icmpInfo); Ipv4Address m_localAddr; uint16_t m_localPort; Ipv4Address m_peerAddr;