mirror of
https://github.com/espressif/openthread.git
synced 2026-10-11 18:27:43 +00:00
Remove globals from message.cpp.
This commit is contained in:
+1
-1
@@ -1060,7 +1060,7 @@ exit:
|
||||
|
||||
if (error != kThreadError_None && message != NULL)
|
||||
{
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
|
||||
if (sCount)
|
||||
|
||||
+64
-65
@@ -38,88 +38,82 @@
|
||||
|
||||
namespace Thread {
|
||||
|
||||
static Buffer *NewBuffer(void);
|
||||
static ThreadError FreeBuffers(Buffer *aBuffer);
|
||||
static ThreadError ReclaimBuffers(int aNumBuffers);
|
||||
MessagePool::MessagePool(void)
|
||||
{
|
||||
mFreeBuffers = mBuffers;
|
||||
|
||||
static int sNumFreeBuffers;
|
||||
static Buffer sBuffers[kNumBuffers];
|
||||
static Buffer *sFreeBuffers;
|
||||
static MessageList sAll;
|
||||
for (int i = 0; i < kNumBuffers - 1; i++)
|
||||
{
|
||||
mBuffers[i].SetNextBuffer(&mBuffers[i + 1]);
|
||||
}
|
||||
|
||||
Buffer *NewBuffer(void)
|
||||
mBuffers[kNumBuffers - 1].SetNextBuffer(NULL);
|
||||
mNumFreeBuffers = kNumBuffers;
|
||||
}
|
||||
|
||||
Message *MessagePool::New(uint8_t aType, uint16_t aReserved)
|
||||
{
|
||||
Message *message = NULL;
|
||||
|
||||
VerifyOrExit((message = static_cast<Message *>(NewBuffer())) != NULL, ;);
|
||||
|
||||
memset(message, 0, sizeof(*message));
|
||||
message->SetMessagePool(this);
|
||||
message->SetType(aType);
|
||||
message->SetReserved(aReserved);
|
||||
message->SetLinkSecurityEnabled(true);
|
||||
|
||||
if (message->SetLength(0) != kThreadError_None)
|
||||
{
|
||||
Free(message);
|
||||
message = NULL;
|
||||
}
|
||||
|
||||
exit:
|
||||
return message;
|
||||
}
|
||||
|
||||
ThreadError MessagePool::Free(Message *aMessage)
|
||||
{
|
||||
assert(aMessage->GetMessageList(MessageInfo::kListAll).mList == NULL &&
|
||||
aMessage->GetMessageList(MessageInfo::kListInterface).mList == NULL);
|
||||
return FreeBuffers(static_cast<Buffer *>(aMessage));
|
||||
}
|
||||
|
||||
Buffer *MessagePool::NewBuffer(void)
|
||||
{
|
||||
Buffer *buffer = NULL;
|
||||
|
||||
VerifyOrExit(sFreeBuffers != NULL, ;);
|
||||
VerifyOrExit(mFreeBuffers != NULL, ;);
|
||||
|
||||
buffer = sFreeBuffers;
|
||||
sFreeBuffers = sFreeBuffers->GetNextBuffer();
|
||||
buffer = mFreeBuffers;
|
||||
mFreeBuffers = mFreeBuffers->GetNextBuffer();
|
||||
buffer->SetNextBuffer(NULL);
|
||||
sNumFreeBuffers--;
|
||||
mNumFreeBuffers--;
|
||||
|
||||
exit:
|
||||
return buffer;
|
||||
}
|
||||
|
||||
ThreadError FreeBuffers(Buffer *aBuffer)
|
||||
ThreadError MessagePool::FreeBuffers(Buffer *aBuffer)
|
||||
{
|
||||
Buffer *tmpBuffer;
|
||||
|
||||
while (aBuffer != NULL)
|
||||
{
|
||||
tmpBuffer = aBuffer->GetNextBuffer();
|
||||
aBuffer->SetNextBuffer(sFreeBuffers);
|
||||
sFreeBuffers = aBuffer;
|
||||
sNumFreeBuffers++;
|
||||
aBuffer->SetNextBuffer(mFreeBuffers);
|
||||
mFreeBuffers = aBuffer;
|
||||
mNumFreeBuffers++;
|
||||
aBuffer = tmpBuffer;
|
||||
}
|
||||
|
||||
return kThreadError_None;
|
||||
}
|
||||
|
||||
ThreadError ReclaimBuffers(int aNumBuffers)
|
||||
ThreadError MessagePool::ReclaimBuffers(int aNumBuffers)
|
||||
{
|
||||
return (aNumBuffers <= sNumFreeBuffers) ? kThreadError_None : kThreadError_NoBufs;
|
||||
}
|
||||
|
||||
ThreadError Message::Init(void)
|
||||
{
|
||||
sFreeBuffers = sBuffers;
|
||||
|
||||
for (int i = 0; i < kNumBuffers - 1; i++)
|
||||
{
|
||||
sBuffers[i].SetNextBuffer(&sBuffers[i + 1]);
|
||||
}
|
||||
|
||||
sBuffers[kNumBuffers - 1].SetNextBuffer(NULL);
|
||||
sNumFreeBuffers = kNumBuffers;
|
||||
|
||||
return kThreadError_None;
|
||||
}
|
||||
|
||||
Message *Message::New(uint8_t aType, uint16_t aReserved)
|
||||
{
|
||||
Message *message = NULL;
|
||||
|
||||
VerifyOrExit((message = reinterpret_cast<Message *>(NewBuffer())) != NULL, ;);
|
||||
|
||||
memset(message, 0, sizeof(*message));
|
||||
message->SetType(aType);
|
||||
message->SetReserved(aReserved);
|
||||
message->SetLinkSecurityEnabled(true);
|
||||
|
||||
VerifyOrExit(message->SetLength(0) == kThreadError_None, Message::Free(*message));
|
||||
|
||||
exit:
|
||||
return message;
|
||||
}
|
||||
|
||||
ThreadError Message::Free(Message &aMessage)
|
||||
{
|
||||
assert(aMessage.GetMessageList(MessageInfo::kListAll).mList == NULL &&
|
||||
aMessage.GetMessageList(MessageInfo::kListInterface).mList == NULL);
|
||||
return FreeBuffers(reinterpret_cast<Buffer *>(&aMessage));
|
||||
return (aNumBuffers <= mNumFreeBuffers) ? kThreadError_None : kThreadError_NoBufs;
|
||||
}
|
||||
|
||||
ThreadError Message::ResizeMessage(uint16_t aLength)
|
||||
@@ -135,7 +129,7 @@ ThreadError Message::ResizeMessage(uint16_t aLength)
|
||||
{
|
||||
if (curBuffer->GetNextBuffer() == NULL)
|
||||
{
|
||||
curBuffer->SetNextBuffer(NewBuffer());
|
||||
curBuffer->SetNextBuffer(GetMessagePool()->NewBuffer());
|
||||
VerifyOrExit(curBuffer->GetNextBuffer() != NULL, error = kThreadError_NoBufs);
|
||||
}
|
||||
|
||||
@@ -148,12 +142,17 @@ ThreadError Message::ResizeMessage(uint16_t aLength)
|
||||
curBuffer = curBuffer->GetNextBuffer();
|
||||
lastBuffer->SetNextBuffer(NULL);
|
||||
|
||||
FreeBuffers(curBuffer);
|
||||
GetMessagePool()->FreeBuffers(curBuffer);
|
||||
|
||||
exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
ThreadError Message::Free(void)
|
||||
{
|
||||
return GetMessagePool()->Free(this);
|
||||
}
|
||||
|
||||
Message *Message::GetNext(void) const
|
||||
{
|
||||
return GetMessageList(MessageInfo::kListInterface).mNext;
|
||||
@@ -181,7 +180,7 @@ ThreadError Message::SetLength(uint16_t aLength)
|
||||
bufs -= (((totalLengthCurrent - kHeadBufferDataSize) - 1) / kBufferDataSize) + 1;
|
||||
}
|
||||
|
||||
SuccessOrExit(error = ReclaimBuffers(bufs));
|
||||
SuccessOrExit(error = GetMessagePool()->ReclaimBuffers(bufs));
|
||||
|
||||
SuccessOrExit(error = ResizeMessage(totalLengthRequest));
|
||||
mInfo.mLength = aLength;
|
||||
@@ -292,7 +291,7 @@ uint16_t Message::Read(uint16_t aOffset, uint16_t aLength, void *aBuf) const
|
||||
|
||||
aLength -= bytesToCopy;
|
||||
bytesCopied += bytesToCopy;
|
||||
aBuf = reinterpret_cast<uint8_t *>(aBuf) + bytesToCopy;
|
||||
aBuf = static_cast<uint8_t *>(aBuf) + bytesToCopy;
|
||||
|
||||
aOffset = 0;
|
||||
}
|
||||
@@ -328,7 +327,7 @@ uint16_t Message::Read(uint16_t aOffset, uint16_t aLength, void *aBuf) const
|
||||
|
||||
aLength -= bytesToCopy;
|
||||
bytesCopied += bytesToCopy;
|
||||
aBuf = reinterpret_cast<uint8_t *>(aBuf) + bytesToCopy;
|
||||
aBuf = static_cast<uint8_t *>(aBuf) + bytesToCopy;
|
||||
|
||||
curBuffer = curBuffer->GetNextBuffer();
|
||||
aOffset = 0;
|
||||
@@ -367,7 +366,7 @@ int Message::Write(uint16_t aOffset, uint16_t aLength, const void *aBuf)
|
||||
|
||||
aLength -= bytesToCopy;
|
||||
bytesCopied += bytesToCopy;
|
||||
aBuf = reinterpret_cast<const uint8_t *>(aBuf) + bytesToCopy;
|
||||
aBuf = static_cast<const uint8_t *>(aBuf) + bytesToCopy;
|
||||
|
||||
aOffset = 0;
|
||||
}
|
||||
@@ -403,7 +402,7 @@ int Message::Write(uint16_t aOffset, uint16_t aLength, const void *aBuf)
|
||||
|
||||
aLength -= bytesToCopy;
|
||||
bytesCopied += bytesToCopy;
|
||||
aBuf = reinterpret_cast<const uint8_t *>(aBuf) + bytesToCopy;
|
||||
aBuf = static_cast<const uint8_t *>(aBuf) + bytesToCopy;
|
||||
|
||||
curBuffer = curBuffer->GetNextBuffer();
|
||||
aOffset = 0;
|
||||
@@ -694,7 +693,7 @@ Message *MessageQueue::GetHead(void) const
|
||||
|
||||
ThreadError MessageQueue::Enqueue(Message &aMessage)
|
||||
{
|
||||
aMessage.GetMessageList(MessageInfo::kListAll).mList = &sAll;
|
||||
aMessage.GetMessageList(MessageInfo::kListAll).mList = &aMessage.GetMessagePool()->mAll;
|
||||
aMessage.GetMessageList(MessageInfo::kListInterface).mList = &mInterface;
|
||||
AddToList(MessageInfo::kListAll, aMessage);
|
||||
AddToList(MessageInfo::kListInterface, aMessage);
|
||||
|
||||
+58
-28
@@ -61,6 +61,7 @@ enum
|
||||
};
|
||||
|
||||
class Message;
|
||||
class MessagePool;
|
||||
|
||||
/**
|
||||
* This structure contains pointers to the head and tail of a Message list.
|
||||
@@ -98,6 +99,7 @@ struct BufferHeader
|
||||
*/
|
||||
struct MessageInfo
|
||||
{
|
||||
MessagePool *mMessagePool; ///< Identifies the message pool for this message.
|
||||
enum
|
||||
{
|
||||
kListAll = 0, ///< Identifies the all messages list.
|
||||
@@ -200,6 +202,7 @@ private:
|
||||
*/
|
||||
class Message: private Buffer
|
||||
{
|
||||
friend class MessagePool;
|
||||
friend class MessageQueue;
|
||||
|
||||
public:
|
||||
@@ -210,6 +213,12 @@ public:
|
||||
kTypeMacDataPoll = 2, ///< A MAC data poll message
|
||||
};
|
||||
|
||||
/**
|
||||
* This method frees this message buffer.
|
||||
*
|
||||
*/
|
||||
ThreadError Free(void);
|
||||
|
||||
/**
|
||||
* This method returns a pointer to the next message in the same interface list.
|
||||
*
|
||||
@@ -508,35 +517,11 @@ public:
|
||||
*/
|
||||
uint16_t UpdateChecksum(uint16_t aChecksum, uint16_t aOffset, uint16_t aLength) const;
|
||||
|
||||
/**
|
||||
* This static method is used to initialize the message buffer pool.
|
||||
*
|
||||
*/
|
||||
static ThreadError Init(void);
|
||||
|
||||
/**
|
||||
* This static method is used to obtain a new message.
|
||||
*
|
||||
* @param[in] aType The message type.
|
||||
* @param[in] aReserveHeader The number of header bytes to reserve.
|
||||
*
|
||||
* @returns A pointer to the message or NULL if no message buffers are available.
|
||||
*
|
||||
*/
|
||||
static Message *New(uint8_t aType, uint16_t aReserveHeader);
|
||||
|
||||
/**
|
||||
* This static method is used to free a message and return all message buffers to the buffer pool.
|
||||
*
|
||||
* @param[in] aMessage The message to free.
|
||||
*
|
||||
* @retval kThreadError_None Successfully freed the message.
|
||||
* @retval kThreadError_InvalidArgs The message is already freed.
|
||||
*
|
||||
*/
|
||||
static ThreadError Free(Message &aMessage);
|
||||
|
||||
private:
|
||||
MessagePool *GetMessagePool(void) { return mInfo.mMessagePool; }
|
||||
|
||||
void SetMessagePool(MessagePool *aMessagePool) { mInfo.mMessagePool = aMessagePool; }
|
||||
|
||||
/**
|
||||
* This method returns a reference to a message list.
|
||||
*
|
||||
@@ -664,6 +649,51 @@ private:
|
||||
MessageList mInterface; ///< The instance-specific message list.
|
||||
};
|
||||
|
||||
class MessagePool
|
||||
{
|
||||
friend class Message;
|
||||
friend class MessageQueue;
|
||||
|
||||
public:
|
||||
/**
|
||||
* This constructor initializes the object.
|
||||
*
|
||||
*/
|
||||
MessagePool(void);
|
||||
|
||||
/**
|
||||
* This method is used to obtain a new message.
|
||||
*
|
||||
* @param[in] aType The message type.
|
||||
* @param[in] aReserveHeader The number of header bytes to reserve.
|
||||
*
|
||||
* @returns A pointer to the message or NULL if no message buffers are available.
|
||||
*
|
||||
*/
|
||||
Message *New(uint8_t aType, uint16_t aReserveHeader);
|
||||
|
||||
/**
|
||||
* This method is used to free a message and return all message buffers to the buffer pool.
|
||||
*
|
||||
* @param[in] aMessage The message to free.
|
||||
*
|
||||
* @retval kThreadError_None Successfully freed the message.
|
||||
* @retval kThreadError_InvalidArgs The message is already freed.
|
||||
*
|
||||
*/
|
||||
ThreadError Free(Message *aMessage);
|
||||
|
||||
private:
|
||||
Buffer *NewBuffer(void);
|
||||
ThreadError FreeBuffers(Buffer *aBuffer);
|
||||
ThreadError ReclaimBuffers(int aNumBuffers);
|
||||
|
||||
int mNumFreeBuffers;
|
||||
Buffer mBuffers[kNumBuffers];
|
||||
Buffer *mFreeBuffers;
|
||||
MessageList mAll;
|
||||
};
|
||||
|
||||
/**
|
||||
* @}
|
||||
*
|
||||
|
||||
@@ -137,7 +137,7 @@ exit:
|
||||
|
||||
if (error != kThreadError_None && message != NULL)
|
||||
{
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
|
||||
return error;
|
||||
@@ -232,7 +232,7 @@ exit:
|
||||
|
||||
if (error != kThreadError_None && replyMessage != NULL)
|
||||
{
|
||||
Message::Free(*replyMessage);
|
||||
replyMessage->Free();
|
||||
}
|
||||
|
||||
return error;
|
||||
|
||||
@@ -63,7 +63,7 @@ Ip6::Ip6(void):
|
||||
|
||||
Message *Ip6::NewMessage(uint16_t reserved)
|
||||
{
|
||||
return Message::New(Message::kTypeIp6, sizeof(Header) + sizeof(HopByHopHeader) + sizeof(OptionMpl) + reserved);
|
||||
return mMessagePool.New(Message::kTypeIp6, sizeof(Header) + sizeof(HopByHopHeader) + sizeof(OptionMpl) + reserved);
|
||||
}
|
||||
|
||||
void Ip6::SetForwardingEnabled(bool aEnable)
|
||||
@@ -385,7 +385,7 @@ exit:
|
||||
|
||||
if (error != kThreadError_None && messageCopy != NULL)
|
||||
{
|
||||
Message::Free(*messageCopy);
|
||||
messageCopy->Free();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -505,7 +505,7 @@ exit:
|
||||
|
||||
if (error != kThreadError_None || !forward)
|
||||
{
|
||||
Message::Free(message);
|
||||
message.Free();
|
||||
}
|
||||
|
||||
return error;
|
||||
|
||||
@@ -327,6 +327,7 @@ public:
|
||||
Icmp mIcmp;
|
||||
Udp mUdp;
|
||||
|
||||
MessagePool mMessagePool;
|
||||
TaskletScheduler mTaskletScheduler;
|
||||
TimerScheduler mTimerScheduler;
|
||||
|
||||
|
||||
@@ -872,7 +872,6 @@ ThreadError otEnable(void)
|
||||
VerifyOrExit(!mEnabled, error = kThreadError_InvalidState);
|
||||
|
||||
otLogInfoApi("otEnable\n");
|
||||
Message::Init();
|
||||
sIp6 = new(&sIp6Raw) Ip6::Ip6;
|
||||
sThreadNetif = new(&sThreadNetifRaw) ThreadNetif(*sIp6);
|
||||
mEnabled = true;
|
||||
@@ -1075,7 +1074,7 @@ otMessage otNewUdpMessage(void)
|
||||
|
||||
ThreadError otFreeMessage(otMessage aMessage)
|
||||
{
|
||||
return Message::Free(*static_cast<Message *>(aMessage));
|
||||
return static_cast<Message *>(aMessage)->Free();
|
||||
}
|
||||
|
||||
uint16_t otGetMessageLength(otMessage aMessage)
|
||||
|
||||
@@ -213,7 +213,7 @@ exit:
|
||||
|
||||
if (error != kThreadError_None && message != NULL)
|
||||
{
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
|
||||
return error;
|
||||
@@ -338,7 +338,7 @@ exit:
|
||||
|
||||
if (error != kThreadError_None && message != NULL)
|
||||
{
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -393,7 +393,7 @@ exit:
|
||||
|
||||
if (error != kThreadError_None && message != NULL)
|
||||
{
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
|
||||
return error;
|
||||
@@ -428,7 +428,7 @@ exit:
|
||||
|
||||
if (error != kThreadError_None && message != NULL)
|
||||
{
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -624,7 +624,7 @@ exit:
|
||||
|
||||
if (error != kThreadError_None && message != NULL)
|
||||
{
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -113,13 +113,13 @@ ThreadError MeshForwarder::Stop()
|
||||
while ((message = mSendQueue.GetHead()) != NULL)
|
||||
{
|
||||
mSendQueue.Dequeue(*message);
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
|
||||
while ((message = mReassemblyList.GetHead()) != NULL)
|
||||
{
|
||||
mReassemblyList.Dequeue(*message);
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
|
||||
mEnabled = false;
|
||||
@@ -157,7 +157,7 @@ void MeshForwarder::HandleResolved(const Ip6::Address &aEid, ThreadError aError)
|
||||
}
|
||||
else
|
||||
{
|
||||
Message::Free(*cur);
|
||||
cur->Free();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -347,7 +347,7 @@ Message *MeshForwarder::GetDirectTransmission()
|
||||
case kThreadError_Drop:
|
||||
case kThreadError_NoBufs:
|
||||
mSendQueue.Dequeue(*curMessage);
|
||||
Message::Free(*curMessage);
|
||||
curMessage->Free();
|
||||
continue;
|
||||
|
||||
default:
|
||||
@@ -620,7 +620,7 @@ void MeshForwarder::HandlePollTimer()
|
||||
{
|
||||
Message *message;
|
||||
|
||||
if ((message = Message::New(Message::kTypeMacDataPoll, 0)) != NULL)
|
||||
if ((message = mNetif.GetIp6().mMessagePool.New(Message::kTypeMacDataPoll, 0)) != NULL)
|
||||
{
|
||||
SendMessage(*message);
|
||||
otLogInfoMac("Sent poll\n");
|
||||
@@ -1048,7 +1048,7 @@ void MeshForwarder::HandleSentFrame(Mac::Frame &aFrame)
|
||||
if (mSendMessage->GetDirectTransmission() == false && mSendMessage->IsChildPending() == false)
|
||||
{
|
||||
mSendQueue.Dequeue(*mSendMessage);
|
||||
Message::Free(*mSendMessage);
|
||||
mSendMessage->Free();
|
||||
}
|
||||
|
||||
mScheduleTransmissionTask.Post();
|
||||
@@ -1079,7 +1079,7 @@ void MeshForwarder::HandleDiscoverTimer(void)
|
||||
if (mScanChannel > kPhyMaxChannel)
|
||||
{
|
||||
mSendQueue.Dequeue(*mSendMessage);
|
||||
Message::Free(*mSendMessage);
|
||||
mSendMessage->Free();
|
||||
mMac.SetChannel(mRestoreChannel);
|
||||
mScanning = false;
|
||||
mMle.HandleDiscoverComplete();
|
||||
@@ -1235,7 +1235,8 @@ void MeshForwarder::HandleMesh(uint8_t *aFrame, uint8_t aFrameLength, const Thre
|
||||
|
||||
meshHeader->SetHopsLeft(meshHeader->GetHopsLeft() - 1);
|
||||
|
||||
VerifyOrExit((message = Message::New(Message::kType6lowpan, 0)) != NULL, error = kThreadError_Drop);
|
||||
VerifyOrExit((message = mNetif.GetIp6().mMessagePool.New(Message::kType6lowpan, 0)) != NULL,
|
||||
error = kThreadError_Drop);
|
||||
SuccessOrExit(error = message->SetLength(aFrameLength));
|
||||
message->Write(0, aFrameLength, aFrame);
|
||||
message->SetLinkSecurityEnabled(aMessageInfo.mLinkSecurity);
|
||||
@@ -1248,7 +1249,7 @@ exit:
|
||||
|
||||
if (error != kThreadError_None && message != NULL)
|
||||
{
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1296,7 +1297,8 @@ void MeshForwarder::HandleFragment(uint8_t *aFrame, uint8_t aFrameLength,
|
||||
aFrame += fragmentHeader->GetHeaderLength();
|
||||
aFrameLength -= fragmentHeader->GetHeaderLength();
|
||||
|
||||
VerifyOrExit((message = Message::New(Message::kTypeIp6, 0)) != NULL, error = kThreadError_NoBufs);
|
||||
VerifyOrExit((message = mNetif.GetIp6().mMessagePool.New(Message::kTypeIp6, 0)) != NULL,
|
||||
error = kThreadError_NoBufs);
|
||||
message->SetLinkSecurityEnabled(aMessageInfo.mLinkSecurity);
|
||||
message->SetPanId(aMessageInfo.mPanId);
|
||||
headerLength = mLowpan.Decompress(*message, aMacSource, aMacDest, aFrame, aFrameLength, datagramLength);
|
||||
@@ -1361,7 +1363,7 @@ exit:
|
||||
}
|
||||
else if (message != NULL)
|
||||
{
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1388,7 +1390,7 @@ void MeshForwarder::HandleReassemblyTimer()
|
||||
else
|
||||
{
|
||||
mReassemblyList.Dequeue(*message);
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1407,7 +1409,8 @@ void MeshForwarder::HandleLowpanHC(uint8_t *aFrame, uint8_t aFrameLength,
|
||||
int headerLength;
|
||||
uint16_t ip6PayloadLength;
|
||||
|
||||
VerifyOrExit((message = Message::New(Message::kTypeIp6, 0)) != NULL, error = kThreadError_NoBufs);
|
||||
VerifyOrExit((message = mNetif.GetIp6().mMessagePool.New(Message::kTypeIp6, 0)) != NULL,
|
||||
error = kThreadError_NoBufs);
|
||||
message->SetLinkSecurityEnabled(aMessageInfo.mLinkSecurity);
|
||||
message->SetPanId(aMessageInfo.mPanId);
|
||||
|
||||
@@ -1435,7 +1438,7 @@ exit:
|
||||
}
|
||||
else if (message != NULL)
|
||||
{
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -198,7 +198,7 @@ exit:
|
||||
|
||||
if (error != kThreadError_None && message != NULL)
|
||||
{
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
|
||||
return error;
|
||||
@@ -426,7 +426,7 @@ exit:
|
||||
|
||||
if (error != kThreadError_None && message != NULL)
|
||||
{
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
|
||||
return error;
|
||||
@@ -479,7 +479,7 @@ exit:
|
||||
|
||||
if (error != kThreadError_None && message != NULL)
|
||||
{
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
|
||||
return error;
|
||||
@@ -515,7 +515,7 @@ exit:
|
||||
|
||||
if (error != kThreadError_None && message != NULL)
|
||||
{
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -562,7 +562,7 @@ exit:
|
||||
|
||||
if (error != kThreadError_None && message != NULL)
|
||||
{
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -267,7 +267,7 @@ exit:
|
||||
|
||||
if (error != kThreadError_None && message != NULL)
|
||||
{
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
|
||||
return error;
|
||||
@@ -1134,7 +1134,7 @@ exit:
|
||||
|
||||
if (error != kThreadError_None && message != NULL)
|
||||
{
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
|
||||
return kThreadError_None;
|
||||
@@ -1182,7 +1182,7 @@ exit:
|
||||
|
||||
if (error != kThreadError_None && message != NULL)
|
||||
{
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
|
||||
return error;
|
||||
@@ -1208,7 +1208,7 @@ exit:
|
||||
|
||||
if (error != kThreadError_None && message != NULL)
|
||||
{
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
|
||||
return error;
|
||||
@@ -1292,7 +1292,7 @@ exit:
|
||||
|
||||
if (error != kThreadError_None && message != NULL)
|
||||
{
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
|
||||
return error;
|
||||
@@ -2215,7 +2215,7 @@ exit:
|
||||
|
||||
if (error != kThreadError_None && message != NULL)
|
||||
{
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
|
||||
return error;
|
||||
|
||||
@@ -497,7 +497,7 @@ exit:
|
||||
|
||||
if (error != kThreadError_None && message != NULL)
|
||||
{
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
|
||||
return error;
|
||||
@@ -573,7 +573,7 @@ exit:
|
||||
|
||||
if (error != kThreadError_None && message != NULL)
|
||||
{
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
|
||||
return error;
|
||||
@@ -758,7 +758,7 @@ exit:
|
||||
|
||||
if (error != kThreadError_None && message != NULL)
|
||||
{
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
|
||||
return error;
|
||||
@@ -975,7 +975,7 @@ exit:
|
||||
|
||||
if (error != kThreadError_None && message != NULL)
|
||||
{
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
|
||||
return error;
|
||||
@@ -1748,7 +1748,7 @@ exit:
|
||||
|
||||
if (error != kThreadError_None && message != NULL)
|
||||
{
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
|
||||
return kThreadError_None;
|
||||
@@ -2158,7 +2158,7 @@ exit:
|
||||
|
||||
if (error != kThreadError_None && message != NULL)
|
||||
{
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
|
||||
return kThreadError_None;
|
||||
@@ -2217,7 +2217,7 @@ exit:
|
||||
|
||||
if (error != kThreadError_None && message != NULL)
|
||||
{
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
|
||||
return kThreadError_None;
|
||||
@@ -2266,7 +2266,7 @@ exit:
|
||||
|
||||
if (error != kThreadError_None && message != NULL)
|
||||
{
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
|
||||
return error;
|
||||
@@ -3164,7 +3164,7 @@ exit:
|
||||
|
||||
if (error != kThreadError_None && message != NULL)
|
||||
{
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3231,7 +3231,7 @@ exit:
|
||||
|
||||
if (error != kThreadError_None && message != NULL)
|
||||
{
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -640,7 +640,7 @@ exit:
|
||||
|
||||
if (error != kThreadError_None && message != NULL)
|
||||
{
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
|
||||
return error;
|
||||
|
||||
@@ -517,7 +517,7 @@ exit:
|
||||
|
||||
if (error != kThreadError_None && message != NULL)
|
||||
{
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -478,7 +478,7 @@ exit:
|
||||
|
||||
if (message != NULL)
|
||||
{
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
|
||||
if (errorCode != kThreadError_None)
|
||||
@@ -1076,7 +1076,7 @@ exit:
|
||||
|
||||
if (message != NULL)
|
||||
{
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
|
||||
return errorCode;
|
||||
@@ -3103,7 +3103,7 @@ ThreadError NcpBase::SetPropertyHandler_STREAM_NET_INSECURE(uint8_t header, spin
|
||||
unsigned int frame_len(0);
|
||||
const uint8_t *meta_ptr(NULL);
|
||||
unsigned int meta_len(0);
|
||||
Message *message(Message::New(Message::kTypeIp6, 0));
|
||||
Message *message(sIp6->mMessagePool.New(Message::kTypeIp6, 0));
|
||||
|
||||
if (message == NULL)
|
||||
{
|
||||
@@ -3139,7 +3139,7 @@ ThreadError NcpBase::SetPropertyHandler_STREAM_NET_INSECURE(uint8_t header, spin
|
||||
}
|
||||
else if (message)
|
||||
{
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
|
||||
if (errorCode == kThreadError_None)
|
||||
@@ -3174,7 +3174,7 @@ ThreadError NcpBase::SetPropertyHandler_STREAM_NET(uint8_t header, spinel_prop_k
|
||||
unsigned int frame_len(0);
|
||||
const uint8_t *meta_ptr(NULL);
|
||||
unsigned int meta_len(0);
|
||||
Message *message(Message::New(Message::kTypeIp6, 0));
|
||||
Message *message(sIp6->mMessagePool.New(Message::kTypeIp6, 0));
|
||||
|
||||
if (message == NULL)
|
||||
{
|
||||
@@ -3210,7 +3210,7 @@ ThreadError NcpBase::SetPropertyHandler_STREAM_NET(uint8_t header, spinel_prop_k
|
||||
}
|
||||
else if (message)
|
||||
{
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
|
||||
if (errorCode == kThreadError_None)
|
||||
|
||||
@@ -78,13 +78,13 @@ void NcpFrameBuffer::Clear(void)
|
||||
while ((message = mWriteFrameMessageQueue.GetHead()) != NULL)
|
||||
{
|
||||
mWriteFrameMessageQueue.Dequeue(*message);
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
|
||||
while ((message = mMessageQueue.GetHead()) != NULL)
|
||||
{
|
||||
mMessageQueue.Dequeue(*message);
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
|
||||
if (!wasEmpty)
|
||||
@@ -249,7 +249,7 @@ void NcpFrameBuffer::InFrameDiscard(void)
|
||||
while ((message = mWriteFrameMessageQueue.GetHead()) != NULL)
|
||||
{
|
||||
mWriteFrameMessageQueue.Dequeue(*message);
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -572,7 +572,7 @@ ThreadError NcpFrameBuffer::OutFrameRemove(void)
|
||||
if ((message = mMessageQueue.GetHead()) != NULL)
|
||||
{
|
||||
mMessageQueue.Dequeue(*message);
|
||||
Message::Free(*message);
|
||||
message->Free();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -117,7 +117,7 @@ void TestLowpanIphc(void)
|
||||
frame.GetSrcAddr(macSource);
|
||||
frame.GetDstAddr(macDest);
|
||||
|
||||
VerifyOrQuit((message = sIp6.NewMessage(0)) != NULL,
|
||||
VerifyOrQuit((message = sIp6.mMessagePool.New(Message::kTypeIp6, 0)) != NULL,
|
||||
"6lo: Ip6::NewMessage failed");
|
||||
|
||||
// ===> Test Lowpan::Decompress
|
||||
@@ -154,7 +154,7 @@ void TestLowpanIphc(void)
|
||||
VerifyOrQuit(memcmp(frame.GetPayload(), result, static_cast<size_t>(compressBytes)) == 0,
|
||||
"6lo: Lowpan::Compress failed");
|
||||
|
||||
SuccessOrQuit(Message::Free(*message), "6lo: Message:Free failed");
|
||||
SuccessOrQuit(message->Free(), "6lo: Message:Free failed");
|
||||
printf("PASS\n\n");
|
||||
|
||||
}
|
||||
@@ -165,8 +165,6 @@ void TestLowpanIphc(void)
|
||||
|
||||
int main(void)
|
||||
{
|
||||
Message::Init();
|
||||
|
||||
TestLowpanIphc();
|
||||
|
||||
printf("All tests passed\n");
|
||||
|
||||
@@ -42,18 +42,17 @@ extern "C" void otPlatDiagAlarmFired(void)
|
||||
|
||||
void TestMessage(void)
|
||||
{
|
||||
Thread::MessagePool messagePool;
|
||||
Thread::Message *message;
|
||||
uint8_t writeBuffer[1024];
|
||||
uint8_t readBuffer[1024];
|
||||
|
||||
Thread::Message::Init();
|
||||
|
||||
for (unsigned i = 0; i < sizeof(writeBuffer); i++)
|
||||
{
|
||||
writeBuffer[i] = static_cast<uint8_t>(random());
|
||||
}
|
||||
|
||||
VerifyOrQuit((message = Thread::Message::New(Thread::Message::kTypeIp6, 0)) != NULL,
|
||||
VerifyOrQuit((message = messagePool.New(Thread::Message::kTypeIp6, 0)) != NULL,
|
||||
"Message::New failed\n");
|
||||
SuccessOrQuit(message->SetLength(sizeof(writeBuffer)),
|
||||
"Message::SetLength failed\n");
|
||||
@@ -65,7 +64,7 @@ void TestMessage(void)
|
||||
"Message compare failed\n");
|
||||
VerifyOrQuit(message->GetLength() == 1024,
|
||||
"Message::GetLength failed\n");
|
||||
SuccessOrQuit(Thread::Message::Free(*message),
|
||||
SuccessOrQuit(message->Free(),
|
||||
"Message::Free failed\n");
|
||||
}
|
||||
|
||||
|
||||
@@ -56,6 +56,7 @@ static const uint8_t sHelloText[] = "Hello there!";
|
||||
static const uint8_t sMottoText[] = "Think good thoughts, say good words, do good deeds!";
|
||||
static const uint8_t sMysteryText[] = "4871(\\):|(3$}{4|/4/2%14(\\)";
|
||||
|
||||
static MessagePool sMessagePool;
|
||||
|
||||
struct CallbackContext
|
||||
{
|
||||
@@ -63,12 +64,6 @@ struct CallbackContext
|
||||
uint16_t mNonEmptyCount; // Number of times BufferNonEmptyCallback is invoked.
|
||||
};
|
||||
|
||||
// Initialize the test
|
||||
void InitTest(void)
|
||||
{
|
||||
Message::Init();
|
||||
}
|
||||
|
||||
void BufferDidGetEmptyCallback(void *aContext, NcpFrameBuffer *aNcpBuffer)
|
||||
{
|
||||
CallbackContext *callbackContext = reinterpret_cast<CallbackContext *>(aContext);
|
||||
@@ -147,7 +142,7 @@ void WriteTestFrame1(NcpFrameBuffer &aNcpBuffer)
|
||||
{
|
||||
Message *message;
|
||||
|
||||
message = Message::New(Message::kTypeIp6, 0);
|
||||
message = sMessagePool.New(Message::kTypeIp6, 0);
|
||||
VerifyOrQuit(message != NULL, "Null Message");
|
||||
SuccessOrQuit(message->SetLength(sizeof(sMottoText)), "Could not set the length of message.");
|
||||
message->Write(0, sizeof(sMottoText), sMottoText);
|
||||
@@ -182,12 +177,12 @@ void WriteTestFrame2(NcpFrameBuffer &aNcpBuffer)
|
||||
Message *message1;
|
||||
Message *message2;
|
||||
|
||||
message1 = Message::New(Message::kTypeIp6, 0);
|
||||
message1 = sMessagePool.New(Message::kTypeIp6, 0);
|
||||
VerifyOrQuit(message1 != NULL, "Null Message");
|
||||
SuccessOrQuit(message1->SetLength(sizeof(sMysteryText)), "Could not set the length of message.");
|
||||
message1->Write(0, sizeof(sMysteryText), sMysteryText);
|
||||
|
||||
message2 = Message::New(Message::kTypeIp6, 0);
|
||||
message2 = sMessagePool.New(Message::kTypeIp6, 0);
|
||||
VerifyOrQuit(message2 != NULL, "Null Message");
|
||||
SuccessOrQuit(message2->SetLength(sizeof(sHelloText)), "Could not set the length of message.");
|
||||
message2->Write(0, sizeof(sHelloText), sHelloText);
|
||||
@@ -219,7 +214,7 @@ void WriteTestFrame3(NcpFrameBuffer &aNcpBuffer)
|
||||
{
|
||||
Message *message1;
|
||||
|
||||
message1 = Message::New(Message::kTypeIp6, 0);
|
||||
message1 = sMessagePool.New(Message::kTypeIp6, 0);
|
||||
VerifyOrQuit(message1 != NULL, "Null Message");
|
||||
|
||||
// An empty message with no content.
|
||||
@@ -344,7 +339,7 @@ void TestNcpFrameBuffer(void)
|
||||
ncpBuffer.InFrameBegin();
|
||||
ncpBuffer.InFrameFeedData(sHelloText, sizeof(sHelloText));
|
||||
|
||||
message = Message::New(Message::kTypeIp6, 0);
|
||||
message = sMessagePool.New(Message::kTypeIp6, 0);
|
||||
VerifyOrQuit(message != NULL, "Null Message");
|
||||
SuccessOrQuit(message->SetLength(sizeof(sMysteryText)), "Could not set the length of message.");
|
||||
message->Write(0, sizeof(sMysteryText), sMysteryText);
|
||||
@@ -475,7 +470,6 @@ void TestNcpFrameBuffer(void)
|
||||
|
||||
int main(void)
|
||||
{
|
||||
Thread::InitTest();
|
||||
Thread::TestNcpFrameBuffer();
|
||||
printf("\nAll tests passed.\n");
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user