# HG changeset patch # User Tommaso Pecorella # Date 1463870958 -7200 # Parent cf1aec0951c18e55048ad09dc8a6b42ab4309363 UdpSocketImpl simplification diff --git a/src/internet/model/udp-socket-impl.cc b/src/internet/model/udp-socket-impl.cc --- a/src/internet/model/udp-socket-impl.cc +++ b/src/internet/model/udp-socket-impl.cc @@ -841,22 +841,10 @@ UdpSocketImpl::Recv (uint32_t maxSize, uint32_t flags) { NS_LOG_FUNCTION (this << maxSize << flags); - if (m_deliveryQueue.empty () ) - { - m_errno = ERROR_AGAIN; - return 0; - } - Ptr p = m_deliveryQueue.front (); - if (p->GetSize () <= maxSize) - { - m_deliveryQueue.pop (); - m_rxAvailable -= p->GetSize (); - } - else - { - p = 0; - } - return p; + + Address fromAddress; + Ptr packet = RecvFrom (maxSize, flags, fromAddress); + return packet; } Ptr @@ -864,16 +852,29 @@ Address &fromAddress) { NS_LOG_FUNCTION (this << maxSize << flags); - Ptr packet = Recv (maxSize, flags); - if (packet != 0) + + if (m_deliveryQueue.empty () ) { - SocketAddressTag tag; - bool found; - found = packet->PeekPacketTag (tag); - NS_ASSERT (found); - fromAddress = tag.GetAddress (); + m_errno = ERROR_AGAIN; + return 0; } - return packet; + Ptr p = m_deliveryQueue.front ().first; + fromAddress = m_deliveryQueue.front ().second; + + SocketAddressTag tag; + tag.SetAddress (fromAddress); + p->AddPacketTag (tag); + + if (p->GetSize () <= maxSize) + { + m_deliveryQueue.pop (); + m_rxAvailable -= p->GetSize (); + } + else + { + p = 0; + } + return p; } int @@ -1034,10 +1035,7 @@ if ((m_rxAvailable + packet->GetSize ()) <= m_rcvBufSize) { Address address = InetSocketAddress (header.GetSource (), port); - SocketAddressTag tag; - tag.SetAddress (address); - packet->AddPacketTag (tag); - m_deliveryQueue.push (packet); + m_deliveryQueue.push (std::make_pair (packet, address)); m_rxAvailable += packet->GetSize (); NotifyDataRecv (); } @@ -1090,10 +1088,7 @@ if ((m_rxAvailable + packet->GetSize ()) <= m_rcvBufSize) { Address address = Inet6SocketAddress (header.GetSourceAddress (), port); - SocketAddressTag tag; - tag.SetAddress (address); - packet->AddPacketTag (tag); - m_deliveryQueue.push (packet); + m_deliveryQueue.push (std::make_pair (packet, address)); m_rxAvailable += packet->GetSize (); NotifyDataRecv (); } diff --git a/src/internet/model/udp-socket-impl.h b/src/internet/model/udp-socket-impl.h --- a/src/internet/model/udp-socket-impl.h +++ b/src/internet/model/udp-socket-impl.h @@ -235,7 +235,7 @@ bool m_connected; //!< Connection established bool m_allowBroadcast; //!< Allow send broadcast packets - std::queue > m_deliveryQueue; //!< Queue for incoming packets + std::queue, Address> > m_deliveryQueue; //!< Queue for incoming packets uint32_t m_rxAvailable; //!< Number of available bytes to be received // Socket attributes