bug 1029: fix endian issue in v4ping.cc

This commit is contained in:
Tom Henderson
2010-12-30 11:09:57 -08:00
parent 083b833ff0
commit ef2941417d
2 changed files with 18 additions and 4 deletions

View File

@@ -124,12 +124,16 @@ V4Ping::Receive (Ptr<Socket> socket)
{
uint32_t buf[m_size / 4];
uint32_t dataSize = echo.GetDataSize ();
uint32_t nodeId;
uint32_t appId;
if (dataSize == sizeof(buf))
{
echo.GetData ((uint8_t *)buf);
Read32 ((const uint8_t *) &buf[0], nodeId);
Read32 ((const uint8_t *) &buf[1], appId);
if (buf[0] == GetNode ()->GetId () &&
buf[1] == GetApplicationId ())
if (nodeId == GetNode ()->GetId () &&
appId == GetApplicationId ())
{
Time sendTime = i->second;
NS_ASSERT (Simulator::Now () >= sendTime);
@@ -154,8 +158,10 @@ V4Ping::Receive (Ptr<Socket> socket)
}
}
// Writes data to buffer in little-endian format; least significant byte
// of data is at lowest buffer address
void
V4Ping::Write32 (uint8_t *buffer, uint32_t data)
V4Ping::Write32 (uint8_t *buffer, const uint32_t data)
{
buffer[0] = (data >> 0) & 0xff;
buffer[1] = (data >> 8) & 0xff;
@@ -163,6 +169,13 @@ V4Ping::Write32 (uint8_t *buffer, uint32_t data)
buffer[3] = (data >> 24) & 0xff;
}
// Writes data from a little-endian formatted buffer to data
void
V4Ping::Read32 (const uint8_t *buffer, uint32_t &data)
{
data = (buffer[3] << 24) + (buffer[2] << 16) + (buffer[1] << 8) + buffer[0];
}
void
V4Ping::Send ()
{

View File

@@ -45,7 +45,8 @@ public:
virtual ~V4Ping ();
private:
void Write32 (uint8_t *buffer, uint32_t data);
void Write32 (uint8_t *buffer, const uint32_t data);
void Read32 (const uint8_t *buffer, uint32_t &data);
// inherited from Application base class.
virtual void StartApplication (void);