diff --git a/src/core/coap/coap_secure.cpp b/src/core/coap/coap_secure.cpp index 379b2d8cc..1c97af0ee 100644 --- a/src/core/coap/coap_secure.cpp +++ b/src/core/coap/coap_secure.cpp @@ -170,6 +170,7 @@ void CoapSecure::Receive(Message &aMessage, const Ip6::MessageInfo &aMessageInfo mPeerAddress.SetPeerAddr(aMessageInfo.GetPeerAddr()); mPeerAddress.SetPeerPort(aMessageInfo.GetPeerPort()); + mPeerAddress.SetInterfaceId(aMessageInfo.GetInterfaceId()); if (netif.IsUnicastAddress(aMessageInfo.GetSockAddr())) { @@ -178,7 +179,8 @@ void CoapSecure::Receive(Message &aMessage, const Ip6::MessageInfo &aMessageInfo mPeerAddress.SetSockPort(aMessageInfo.GetSockPort()); - netif.GetDtls().Start(false, HandleDtlsConnected, HandleDtlsReceive, HandleDtlsSend, this); + netif.GetDtls().Start(false, &CoapSecure::HandleDtlsConnected, + &CoapSecure::HandleDtlsReceive, CoapSecure::HandleDtlsSend, this); } else { diff --git a/src/core/meshcop/dtls.cpp b/src/core/meshcop/dtls.cpp index 4bd9d33a1..aee213281 100644 --- a/src/core/meshcop/dtls.cpp +++ b/src/core/meshcop/dtls.cpp @@ -68,7 +68,8 @@ Dtls::Dtls(ThreadNetif &aNetif): mSendHandler(NULL), mContext(NULL), mClient(false), - mMessageSubType(0) + mMessageSubType(Message::kSubTypeNone), + mMessageDefaultSubType(Message::kSubTypeNone) { memset(mPsk, 0, sizeof(mPsk)); memset(&mEntropy, 0, sizeof(mEntropy)); @@ -92,7 +93,7 @@ otError Dtls::Start(bool aClient, ConnectedHandler aConnectedHandler, ReceiveHan mContext = aContext; mClient = aClient; mReceiveMessage = NULL; - mMessageSubType = 0; + mMessageSubType = Message::kSubTypeNone; mbedtls_ssl_init(&mSsl); mbedtls_ssl_config_init(&mConf); @@ -209,7 +210,11 @@ otError Dtls::Send(Message &aMessage, uint16_t aLength) VerifyOrExit(aLength <= kApplicationDataMaxLength, error = OT_ERROR_NO_BUFS); // Store message specific sub type. - mMessageSubType = aMessage.GetSubType(); + if (aMessage.GetSubType() != Message::kSubTypeNone) + { + mMessageSubType = aMessage.GetSubType(); + } + aMessage.Read(0, aLength, buffer); SuccessOrExit(error = MapError(mbedtls_ssl_write(&mSsl, buffer, aLength))); @@ -246,7 +251,7 @@ int Dtls::HandleMbedtlsTransmit(const unsigned char *aBuf, size_t aLength) error = mSendHandler(mContext, aBuf, static_cast(aLength), mMessageSubType); // Restore default sub type. - mMessageSubType = 0; + mMessageSubType = mMessageDefaultSubType; switch (error) { diff --git a/src/core/meshcop/dtls.hpp b/src/core/meshcop/dtls.hpp index 0ec052ec9..06992d425 100644 --- a/src/core/meshcop/dtls.hpp +++ b/src/core/meshcop/dtls.hpp @@ -188,6 +188,15 @@ public: */ otError Receive(Message &aMessage, uint16_t aOffset, uint16_t aLength); + /** + * This method sets the default message sub-type that will be used for all messages without defined + * sub-type. + * + * @param[in] aMessageSubType The default message sub-type. + * + */ + void SetDefaultMessageSubType(uint8_t aMessageSubType) { mMessageDefaultSubType = aMessageSubType; } + /** * The provisioning URL is placed here so that both the Commissioner and Joiner can share the same object. * @@ -250,6 +259,7 @@ private: bool mClient; uint8_t mMessageSubType; + uint8_t mMessageDefaultSubType; }; } // namespace MeshCoP