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:
Shu Chen
2017-01-16 20:19:33 -08:00
committed by Jonathan Hui
parent 866bf3fb3a
commit 344a6829c9
16 changed files with 91 additions and 29 deletions
+12
View File
@@ -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;
+15
View File
@@ -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.
*
+12
View File
@@ -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);
+25 -5
View File
@@ -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);
/**
+1 -1
View File
@@ -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());
+6 -6
View File
@@ -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);
+5 -5
View File
@@ -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();
+1 -1
View File
@@ -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());
+2 -2
View File
@@ -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);
+3 -1
View File
@@ -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();
+1
View File
@@ -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>
+3 -3
View File
@@ -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);
+1 -1
View File
@@ -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());
+1 -1
View File
@@ -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);
+2 -2
View File
@@ -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();
+1 -1
View File
@@ -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);