mirror of
https://github.com/espressif/openthread.git
synced 2026-08-12 05:37:46 +00:00
Set MeshCoP message to high priority (#1161)
* Add NewMeshCoPMessage() functions to create MeshCoP message * Set all of the MeshCoP messages to high priority
This commit is contained in:
@@ -52,6 +52,18 @@ exit:
|
||||
return message;
|
||||
}
|
||||
|
||||
Message *CoapBase::NewMeshCoPMessage(const Header &aHeader)
|
||||
{
|
||||
Message *message = NULL;
|
||||
|
||||
VerifyOrExit((message = NewMessage(aHeader)) != NULL, ;);
|
||||
|
||||
message->SetPriority(kMeshCoPMessagePriority);
|
||||
|
||||
exit:
|
||||
return message;
|
||||
}
|
||||
|
||||
ThreadError CoapBase::Start(const Ip6::SockAddr &aSockAddr)
|
||||
{
|
||||
ThreadError error;
|
||||
|
||||
@@ -50,6 +50,11 @@ namespace Coap {
|
||||
*
|
||||
*/
|
||||
|
||||
enum
|
||||
{
|
||||
kMeshCoPMessagePriority = Message::kPriorityHigh, // The priority for MeshCoP message
|
||||
};
|
||||
|
||||
/**
|
||||
* This class implements a common code base for CoAP client/server.
|
||||
*
|
||||
@@ -101,6 +106,16 @@ public:
|
||||
*/
|
||||
Message *NewMessage(const Header &aHeader);
|
||||
|
||||
/**
|
||||
* This method creates a new MeshCoP message with a CoAP header.
|
||||
*
|
||||
* @param[in] aHeader A reference to a CoAP header that is used to create the message.
|
||||
*
|
||||
* @returns A pointer to the MeshCoP message or NULL if failed to allocate message.
|
||||
*
|
||||
*/
|
||||
Message *NewMeshCoPMessage(const Header &aHeader);
|
||||
|
||||
/**
|
||||
* This method returns a port number used by CoAP client.
|
||||
*
|
||||
|
||||
@@ -100,6 +100,18 @@ Message *Server::NewMessage(uint16_t aReserved)
|
||||
return mSocket.NewMessage(aReserved);
|
||||
}
|
||||
|
||||
Message *Server::NewMeshCoPMessage(uint16_t aReserved)
|
||||
{
|
||||
Message *message = NULL;
|
||||
|
||||
VerifyOrExit((message = NewMessage(aReserved)) != NULL, ;);
|
||||
|
||||
message->SetPriority(kMeshCoPMessagePriority);
|
||||
|
||||
exit:
|
||||
return message;
|
||||
}
|
||||
|
||||
ThreadError Server::SendMessage(Message &aMessage, const Ip6::MessageInfo &aMessageInfo)
|
||||
{
|
||||
return mSender(this, aMessage, aMessageInfo);
|
||||
|
||||
@@ -156,6 +156,16 @@ public:
|
||||
*/
|
||||
Message *NewMessage(uint16_t aReserved);
|
||||
|
||||
/**
|
||||
* This method returns a new MeshCoP message with sufficient header space reserved.
|
||||
*
|
||||
* @param[in] aReserved The number of header bytes to reserve after the UDP header.
|
||||
*
|
||||
* @returns A pointer to the MeshCoP message or NULL if no buffers are available.
|
||||
*
|
||||
*/
|
||||
Message *NewMeshCoPMessage(uint16_t aReserved);
|
||||
|
||||
/**
|
||||
* This method creates a new message with a CoAP header.
|
||||
*
|
||||
@@ -167,15 +177,25 @@ public:
|
||||
Message *NewMessage(const Header &aHeader) { return CoapBase::NewMessage(aHeader); };
|
||||
|
||||
/**
|
||||
* This method sends a CoAP response from the server.
|
||||
* This method creates a new MeshCoP message with a CoAP header.
|
||||
*
|
||||
* @param[in] aMessage The CoAP response to send.
|
||||
* @param[in] aMessageInfo The message info corresponding to @p aMessage.
|
||||
* @param[in] aHeader A reference to a CoAP header that is used to create the message.
|
||||
*
|
||||
* @retval kThreadError_None Successfully enqueued the CoAP response message.
|
||||
* @retval kThreadError_NoBufs Insufficient buffers available to send the CoAP response.
|
||||
* @returns A pointer to the MeshCoP message or NULL if failed to allocate message.
|
||||
*
|
||||
*/
|
||||
Message *NewMeshCoPMessage(const Header &aHeader) { return CoapBase::NewMeshCoPMessage(aHeader); };
|
||||
|
||||
/**
|
||||
* This method sends a CoAP response from the server.
|
||||
*
|
||||
* @param[in] aMessage The CoAP response to send.
|
||||
* @param[in] aMessageInfo The message info corresponding to @p aMessage.
|
||||
*
|
||||
* @retval kThreadError_None Successfully enqueued the CoAP response message.
|
||||
* @retval kThreadError_NoBufs Insufficient buffers available to send the CoAP response.
|
||||
*
|
||||
*/
|
||||
ThreadError SendMessage(Message &aMessage, const Ip6::MessageInfo &aMessageInfo);
|
||||
|
||||
/**
|
||||
|
||||
@@ -76,7 +76,7 @@ ThreadError AnnounceBeginClient::SendRequest(uint32_t aChannelMask, uint8_t aCou
|
||||
header.AppendUriPathOptions(OPENTHREAD_URI_ANNOUNCE_BEGIN);
|
||||
header.SetPayloadMarker();
|
||||
|
||||
VerifyOrExit((message = mCoapClient.NewMessage(header)) != NULL, error = kThreadError_NoBufs);
|
||||
VerifyOrExit((message = mCoapClient.NewMeshCoPMessage(header)) != NULL, error = kThreadError_NoBufs);
|
||||
|
||||
sessionId.Init();
|
||||
sessionId.SetCommissionerSessionId(mNetif.GetCommissioner().GetSessionId());
|
||||
|
||||
@@ -332,7 +332,7 @@ ThreadError Commissioner::SendMgmtCommissionerGetRequest(const uint8_t *aTlvs,
|
||||
header.SetPayloadMarker();
|
||||
}
|
||||
|
||||
VerifyOrExit((message = mCoapClient.NewMessage(header)) != NULL, error = kThreadError_NoBufs);
|
||||
VerifyOrExit((message = mCoapClient.NewMeshCoPMessage(header)) != NULL, error = kThreadError_NoBufs);
|
||||
|
||||
if (aLength > 0)
|
||||
{
|
||||
@@ -398,7 +398,7 @@ ThreadError Commissioner::SendMgmtCommissionerSetRequest(const otCommissioningDa
|
||||
header.AppendUriPathOptions(OPENTHREAD_URI_COMMISSIONER_SET);
|
||||
header.SetPayloadMarker();
|
||||
|
||||
VerifyOrExit((message = mCoapClient.NewMessage(header)) != NULL, error = kThreadError_NoBufs);
|
||||
VerifyOrExit((message = mCoapClient.NewMeshCoPMessage(header)) != NULL, error = kThreadError_NoBufs);
|
||||
|
||||
if (aDataset.mIsLocatorSet)
|
||||
{
|
||||
@@ -496,7 +496,7 @@ ThreadError Commissioner::SendPetition(void)
|
||||
header.AppendUriPathOptions(OPENTHREAD_URI_LEADER_PETITION);
|
||||
header.SetPayloadMarker();
|
||||
|
||||
VerifyOrExit((message = mCoapClient.NewMessage(header)) != NULL, error = kThreadError_NoBufs);
|
||||
VerifyOrExit((message = mCoapClient.NewMeshCoPMessage(header)) != NULL, error = kThreadError_NoBufs);
|
||||
commissionerId.Init();
|
||||
commissionerId.SetCommissionerId("OpenThread Commissioner");
|
||||
|
||||
@@ -592,7 +592,7 @@ ThreadError Commissioner::SendKeepAlive(void)
|
||||
header.AppendUriPathOptions(OPENTHREAD_URI_LEADER_KEEP_ALIVE);
|
||||
header.SetPayloadMarker();
|
||||
|
||||
VerifyOrExit((message = mCoapClient.NewMessage(header)) != NULL, error = kThreadError_NoBufs);
|
||||
VerifyOrExit((message = mCoapClient.NewMeshCoPMessage(header)) != NULL, error = kThreadError_NoBufs);
|
||||
|
||||
state.Init();
|
||||
state.SetState(mState == kStateActive ? StateTlv::kAccept : StateTlv::kReject);
|
||||
@@ -821,7 +821,7 @@ void Commissioner::SendJoinFinalizeResponse(const Coap::Header &aRequestHeader,
|
||||
responseHeader.SetDefaultResponseHeader(aRequestHeader);
|
||||
responseHeader.SetPayloadMarker();
|
||||
|
||||
VerifyOrExit((message = mSecureCoapServer.NewMessage(responseHeader)) != NULL, error = kThreadError_NoBufs);
|
||||
VerifyOrExit((message = mSecureCoapServer.NewMeshCoPMessage(responseHeader)) != NULL, error = kThreadError_NoBufs);
|
||||
|
||||
stateTlv.Init();
|
||||
stateTlv.SetState(aState);
|
||||
@@ -871,7 +871,7 @@ ThreadError Commissioner::SendRelayTransmit(Message &aMessage, const Ip6::Messag
|
||||
header.AppendUriPathOptions(OPENTHREAD_URI_RELAY_TX);
|
||||
header.SetPayloadMarker();
|
||||
|
||||
VerifyOrExit((message = mCoapClient.NewMessage(header)) != NULL, error = kThreadError_NoBufs);
|
||||
VerifyOrExit((message = mCoapClient.NewMeshCoPMessage(header)) != NULL, error = kThreadError_NoBufs);
|
||||
|
||||
udpPort.Init();
|
||||
udpPort.SetUdpPort(mJoinerPort);
|
||||
|
||||
@@ -292,7 +292,7 @@ ThreadError DatasetManager::Register(void)
|
||||
pending->UpdateDelayTimer();
|
||||
}
|
||||
|
||||
VerifyOrExit((message = mCoapClient.NewMessage(header)) != NULL, error = kThreadError_NoBufs);
|
||||
VerifyOrExit((message = mCoapClient.NewMeshCoPMessage(header)) != NULL, error = kThreadError_NoBufs);
|
||||
|
||||
SuccessOrExit(error = message->Append(mLocal.GetBytes(), mLocal.GetSize()));
|
||||
|
||||
@@ -556,7 +556,7 @@ ThreadError DatasetManager::SendSetRequest(const otOperationalDataset &aDataset,
|
||||
header.AppendUriPathOptions(mUriSet);
|
||||
header.SetPayloadMarker();
|
||||
|
||||
VerifyOrExit((message = mCoapClient.NewMessage(header)) != NULL, error = kThreadError_NoBufs);
|
||||
VerifyOrExit((message = mCoapClient.NewMeshCoPMessage(header)) != NULL, error = kThreadError_NoBufs);
|
||||
|
||||
#if OPENTHREAD_ENABLE_COMMISSIONER
|
||||
bool isCommissioner;
|
||||
@@ -711,7 +711,7 @@ ThreadError DatasetManager::SendGetRequest(const uint8_t *aTlvTypes, const uint8
|
||||
header.AppendUriPathOptions(mUriGet);
|
||||
header.SetPayloadMarker();
|
||||
|
||||
VerifyOrExit((message = mCoapClient.NewMessage(header)) != NULL, error = kThreadError_NoBufs);
|
||||
VerifyOrExit((message = mCoapClient.NewMeshCoPMessage(header)) != NULL, error = kThreadError_NoBufs);
|
||||
|
||||
if (aLength > 0)
|
||||
{
|
||||
@@ -753,7 +753,7 @@ void DatasetManager::SendSetResponse(const Coap::Header &aRequestHeader, const I
|
||||
Message *message;
|
||||
StateTlv state;
|
||||
|
||||
VerifyOrExit((message = mCoapServer.NewMessage(0)) != NULL, error = kThreadError_NoBufs);
|
||||
VerifyOrExit((message = mCoapServer.NewMeshCoPMessage(0)) != NULL, error = kThreadError_NoBufs);
|
||||
|
||||
responseHeader.SetDefaultResponseHeader(aRequestHeader);
|
||||
responseHeader.SetPayloadMarker();
|
||||
@@ -785,7 +785,7 @@ void DatasetManager::SendGetResponse(const Coap::Header &aRequestHeader, const I
|
||||
Message *message;
|
||||
uint8_t index;
|
||||
|
||||
VerifyOrExit((message = mCoapServer.NewMessage(0)) != NULL, error = kThreadError_NoBufs);
|
||||
VerifyOrExit((message = mCoapServer.NewMeshCoPMessage(0)) != NULL, error = kThreadError_NoBufs);
|
||||
|
||||
responseHeader.SetDefaultResponseHeader(aRequestHeader);
|
||||
responseHeader.SetPayloadMarker();
|
||||
|
||||
@@ -80,7 +80,7 @@ ThreadError EnergyScanClient::SendQuery(uint32_t aChannelMask, uint8_t aCount, u
|
||||
header.AppendUriPathOptions(OPENTHREAD_URI_ENERGY_SCAN);
|
||||
header.SetPayloadMarker();
|
||||
|
||||
VerifyOrExit((message = mCoapClient.NewMessage(header)) != NULL, error = kThreadError_NoBufs);
|
||||
VerifyOrExit((message = mCoapClient.NewMeshCoPMessage(header)) != NULL, error = kThreadError_NoBufs);
|
||||
|
||||
sessionId.Init();
|
||||
sessionId.SetCommissionerSessionId(mNetif.GetCommissioner().GetSessionId());
|
||||
|
||||
@@ -261,7 +261,7 @@ void Joiner::SendJoinerFinalize(void)
|
||||
header.AppendUriPathOptions(OPENTHREAD_URI_JOINER_FINALIZE);
|
||||
header.SetPayloadMarker();
|
||||
|
||||
VerifyOrExit((message = mSecureCoapClient.NewMessage(header)) != NULL, error = kThreadError_NoBufs);
|
||||
VerifyOrExit((message = mSecureCoapClient.NewMeshCoPMessage(header)) != NULL, error = kThreadError_NoBufs);
|
||||
|
||||
stateTlv.Init();
|
||||
stateTlv.SetState(MeshCoP::StateTlv::kAccept);
|
||||
@@ -430,7 +430,7 @@ void Joiner::SendJoinerEntrustResponse(const Coap::Header &aRequestHeader,
|
||||
|
||||
otLogFuncEntry();
|
||||
|
||||
VerifyOrExit((message = mCoapServer.NewMessage(0)) != NULL, error = kThreadError_NoBufs);
|
||||
VerifyOrExit((message = mCoapServer.NewMeshCoPMessage(0)) != NULL, error = kThreadError_NoBufs);
|
||||
message->SetSubType(Message::kSubTypeJoinerEntrust);
|
||||
|
||||
responseHeader.SetDefaultResponseHeader(aRequestHeader);
|
||||
|
||||
@@ -169,6 +169,7 @@ void JoinerRouter::HandleUdpReceive(Message &aMessage, const Ip6::MessageInfo &a
|
||||
SuccessOrExit(error = GetBorderAgentRloc(borderAgentRloc));
|
||||
|
||||
VerifyOrExit((message = mSocket.NewMessage(0)) != NULL, error = kThreadError_NoBufs);
|
||||
message->SetPriority(kMeshCoPMessagePriority);
|
||||
|
||||
header.Init(kCoapTypeNonConfirmable, kCoapRequestPost);
|
||||
header.SetMessageId(0);
|
||||
@@ -261,6 +262,7 @@ void JoinerRouter::HandleRelayTransmit(Coap::Header &aHeader, Message &aMessage,
|
||||
SuccessOrExit(error = Tlv::GetValueOffset(aMessage, Tlv::kJoinerDtlsEncapsulation, offset, length));
|
||||
|
||||
VerifyOrExit((message = mSocket.NewMessage(0)) != NULL, error = kThreadError_NoBufs);
|
||||
message->SetPriority(kMeshCoPMessagePriority);
|
||||
message->SetLinkSecurityEnabled(false);
|
||||
|
||||
while (length)
|
||||
@@ -327,7 +329,7 @@ ThreadError JoinerRouter::SendJoinerEntrust(const Ip6::MessageInfo &aMessageInfo
|
||||
header.AppendUriPathOptions(OPENTHREAD_URI_JOINER_ENTRUST);
|
||||
header.SetPayloadMarker();
|
||||
|
||||
VerifyOrExit((message = mCoapClient.NewMessage(header)) != NULL, error = kThreadError_NoBufs);
|
||||
VerifyOrExit((message = mCoapClient.NewMeshCoPMessage(header)) != NULL, error = kThreadError_NoBufs);
|
||||
message->SetSubType(Message::kSubTypeJoinerEntrust);
|
||||
|
||||
masterKey.Init();
|
||||
|
||||
@@ -39,6 +39,7 @@
|
||||
#include <coap/coap_header.hpp>
|
||||
#include <coap/coap_client.hpp>
|
||||
#include <coap/coap_server.hpp>
|
||||
#include <coap/coap_base.hpp>
|
||||
#include <common/message.hpp>
|
||||
#include <mac/mac_frame.hpp>
|
||||
#include <net/udp6.hpp>
|
||||
|
||||
@@ -113,7 +113,7 @@ ThreadError Leader::SendPetitionResponse(const Coap::Header &aRequestHeader, con
|
||||
CommissionerSessionIdTlv sessionId;
|
||||
Message *message;
|
||||
|
||||
VerifyOrExit((message = mCoapServer.NewMessage(0)) != NULL, error = kThreadError_NoBufs);
|
||||
VerifyOrExit((message = mCoapServer.NewMeshCoPMessage(0)) != NULL, error = kThreadError_NoBufs);
|
||||
|
||||
responseHeader.SetDefaultResponseHeader(aRequestHeader);
|
||||
responseHeader.SetPayloadMarker();
|
||||
@@ -203,7 +203,7 @@ ThreadError Leader::SendKeepAliveResponse(const Coap::Header &aRequestHeader, co
|
||||
StateTlv state;
|
||||
Message *message;
|
||||
|
||||
VerifyOrExit((message = mCoapServer.NewMessage(0)) != NULL, error = kThreadError_NoBufs);
|
||||
VerifyOrExit((message = mCoapServer.NewMeshCoPMessage(0)) != NULL, error = kThreadError_NoBufs);
|
||||
|
||||
responseHeader.SetDefaultResponseHeader(aRequestHeader);
|
||||
responseHeader.SetPayloadMarker();
|
||||
@@ -239,7 +239,7 @@ ThreadError Leader::SendDatasetChanged(const Ip6::Address &aAddress)
|
||||
header.SetToken(Coap::Header::kDefaultTokenLength);
|
||||
header.AppendUriPathOptions(OPENTHREAD_URI_DATASET_CHANGED);
|
||||
|
||||
VerifyOrExit((message = mCoapClient.NewMessage(header)) != NULL, error = kThreadError_NoBufs);
|
||||
VerifyOrExit((message = mCoapClient.NewMeshCoPMessage(header)) != NULL, error = kThreadError_NoBufs);
|
||||
|
||||
messageInfo.SetPeerAddr(aAddress);
|
||||
messageInfo.SetPeerPort(kCoapUdpPort);
|
||||
|
||||
@@ -73,7 +73,7 @@ ThreadError PanIdQueryClient::SendQuery(uint16_t aPanId, uint32_t aChannelMask,
|
||||
header.AppendUriPathOptions(OPENTHREAD_URI_PANID_QUERY);
|
||||
header.SetPayloadMarker();
|
||||
|
||||
VerifyOrExit((message = mCoapClient.NewMessage(header)) != NULL, error = kThreadError_NoBufs);
|
||||
VerifyOrExit((message = mCoapClient.NewMeshCoPMessage(header)) != NULL, error = kThreadError_NoBufs);
|
||||
|
||||
sessionId.Init();
|
||||
sessionId.SetCommissionerSessionId(mNetif.GetCommissioner().GetSessionId());
|
||||
|
||||
@@ -191,7 +191,7 @@ ThreadError EnergyScanServer::SendReport(void)
|
||||
header.AppendUriPathOptions(OPENTHREAD_URI_ENERGY_REPORT);
|
||||
header.SetPayloadMarker();
|
||||
|
||||
VerifyOrExit((message = mCoapClient.NewMessage(header)) != NULL, error = kThreadError_NoBufs);
|
||||
VerifyOrExit((message = mCoapClient.NewMeshCoPMessage(header)) != NULL, error = kThreadError_NoBufs);
|
||||
|
||||
channelMask.Init();
|
||||
channelMask.SetMask(mChannelMask);
|
||||
|
||||
@@ -301,7 +301,7 @@ void Leader::SendCommissioningGetResponse(const Coap::Header &aRequestHeader, co
|
||||
uint8_t *data = NULL;
|
||||
uint8_t length = 0;
|
||||
|
||||
VerifyOrExit((message = mCoapServer.NewMessage(0)) != NULL, error = kThreadError_NoBufs);
|
||||
VerifyOrExit((message = mCoapServer.NewMeshCoPMessage(0)) != NULL, error = kThreadError_NoBufs);
|
||||
|
||||
responseHeader.SetDefaultResponseHeader(aRequestHeader);
|
||||
responseHeader.SetPayloadMarker();
|
||||
@@ -363,7 +363,7 @@ void Leader::SendCommissioningSetResponse(const Coap::Header &aRequestHeader, co
|
||||
Message *message;
|
||||
MeshCoP::StateTlv state;
|
||||
|
||||
VerifyOrExit((message = mCoapServer.NewMessage(0)) != NULL, error = kThreadError_NoBufs);
|
||||
VerifyOrExit((message = mCoapServer.NewMeshCoPMessage(0)) != NULL, error = kThreadError_NoBufs);
|
||||
|
||||
responseHeader.SetDefaultResponseHeader(aRequestHeader);
|
||||
responseHeader.SetPayloadMarker();
|
||||
|
||||
@@ -131,7 +131,7 @@ ThreadError PanIdQueryServer::SendConflict(void)
|
||||
header.AppendUriPathOptions(OPENTHREAD_URI_PANID_CONFLICT);
|
||||
header.SetPayloadMarker();
|
||||
|
||||
VerifyOrExit((message = mCoapClient.NewMessage(header)) != NULL, error = kThreadError_NoBufs);
|
||||
VerifyOrExit((message = mCoapClient.NewMeshCoPMessage(header)) != NULL, error = kThreadError_NoBufs);
|
||||
|
||||
channelMask.Init();
|
||||
channelMask.SetMask(mChannelMask);
|
||||
|
||||
Reference in New Issue
Block a user