[dtls] introduce default sub-type and ensure InterfaceId is correctly set (#2233)

This commit is contained in:
Łukasz Duda
2017-09-30 08:32:08 -07:00
committed by Jonathan Hui
parent a837af7f6a
commit fe1c162e42
3 changed files with 22 additions and 5 deletions
+3 -1
View File
@@ -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
{
+9 -4
View File
@@ -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<uint16_t>(aLength), mMessageSubType);
// Restore default sub type.
mMessageSubType = 0;
mMessageSubType = mMessageDefaultSubType;
switch (error)
{
+10
View File
@@ -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