merge bug 213 repo
This commit is contained in:
@@ -346,8 +346,10 @@ TcpSocketImpl::Connect (const Address & address)
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
//p here is just data, no headers
|
||||
int
|
||||
TcpSocketImpl::Send (const Ptr<Packet> p) //p here is just data, no headers
|
||||
TcpSocketImpl::Send (Ptr<Packet> p, uint32_t flags)
|
||||
{
|
||||
NS_LOG_FUNCTION (this << p);
|
||||
if (m_state == ESTABLISHED || m_state == SYN_SENT || m_state == CLOSE_WAIT)
|
||||
@@ -382,11 +384,6 @@ TcpSocketImpl::Send (const Ptr<Packet> p) //p here is just data, no headers
|
||||
}
|
||||
}
|
||||
|
||||
int TcpSocketImpl::Send (const uint8_t* buf, uint32_t size)
|
||||
{
|
||||
return Send (Create<Packet> (buf, size));
|
||||
}
|
||||
|
||||
int TcpSocketImpl::DoSendTo (Ptr<Packet> p, const Address &address)
|
||||
{
|
||||
NS_LOG_FUNCTION (this << p << address);
|
||||
@@ -420,7 +417,7 @@ int TcpSocketImpl::DoSendTo (Ptr<Packet> p, Ipv4Address ipv4, uint16_t port)
|
||||
}
|
||||
|
||||
int
|
||||
TcpSocketImpl::SendTo (Ptr<Packet> p, const Address &address)
|
||||
TcpSocketImpl::SendTo (Ptr<Packet> p, uint32_t flags, const Address &address)
|
||||
{
|
||||
NS_LOG_FUNCTION (this << address << p);
|
||||
if (!m_connected)
|
||||
@@ -430,7 +427,7 @@ TcpSocketImpl::SendTo (Ptr<Packet> p, const Address &address)
|
||||
}
|
||||
else
|
||||
{
|
||||
return Send (p); //drop the address according to BSD manpages
|
||||
return Send (p, flags); //drop the address according to BSD manpages
|
||||
}
|
||||
}
|
||||
|
||||
@@ -532,6 +529,23 @@ TcpSocketImpl::GetRxAvailable (void) const
|
||||
return m_rxAvailable;
|
||||
}
|
||||
|
||||
Ptr<Packet>
|
||||
TcpSocketImpl::RecvFrom (uint32_t maxSize, uint32_t flags,
|
||||
Address &fromAddress)
|
||||
{
|
||||
NS_LOG_FUNCTION (this << maxSize << flags);
|
||||
Ptr<Packet> packet = Recv (maxSize, flags);
|
||||
if (packet != 0)
|
||||
{
|
||||
SocketAddressTag tag;
|
||||
bool found;
|
||||
found = packet->FindFirstMatchingTag (tag);
|
||||
NS_ASSERT (found);
|
||||
fromAddress = tag.GetAddress ();
|
||||
}
|
||||
return packet;
|
||||
}
|
||||
|
||||
void
|
||||
TcpSocketImpl::ForwardUp (Ptr<Packet> packet, Ipv4Address ipv4, uint16_t port)
|
||||
{
|
||||
@@ -1048,7 +1062,7 @@ void TcpSocketImpl::NewRx (Ptr<Packet> p,
|
||||
m_nextRxSequence += s; // Advance next expected sequence
|
||||
//bytesReceived += s; // Statistics
|
||||
NS_LOG_LOGIC("Case 1, advanced nrxs to " << m_nextRxSequence );
|
||||
SocketRxAddressTag tag;
|
||||
SocketAddressTag tag;
|
||||
tag.SetAddress (fromAddress);
|
||||
p->AddTag (tag);
|
||||
//buffer this, it'll be read by call to Recv
|
||||
@@ -1106,7 +1120,7 @@ void TcpSocketImpl::NewRx (Ptr<Packet> p,
|
||||
i->second = 0; // relase reference to already buffered
|
||||
}
|
||||
// Save for later delivery
|
||||
SocketRxAddressTag tag;
|
||||
SocketAddressTag tag;
|
||||
tag.SetAddress (fromAddress);
|
||||
p->AddTag (tag);
|
||||
m_bufferedData[tcpHeader.GetSequenceNumber () ] = p;
|
||||
|
||||
@@ -79,14 +79,14 @@ public:
|
||||
virtual int ShutdownSend (void);
|
||||
virtual int ShutdownRecv (void);
|
||||
virtual int Connect(const Address &address);
|
||||
virtual int Send (Ptr<Packet> p);
|
||||
virtual int Send (const uint8_t* buf, uint32_t size);
|
||||
virtual int SendTo(Ptr<Packet> p, const Address &address);
|
||||
virtual uint32_t GetTxAvailable (void) const;
|
||||
virtual int Listen(uint32_t queueLimit);
|
||||
|
||||
virtual Ptr<Packet> Recv (uint32_t maxSize, uint32_t flags);
|
||||
virtual uint32_t GetTxAvailable (void) const;
|
||||
virtual int Send (Ptr<Packet> p, uint32_t flags);
|
||||
virtual int SendTo(Ptr<Packet> p, uint32_t flags, const Address &toAddress);
|
||||
virtual uint32_t GetRxAvailable (void) const;
|
||||
virtual Ptr<Packet> Recv (uint32_t maxSize, uint32_t flags);
|
||||
virtual Ptr<Packet> RecvFrom (uint32_t maxSize, uint32_t flags,
|
||||
Address &fromAddress);
|
||||
|
||||
private:
|
||||
friend class Tcp;
|
||||
|
||||
@@ -224,9 +224,9 @@ UdpSocketImpl::Listen (uint32_t queueLimit)
|
||||
}
|
||||
|
||||
int
|
||||
UdpSocketImpl::Send (Ptr<Packet> p)
|
||||
UdpSocketImpl::Send (Ptr<Packet> p, uint32_t flags)
|
||||
{
|
||||
NS_LOG_FUNCTION (this << p);
|
||||
NS_LOG_FUNCTION (this << p << flags);
|
||||
|
||||
if (!m_connected)
|
||||
{
|
||||
@@ -239,7 +239,7 @@ UdpSocketImpl::Send (Ptr<Packet> p)
|
||||
int
|
||||
UdpSocketImpl::DoSend (Ptr<Packet> p)
|
||||
{
|
||||
NS_LOG_FUNCTION_NOARGS ();
|
||||
NS_LOG_FUNCTION (this << p);
|
||||
if (m_endPoint == 0)
|
||||
{
|
||||
if (Bind () == -1)
|
||||
@@ -380,19 +380,28 @@ UdpSocketImpl::GetTxAvailable (void) const
|
||||
}
|
||||
|
||||
int
|
||||
UdpSocketImpl::SendTo (Ptr<Packet> p, const Address &address)
|
||||
UdpSocketImpl::SendTo (Ptr<Packet> p, uint32_t flags, const Address &address)
|
||||
{
|
||||
NS_LOG_FUNCTION (this << address << p);
|
||||
NS_LOG_FUNCTION (this << p << flags << address);
|
||||
InetSocketAddress transport = InetSocketAddress::ConvertFrom (address);
|
||||
Ipv4Address ipv4 = transport.GetIpv4 ();
|
||||
uint16_t port = transport.GetPort ();
|
||||
return DoSendTo (p, ipv4, port);
|
||||
}
|
||||
|
||||
uint32_t
|
||||
UdpSocketImpl::GetRxAvailable (void) const
|
||||
{
|
||||
NS_LOG_FUNCTION_NOARGS ();
|
||||
// We separately maintain this state to avoid walking the queue
|
||||
// every time this might be called
|
||||
return m_rxAvailable;
|
||||
}
|
||||
|
||||
Ptr<Packet>
|
||||
UdpSocketImpl::Recv (uint32_t maxSize, uint32_t flags)
|
||||
{
|
||||
NS_LOG_FUNCTION_NOARGS ();
|
||||
NS_LOG_FUNCTION (this << maxSize << flags);
|
||||
if (m_deliveryQueue.empty() )
|
||||
{
|
||||
return 0;
|
||||
@@ -410,13 +419,21 @@ UdpSocketImpl::Recv (uint32_t maxSize, uint32_t flags)
|
||||
return p;
|
||||
}
|
||||
|
||||
uint32_t
|
||||
UdpSocketImpl::GetRxAvailable (void) const
|
||||
Ptr<Packet>
|
||||
UdpSocketImpl::RecvFrom (uint32_t maxSize, uint32_t flags,
|
||||
Address &fromAddress)
|
||||
{
|
||||
NS_LOG_FUNCTION_NOARGS ();
|
||||
// We separately maintain this state to avoid walking the queue
|
||||
// every time this might be called
|
||||
return m_rxAvailable;
|
||||
NS_LOG_FUNCTION (this << maxSize << flags);
|
||||
Ptr<Packet> packet = Recv (maxSize, flags);
|
||||
if (packet != 0)
|
||||
{
|
||||
SocketAddressTag tag;
|
||||
bool found;
|
||||
found = packet->FindFirstMatchingTag (tag);
|
||||
NS_ASSERT (found);
|
||||
fromAddress = tag.GetAddress ();
|
||||
}
|
||||
return packet;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -431,7 +448,7 @@ UdpSocketImpl::ForwardUp (Ptr<Packet> packet, Ipv4Address ipv4, uint16_t port)
|
||||
if ((m_rxAvailable + packet->GetSize ()) <= m_rcvBufSize)
|
||||
{
|
||||
Address address = InetSocketAddress (ipv4, port);
|
||||
SocketRxAddressTag tag;
|
||||
SocketAddressTag tag;
|
||||
tag.SetAddress (address);
|
||||
packet->AddTag (tag);
|
||||
m_deliveryQueue.push (packet);
|
||||
@@ -638,7 +655,7 @@ UdpSocketImplTest::RunTests (void)
|
||||
// Unicast test
|
||||
m_receivedPacket = Create<Packet> ();
|
||||
m_receivedPacket2 = Create<Packet> ();
|
||||
NS_TEST_ASSERT_EQUAL (txSocket->SendTo ( Create<Packet> (123),
|
||||
NS_TEST_ASSERT_EQUAL (txSocket->SendTo ( Create<Packet> (123), 0,
|
||||
InetSocketAddress (Ipv4Address("10.0.0.1"), 1234)), 123);
|
||||
Simulator::Run ();
|
||||
NS_TEST_ASSERT_EQUAL (m_receivedPacket->GetSize (), 123);
|
||||
@@ -651,7 +668,7 @@ UdpSocketImplTest::RunTests (void)
|
||||
|
||||
m_receivedPacket = Create<Packet> ();
|
||||
m_receivedPacket2 = Create<Packet> ();
|
||||
NS_TEST_ASSERT_EQUAL (txSocket->SendTo ( Create<Packet> (123),
|
||||
NS_TEST_ASSERT_EQUAL (txSocket->SendTo ( Create<Packet> (123), 0,
|
||||
InetSocketAddress (Ipv4Address("255.255.255.255"), 1234)), 123);
|
||||
Simulator::Run ();
|
||||
NS_TEST_ASSERT_EQUAL (m_receivedPacket->GetSize (), 123);
|
||||
@@ -673,7 +690,7 @@ UdpSocketImplTest::RunTests (void)
|
||||
|
||||
m_receivedPacket = Create<Packet> ();
|
||||
m_receivedPacket2 = Create<Packet> ();
|
||||
NS_TEST_ASSERT_EQUAL (txSocket->SendTo (Create<Packet> (123),
|
||||
NS_TEST_ASSERT_EQUAL (txSocket->SendTo (Create<Packet> (123), 0,
|
||||
InetSocketAddress (Ipv4Address("255.255.255.255"), 1234)), 123);
|
||||
Simulator::Run ();
|
||||
NS_TEST_ASSERT_EQUAL (m_receivedPacket->GetSize (), 123);
|
||||
|
||||
@@ -65,12 +65,13 @@ public:
|
||||
virtual int ShutdownRecv (void);
|
||||
virtual int Connect(const Address &address);
|
||||
virtual int Listen (uint32_t queueLimit);
|
||||
virtual int Send (Ptr<Packet> p);
|
||||
virtual int SendTo (Ptr<Packet> p, const Address &address);
|
||||
virtual uint32_t GetTxAvailable (void) const;
|
||||
|
||||
virtual Ptr<Packet> Recv (uint32_t maxSize, uint32_t flags);
|
||||
virtual int Send (Ptr<Packet> p, uint32_t flags);
|
||||
virtual int SendTo (Ptr<Packet> p, uint32_t flags, const Address &address);
|
||||
virtual uint32_t GetRxAvailable (void) const;
|
||||
virtual Ptr<Packet> Recv (uint32_t maxSize, uint32_t flags);
|
||||
virtual Ptr<Packet> RecvFrom (uint32_t maxSize, uint32_t flags,
|
||||
Address &fromAddress);
|
||||
|
||||
private:
|
||||
// Attributes set through UdpSocket base class
|
||||
|
||||
Reference in New Issue
Block a user