diff --git a/src/core/Makefile.am b/src/core/Makefile.am index 44509dc83..a5cff11bf 100644 --- a/src/core/Makefile.am +++ b/src/core/Makefile.am @@ -299,6 +299,7 @@ noinst_HEADERS = \ meshcop/leader.hpp \ meshcop/leader_ftd.hpp \ meshcop/leader_mtd.hpp \ + meshcop/meshcop.hpp \ meshcop/panid_query_client.hpp \ meshcop/timestamp.hpp \ meshcop/tlvs.hpp \ diff --git a/src/core/coap/coap_base.cpp b/src/core/coap/coap_base.cpp index aea4e6d9e..472395689 100644 --- a/src/core/coap/coap_base.cpp +++ b/src/core/coap/coap_base.cpp @@ -37,7 +37,7 @@ namespace Thread { namespace Coap { -Message *CoapBase::NewMessage(const Header &aHeader) +Message *CoapBase::NewMessage(const Header &aHeader, uint8_t aPriority) { Message *message = NULL; @@ -47,18 +47,7 @@ Message *CoapBase::NewMessage(const Header &aHeader) VerifyOrExit((message = mSocket.NewMessage(aHeader.GetLength())) != NULL); message->Prepend(aHeader.GetBytes(), aHeader.GetLength()); message->SetOffset(0); - -exit: - return message; -} - -Message *CoapBase::NewMeshCoPMessage(const Header &aHeader) -{ - Message *message = NULL; - - VerifyOrExit((message = NewMessage(aHeader)) != NULL); - - message->SetPriority(kMeshCoPMessagePriority); + message->SetPriority(aPriority); exit: return message; diff --git a/src/core/coap/coap_base.hpp b/src/core/coap/coap_base.hpp index 85cf813aa..bc7940073 100644 --- a/src/core/coap/coap_base.hpp +++ b/src/core/coap/coap_base.hpp @@ -77,12 +77,6 @@ enum kNonLifetime = kMaxTransmitSpan + kMaxLatency }; - -enum -{ - kMeshCoPMessagePriority = Message::kPriorityHigh, // The priority for MeshCoP message -}; - /** * This class implements a common code base for CoAP client/server. * @@ -127,22 +121,13 @@ public: /** * This method creates a new message with a CoAP header. * - * @param[in] aHeader A reference to a CoAP header that is used to create the message. + * @param[in] aHeader A reference to a CoAP header that is used to create the message. + * @param[in] aPrority The message priority level. * * @returns A pointer to the message or NULL if failed to allocate message. * */ - 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); + Message *NewMessage(const Header &aHeader, uint8_t aPriority = kDefaultCoapMessagePriority); /** * This method returns a port number used by CoAP client. @@ -191,7 +176,6 @@ protected: ReceiverFunction mReceiver; private: - /** * This method sends a CoAP empty message, i.e. a header-only message with code equals kCoapCodeEmpty. * @@ -207,6 +191,11 @@ private: ThreadError SendEmptyMessage(Header::Type aType, const Header &aRequestHeader, const Ip6::MessageInfo &aMessageInfo); + enum + { + kDefaultCoapMessagePriority = Message::kPriorityLow, + }; + static void HandleUdpReceive(void *aContext, otMessage *aMessage, const otMessageInfo *aMessageInfo); }; diff --git a/src/core/coap/coap_server.cpp b/src/core/coap/coap_server.cpp index f63558647..f7aa53847 100644 --- a/src/core/coap/coap_server.cpp +++ b/src/core/coap/coap_server.cpp @@ -99,23 +99,6 @@ exit: aResource.mNext = NULL; } -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) { mResponsesQueue.EnqueueResponse(aMessage, aMessageInfo); diff --git a/src/core/coap/coap_server.hpp b/src/core/coap/coap_server.hpp index 6fd25030b..40501ee2c 100644 --- a/src/core/coap/coap_server.hpp +++ b/src/core/coap/coap_server.hpp @@ -334,46 +334,6 @@ public: */ void RemoveResource(Resource &aResource); - /** - * This method returns a new UDP 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 message or NULL if no buffers are available. - * - */ - 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. - * - * @param[in] aHeader A reference to a CoAP header that is used to create the message. - * - * @returns A pointer to the message or NULL if failed to allocate message. - * - */ - Message *NewMessage(const Header &aHeader) { return CoapBase::NewMessage(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) { return CoapBase::NewMeshCoPMessage(aHeader); }; - /** * This method sends a CoAP response from the server. * diff --git a/src/core/meshcop/announce_begin_client.cpp b/src/core/meshcop/announce_begin_client.cpp index 48eda3a61..f1c8c33e7 100644 --- a/src/core/meshcop/announce_begin_client.cpp +++ b/src/core/meshcop/announce_begin_client.cpp @@ -46,6 +46,7 @@ #include #include #include +#include #include #include #include @@ -81,7 +82,8 @@ ThreadError AnnounceBeginClient::SendRequest(uint32_t aChannelMask, uint8_t aCou header.AppendUriPathOptions(OPENTHREAD_URI_ANNOUNCE_BEGIN); header.SetPayloadMarker(); - VerifyOrExit((message = mNetif.GetCoapClient().NewMeshCoPMessage(header)) != NULL, error = kThreadError_NoBufs); + VerifyOrExit((message = MeshCoP::NewMeshCoPMessage(mNetif.GetCoapClient(), header)) != NULL, + error = kThreadError_NoBufs); sessionId.Init(); sessionId.SetCommissionerSessionId(mNetif.GetCommissioner().GetSessionId()); diff --git a/src/core/meshcop/commissioner.cpp b/src/core/meshcop/commissioner.cpp index d5be2c5bb..861ad4d39 100644 --- a/src/core/meshcop/commissioner.cpp +++ b/src/core/meshcop/commissioner.cpp @@ -51,6 +51,7 @@ #include #include #include +#include #include #include #include @@ -424,7 +425,8 @@ ThreadError Commissioner::SendMgmtCommissionerGetRequest(const uint8_t *aTlvs, header.SetPayloadMarker(); } - VerifyOrExit((message = mNetif.GetCoapClient().NewMeshCoPMessage(header)) != NULL, error = kThreadError_NoBufs); + VerifyOrExit((message = NewMeshCoPMessage(mNetif.GetCoapClient(), header)) != NULL, + error = kThreadError_NoBufs); if (aLength > 0) { @@ -490,7 +492,8 @@ ThreadError Commissioner::SendMgmtCommissionerSetRequest(const otCommissioningDa header.AppendUriPathOptions(OPENTHREAD_URI_COMMISSIONER_SET); header.SetPayloadMarker(); - VerifyOrExit((message = mNetif.GetCoapClient().NewMeshCoPMessage(header)) != NULL, error = kThreadError_NoBufs); + VerifyOrExit((message = NewMeshCoPMessage(mNetif.GetCoapClient(), header)) != NULL, + error = kThreadError_NoBufs); if (aDataset.mIsLocatorSet) { @@ -594,7 +597,9 @@ ThreadError Commissioner::SendPetition(void) header.AppendUriPathOptions(OPENTHREAD_URI_LEADER_PETITION); header.SetPayloadMarker(); - VerifyOrExit((message = mNetif.GetCoapClient().NewMeshCoPMessage(header)) != NULL, error = kThreadError_NoBufs); + VerifyOrExit((message = NewMeshCoPMessage(mNetif.GetCoapClient(), header)) != NULL, + error = kThreadError_NoBufs); + commissionerId.Init(); commissionerId.SetCommissionerId("OpenThread Commissioner"); @@ -695,7 +700,8 @@ ThreadError Commissioner::SendKeepAlive(void) header.AppendUriPathOptions(OPENTHREAD_URI_LEADER_KEEP_ALIVE); header.SetPayloadMarker(); - VerifyOrExit((message = mNetif.GetCoapClient().NewMeshCoPMessage(header)) != NULL, error = kThreadError_NoBufs); + VerifyOrExit((message = NewMeshCoPMessage(mNetif.GetCoapClient(), header)) != NULL, + error = kThreadError_NoBufs); state.Init(); state.SetState(mState == kCommissionerStateActive ? StateTlv::kAccept : StateTlv::kReject); @@ -935,7 +941,7 @@ void Commissioner::SendJoinFinalizeResponse(const Coap::Header &aRequestHeader, responseHeader.SetDefaultResponseHeader(aRequestHeader); responseHeader.SetPayloadMarker(); - VerifyOrExit((message = mNetif.GetSecureCoapServer().NewMeshCoPMessage(responseHeader)) != NULL, + VerifyOrExit((message = NewMeshCoPMessage(mNetif.GetSecureCoapServer(), responseHeader)) != NULL, error = kThreadError_NoBufs); message->SetSubType(Message::kSubTypeJoinerFinalizeResponse); @@ -998,7 +1004,8 @@ ThreadError Commissioner::SendRelayTransmit(Message &aMessage, const Ip6::Messag header.AppendUriPathOptions(OPENTHREAD_URI_RELAY_TX); header.SetPayloadMarker(); - VerifyOrExit((message = mNetif.GetCoapClient().NewMeshCoPMessage(header)) != NULL, error = kThreadError_NoBufs); + VerifyOrExit((message = NewMeshCoPMessage(mNetif.GetCoapClient(), header)) != NULL, + error = kThreadError_NoBufs); udpPort.Init(); udpPort.SetUdpPort(mJoinerPort); diff --git a/src/core/meshcop/dataset_manager.cpp b/src/core/meshcop/dataset_manager.cpp index 8eae46426..6b3099e33 100644 --- a/src/core/meshcop/dataset_manager.cpp +++ b/src/core/meshcop/dataset_manager.cpp @@ -48,6 +48,7 @@ #include #include #include +#include #include #include #include @@ -294,7 +295,8 @@ ThreadError DatasetManager::Register(void) pending->UpdateDelayTimer(); } - VerifyOrExit((message = mNetif.GetCoapClient().NewMeshCoPMessage(header)) != NULL, error = kThreadError_NoBufs); + VerifyOrExit((message = NewMeshCoPMessage(mNetif.GetCoapClient(), header)) != NULL, + error = kThreadError_NoBufs); SuccessOrExit(error = message->Append(mLocal.GetBytes(), mLocal.GetSize())); @@ -580,7 +582,8 @@ ThreadError DatasetManager::SendSetRequest(const otOperationalDataset &aDataset, header.AppendUriPathOptions(mUriSet); header.SetPayloadMarker(); - VerifyOrExit((message = mNetif.GetCoapClient().NewMeshCoPMessage(header)) != NULL, error = kThreadError_NoBufs); + VerifyOrExit((message = NewMeshCoPMessage(mNetif.GetCoapClient(), header)) != NULL, + error = kThreadError_NoBufs); #if OPENTHREAD_ENABLE_COMMISSIONER bool isCommissioner; @@ -745,7 +748,9 @@ ThreadError DatasetManager::SendGetRequest(const uint8_t *aTlvTypes, const uint8 header.SetPayloadMarker(); } - VerifyOrExit((message = mNetif.GetCoapClient().NewMeshCoPMessage(header)) != NULL, error = kThreadError_NoBufs); + VerifyOrExit((message = NewMeshCoPMessage(mNetif.GetCoapClient(), header)) != NULL, + error = kThreadError_NoBufs); + if (aLength > 0) { @@ -787,12 +792,11 @@ void DatasetManager::SendSetResponse(const Coap::Header &aRequestHeader, const I Message *message; StateTlv state; - VerifyOrExit((message = mNetif.GetCoapServer().NewMeshCoPMessage(0)) != NULL, error = kThreadError_NoBufs); - responseHeader.SetDefaultResponseHeader(aRequestHeader); responseHeader.SetPayloadMarker(); - SuccessOrExit(error = message->Append(responseHeader.GetBytes(), responseHeader.GetLength())); + VerifyOrExit((message = NewMeshCoPMessage(mNetif.GetCoapServer(), responseHeader)) != NULL, + error = kThreadError_NoBufs); state.Init(); state.SetState(aState); @@ -819,12 +823,12 @@ void DatasetManager::SendGetResponse(const Coap::Header &aRequestHeader, const I Message *message; uint8_t index; - VerifyOrExit((message = mNetif.GetCoapServer().NewMeshCoPMessage(0)) != NULL, error = kThreadError_NoBufs); responseHeader.SetDefaultResponseHeader(aRequestHeader); responseHeader.SetPayloadMarker(); - SuccessOrExit(error = message->Append(responseHeader.GetBytes(), responseHeader.GetLength())); + VerifyOrExit((message = NewMeshCoPMessage(mNetif.GetCoapServer(), responseHeader)) != NULL, + error = kThreadError_NoBufs); if (aLength == 0) { diff --git a/src/core/meshcop/energy_scan_client.cpp b/src/core/meshcop/energy_scan_client.cpp index df9ecdf63..8a76aadc1 100644 --- a/src/core/meshcop/energy_scan_client.cpp +++ b/src/core/meshcop/energy_scan_client.cpp @@ -41,6 +41,7 @@ #include #include #include +#include #include #include #include @@ -84,7 +85,8 @@ ThreadError EnergyScanClient::SendQuery(uint32_t aChannelMask, uint8_t aCount, u header.AppendUriPathOptions(OPENTHREAD_URI_ENERGY_SCAN); header.SetPayloadMarker(); - VerifyOrExit((message = mNetif.GetCoapClient().NewMeshCoPMessage(header)) != NULL, error = kThreadError_NoBufs); + VerifyOrExit((message = MeshCoP::NewMeshCoPMessage(mNetif.GetCoapClient(), header)) != NULL, + error = kThreadError_NoBufs); sessionId.Init(); sessionId.SetCommissionerSessionId(mNetif.GetCommissioner().GetSessionId()); diff --git a/src/core/meshcop/joiner.cpp b/src/core/meshcop/joiner.cpp index 65a57177c..e4897a15b 100644 --- a/src/core/meshcop/joiner.cpp +++ b/src/core/meshcop/joiner.cpp @@ -51,6 +51,7 @@ #include #include #include +#include #include #include @@ -272,7 +273,7 @@ void Joiner::SendJoinerFinalize(void) header.AppendUriPathOptions(OPENTHREAD_URI_JOINER_FINALIZE); header.SetPayloadMarker(); - VerifyOrExit((message = mNetif.GetSecureCoapClient().NewMeshCoPMessage(header)) != NULL, + VerifyOrExit((message = NewMeshCoPMessage(mNetif.GetSecureCoapClient(), header)) != NULL, error = kThreadError_NoBufs); stateTlv.Init(); @@ -449,12 +450,11 @@ void Joiner::SendJoinerEntrustResponse(const Coap::Header &aRequestHeader, otLogFuncEntry(); - VerifyOrExit((message = mNetif.GetCoapServer().NewMeshCoPMessage(0)) != NULL, error = kThreadError_NoBufs); - message->SetSubType(Message::kSubTypeJoinerEntrust); - responseHeader.SetDefaultResponseHeader(aRequestHeader); - SuccessOrExit(error = message->Append(responseHeader.GetBytes(), responseHeader.GetLength())); + VerifyOrExit((message = NewMeshCoPMessage(mNetif.GetCoapServer(), responseHeader)) != NULL, + error = kThreadError_NoBufs); + message->SetSubType(Message::kSubTypeJoinerEntrust); memset(&responseInfo.mSockAddr, 0, sizeof(responseInfo.mSockAddr)); SuccessOrExit(error = mNetif.GetCoapServer().SendMessage(*message, responseInfo)); diff --git a/src/core/meshcop/joiner_router.cpp b/src/core/meshcop/joiner_router.cpp index 5408e8e01..01dcb3297 100644 --- a/src/core/meshcop/joiner_router.cpp +++ b/src/core/meshcop/joiner_router.cpp @@ -45,6 +45,7 @@ #include #include #include +#include #include #include #include @@ -179,7 +180,8 @@ void JoinerRouter::HandleUdpReceive(Message &aMessage, const Ip6::MessageInfo &a header.AppendUriPathOptions(OPENTHREAD_URI_RELAY_RX); header.SetPayloadMarker(); - VerifyOrExit((message = mNetif.GetCoapClient().NewMeshCoPMessage(header)) != NULL, error = kThreadError_NoBufs); + VerifyOrExit((message = NewMeshCoPMessage(mNetif.GetCoapClient(), header)) != NULL, + error = kThreadError_NoBufs); udpPort.Init(); udpPort.SetUdpPort(aMessageInfo.GetPeerPort()); @@ -265,7 +267,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(Coap::kMeshCoPMessagePriority); + message->SetPriority(kMeshCoPMessagePriority); message->SetLinkSecurityEnabled(false); while (length) @@ -336,7 +338,8 @@ ThreadError JoinerRouter::DelaySendingJoinerEntrust(const Ip6::MessageInfo &aMes header.AppendUriPathOptions(OPENTHREAD_URI_JOINER_ENTRUST); header.SetPayloadMarker(); - VerifyOrExit((message = mNetif.GetCoapClient().NewMeshCoPMessage(header)) != NULL, error = kThreadError_NoBufs); + VerifyOrExit((message = NewMeshCoPMessage(mNetif.GetCoapClient(), header)) != NULL, + error = kThreadError_NoBufs); message->SetSubType(Message::kSubTypeJoinerEntrust); masterKey.Init(); diff --git a/src/core/meshcop/leader.cpp b/src/core/meshcop/leader.cpp index 3764e5e19..4c8cb1a95 100644 --- a/src/core/meshcop/leader.cpp +++ b/src/core/meshcop/leader.cpp @@ -41,6 +41,7 @@ #include #include #include +#include #include #include #include @@ -118,12 +119,11 @@ ThreadError Leader::SendPetitionResponse(const Coap::Header &aRequestHeader, con CommissionerSessionIdTlv sessionId; Message *message; - VerifyOrExit((message = mNetif.GetCoapServer().NewMeshCoPMessage(0)) != NULL, error = kThreadError_NoBufs); - responseHeader.SetDefaultResponseHeader(aRequestHeader); responseHeader.SetPayloadMarker(); - SuccessOrExit(error = message->Append(responseHeader.GetBytes(), responseHeader.GetLength())); + VerifyOrExit((message = NewMeshCoPMessage(mNetif.GetCoapServer(), responseHeader)) != NULL, + error = kThreadError_NoBufs); state.Init(); state.SetState(aState); @@ -208,12 +208,12 @@ ThreadError Leader::SendKeepAliveResponse(const Coap::Header &aRequestHeader, co StateTlv state; Message *message; - VerifyOrExit((message = mNetif.GetCoapServer().NewMeshCoPMessage(0)) != NULL, error = kThreadError_NoBufs); responseHeader.SetDefaultResponseHeader(aRequestHeader); responseHeader.SetPayloadMarker(); - SuccessOrExit(error = message->Append(responseHeader.GetBytes(), responseHeader.GetLength())); + VerifyOrExit((message = NewMeshCoPMessage(mNetif.GetCoapServer(), responseHeader)) != NULL, + error = kThreadError_NoBufs); state.Init(); state.SetState(aState); @@ -244,7 +244,8 @@ ThreadError Leader::SendDatasetChanged(const Ip6::Address &aAddress) header.SetToken(Coap::Header::kDefaultTokenLength); header.AppendUriPathOptions(OPENTHREAD_URI_DATASET_CHANGED); - VerifyOrExit((message = mNetif.GetCoapClient().NewMeshCoPMessage(header)) != NULL, error = kThreadError_NoBufs); + VerifyOrExit((message = NewMeshCoPMessage(mNetif.GetCoapClient(), header)) != NULL, + error = kThreadError_NoBufs); messageInfo.SetPeerAddr(aAddress); messageInfo.SetPeerPort(kCoapUdpPort); diff --git a/src/core/meshcop/meshcop.hpp b/src/core/meshcop/meshcop.hpp new file mode 100644 index 000000000..4023f1b64 --- /dev/null +++ b/src/core/meshcop/meshcop.hpp @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2016, The OpenThread Authors. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file + * This file includes definitions for MeshCoP. + * + */ + +#ifndef MESHCOP_HPP_ +#define MESHCOP_HPP_ + +#include +#include + +namespace Thread { +namespace MeshCoP { + +enum +{ + kMeshCoPMessagePriority = Message::kPriorityHigh, // The priority for MeshCoP message +}; + +/** + * This function create Message for MeshCoP + * + */ +inline Message* NewMeshCoPMessage(Coap::CoapBase &aCoapBase, const Coap::Header &aHeader) +{ + return aCoapBase.NewMessage(aHeader, kMeshCoPMessagePriority); +} + + +} // namespace MeshCoP + +} // namespace Thread + +#endif // MESHCOP_HPP_ diff --git a/src/core/meshcop/panid_query_client.cpp b/src/core/meshcop/panid_query_client.cpp index 96082107d..1b0c770ca 100644 --- a/src/core/meshcop/panid_query_client.cpp +++ b/src/core/meshcop/panid_query_client.cpp @@ -40,6 +40,7 @@ #include #include #include +#include #include #include #include @@ -77,7 +78,8 @@ ThreadError PanIdQueryClient::SendQuery(uint16_t aPanId, uint32_t aChannelMask, header.AppendUriPathOptions(OPENTHREAD_URI_PANID_QUERY); header.SetPayloadMarker(); - VerifyOrExit((message = mNetif.GetCoapClient().NewMeshCoPMessage(header)) != NULL, error = kThreadError_NoBufs); + VerifyOrExit((message = MeshCoP::NewMeshCoPMessage(mNetif.GetCoapClient(), header)) != NULL, + error = kThreadError_NoBufs); sessionId.Init(); sessionId.SetCommissionerSessionId(mNetif.GetCommissioner().GetSessionId()); diff --git a/src/core/thread/energy_scan_server.cpp b/src/core/thread/energy_scan_server.cpp index 64faef2e0..33d2af019 100644 --- a/src/core/thread/energy_scan_server.cpp +++ b/src/core/thread/energy_scan_server.cpp @@ -39,6 +39,7 @@ #include #include #include +#include #include #include #include @@ -195,7 +196,8 @@ ThreadError EnergyScanServer::SendReport(void) header.AppendUriPathOptions(OPENTHREAD_URI_ENERGY_REPORT); header.SetPayloadMarker(); - VerifyOrExit((message = mNetif.GetCoapClient().NewMeshCoPMessage(header)) != NULL, error = kThreadError_NoBufs); + VerifyOrExit((message = MeshCoP::NewMeshCoPMessage(mNetif.GetCoapClient(), header)) != NULL, + error = kThreadError_NoBufs); channelMask.Init(); channelMask.SetMask(mChannelMask); diff --git a/src/core/thread/mle_router.cpp b/src/core/thread/mle_router.cpp index db7b8cce7..72e41dca2 100644 --- a/src/core/thread/mle_router.cpp +++ b/src/core/thread/mle_router.cpp @@ -3945,12 +3945,10 @@ void MleRouter::SendAddressSolicitResponse(const Coap::Header &aRequestHeader, u ThreadRloc16Tlv rlocTlv; Message *message; - VerifyOrExit((message = mNetif.GetCoapServer().NewMessage(0)) != NULL, error = kThreadError_NoBufs); - responseHeader.SetDefaultResponseHeader(aRequestHeader); responseHeader.SetPayloadMarker(); - SuccessOrExit(error = message->Append(responseHeader.GetBytes(), responseHeader.GetLength())); + VerifyOrExit((message = mNetif.GetCoapServer().NewMessage(responseHeader)) != NULL, error = kThreadError_NoBufs); statusTlv.Init(); statusTlv.SetStatus(!IsRouterIdValid(aRouterId) ? statusTlv.kNoAddressAvailable : statusTlv.kSuccess); diff --git a/src/core/thread/network_data_leader_ftd.cpp b/src/core/thread/network_data_leader_ftd.cpp index 64241d2a6..77934f45e 100644 --- a/src/core/thread/network_data_leader_ftd.cpp +++ b/src/core/thread/network_data_leader_ftd.cpp @@ -43,6 +43,7 @@ #include #include #include +#include #include #include #include @@ -311,12 +312,11 @@ void Leader::SendCommissioningGetResponse(const Coap::Header &aRequestHeader, co uint8_t *data = NULL; uint8_t length = 0; - VerifyOrExit((message = mNetif.GetCoapServer().NewMeshCoPMessage(0)) != NULL, error = kThreadError_NoBufs); - responseHeader.SetDefaultResponseHeader(aRequestHeader); responseHeader.SetPayloadMarker(); - SuccessOrExit(error = message->Append(responseHeader.GetBytes(), responseHeader.GetLength())); + VerifyOrExit((message = MeshCoP::NewMeshCoPMessage(mNetif.GetCoapServer(), responseHeader)) != NULL, + error = kThreadError_NoBufs); for (NetworkDataTlv *cur = reinterpret_cast(mTlvs); cur < reinterpret_cast(mTlvs + mLength); @@ -379,12 +379,11 @@ void Leader::SendCommissioningSetResponse(const Coap::Header &aRequestHeader, co Message *message; MeshCoP::StateTlv state; - VerifyOrExit((message = mNetif.GetCoapServer().NewMeshCoPMessage(0)) != NULL, error = kThreadError_NoBufs); - responseHeader.SetDefaultResponseHeader(aRequestHeader); responseHeader.SetPayloadMarker(); - SuccessOrExit(error = message->Append(responseHeader.GetBytes(), responseHeader.GetLength())); + VerifyOrExit((message = MeshCoP::NewMeshCoPMessage(mNetif.GetCoapServer(), responseHeader)) != NULL, + error = kThreadError_NoBufs); state.Init(); state.SetState(aState); diff --git a/src/core/thread/network_diagnostic.cpp b/src/core/thread/network_diagnostic.cpp index 8f604384e..3a30c2598 100644 --- a/src/core/thread/network_diagnostic.cpp +++ b/src/core/thread/network_diagnostic.cpp @@ -514,12 +514,10 @@ void NetworkDiagnostic::HandleDiagnosticGetRequest(Coap::Header &aHeader, Messag VerifyOrExit((static_cast(&networkDiagnosticTlv)->IsValid()), error = kThreadError_Drop); - VerifyOrExit((message = mNetif.GetCoapServer().NewMessage(0)) != NULL, error = kThreadError_NoBufs); - header.SetDefaultResponseHeader(aHeader); header.SetPayloadMarker(); - SuccessOrExit(error = message->Append(header.GetBytes(), header.GetLength())); + VerifyOrExit((message = mNetif.GetCoapServer().NewMessage(header)) != NULL, error = kThreadError_NoBufs); SuccessOrExit(error = FillRequestedTlvs(aMessage, *message, networkDiagnosticTlv)); diff --git a/src/core/thread/panid_query_server.cpp b/src/core/thread/panid_query_server.cpp index 00e4103db..5c69c5dc1 100644 --- a/src/core/thread/panid_query_server.cpp +++ b/src/core/thread/panid_query_server.cpp @@ -39,6 +39,7 @@ #include #include #include +#include #include #include #include @@ -135,7 +136,8 @@ ThreadError PanIdQueryServer::SendConflict(void) header.AppendUriPathOptions(OPENTHREAD_URI_PANID_CONFLICT); header.SetPayloadMarker(); - VerifyOrExit((message = mNetif.GetCoapClient().NewMeshCoPMessage(header)) != NULL, error = kThreadError_NoBufs); + VerifyOrExit((message = MeshCoP::NewMeshCoPMessage(mNetif.GetCoapClient(), header)) != NULL, + error = kThreadError_NoBufs); channelMask.Init(); channelMask.SetMask(mChannelMask);