diff --git a/src/core/meshcop/joiner.cpp b/src/core/meshcop/joiner.cpp index c5e546d0b..67d73287c 100644 --- a/src/core/meshcop/joiner.cpp +++ b/src/core/meshcop/joiner.cpp @@ -445,6 +445,9 @@ void Joiner::SendJoinerEntrustResponse(const Coap::Header &aRequestHeader, otLogInfoArp("Sent Joiner Entrust response"); + otLogInfoMeshCoP("Sent joiner entrust response length = %d", message->GetLength()); + otLogCertMeshCoP("[THCI] direction=send | type=JOIN_ENT.rsp"); + exit: if (error != kThreadError_None && message != NULL) diff --git a/src/core/meshcop/joiner_router.cpp b/src/core/meshcop/joiner_router.cpp index 228bdb1d7..d04564a82 100644 --- a/src/core/meshcop/joiner_router.cpp +++ b/src/core/meshcop/joiner_router.cpp @@ -397,7 +397,8 @@ ThreadError JoinerRouter::SendJoinerEntrust(const Ip6::MessageInfo &aMessageInfo messageInfo = aMessageInfo; messageInfo.SetPeerPort(kCoapUdpPort); - SuccessOrExit(error = mNetif.GetCoapClient().SendMessage(*message, messageInfo)); + SuccessOrExit(error = mNetif.GetCoapClient().SendMessage(*message, messageInfo, + &JoinerRouter::HandleJoinerEntrustResponse, this)); otLogInfoMeshCoP("Sent joiner entrust length = %d", message->GetLength()); otLogCertMeshCoP("[THCI] direction=send | type=JOIN_ENT.ntf"); @@ -413,5 +414,30 @@ exit: return error; } +void JoinerRouter::HandleJoinerEntrustResponse(void *aContext, otCoapHeader *aHeader, otMessage aMessage, + const otMessageInfo *aMessageInfo, ThreadError aResult) +{ + static_cast(aContext)->HandleJoinerEntrustResponse(static_cast(aHeader), + static_cast(aMessage), + static_cast(aMessageInfo), + aResult); +} + +void JoinerRouter::HandleJoinerEntrustResponse(Coap::Header *aHeader, Message *aMessage, + const Ip6::MessageInfo *aMessageInfo, ThreadError aResult) +{ + (void)aMessageInfo; + + VerifyOrExit(aResult == kThreadError_None && aHeader != NULL && aMessage != NULL, ;); + + VerifyOrExit(aHeader->GetCode() == kCoapResponseChanged, ;); + + otLogInfoMeshCoP("Receive joiner entrust response"); + otLogCertMeshCoP("[THCI] direction=recv | type=JOIN_ENT.rsp"); + +exit: + return ; +} + } // namespace Dtls } // namespace Thread diff --git a/src/core/meshcop/joiner_router_ftd.hpp b/src/core/meshcop/joiner_router_ftd.hpp index 17726c39e..e535c856f 100644 --- a/src/core/meshcop/joiner_router_ftd.hpp +++ b/src/core/meshcop/joiner_router_ftd.hpp @@ -90,6 +90,10 @@ private: const otMessageInfo *aMessageInfo); void HandleRelayTransmit(Coap::Header &aHeader, Message &aMessage, const Ip6::MessageInfo &aMessageInfo); + static void HandleJoinerEntrustResponse(void *aContext, otCoapHeader *aHeader, otMessage aMessage, + const otMessageInfo *aMessageInfo, ThreadError result); + void HandleJoinerEntrustResponse(Coap::Header *aHeader, Message *aMessage, + const Ip6::MessageInfo *aMessageInfo, ThreadError result); ThreadError SendJoinerEntrust(const Ip6::MessageInfo &aMessageInfo); ThreadError GetBorderAgentRloc(uint16_t &aRloc); diff --git a/tools/harness-thci/OpenThread.py b/tools/harness-thci/OpenThread.py index cdaaaac7e..f0d9d6d97 100644 --- a/tools/harness-thci/OpenThread.py +++ b/tools/harness-thci/OpenThread.py @@ -2033,7 +2033,8 @@ class OpenThread(IThci): elif "type" in infoType: EncryptedPacket.Type = PlatformDiagnosticPacket_Type.JOIN_FIN_req if 'JOIN_FIN.req' in infoValue \ else PlatformDiagnosticPacket_Type.JOIN_FIN_rsp if 'JOIN_FIN.rsp' in infoValue \ - else PlatformDiagnosticPacket_Type.JOIN_ENT_rsp if 'JOIN_ENT.ntf' in infoValue \ + else PlatformDiagnosticPacket_Type.JOIN_ENT_req if 'JOIN_ENT.ntf' in infoValue \ + else PlatformDiagnosticPacket_Type.JOIN_ENT_rsp if 'JOIN_ENT.rsp' in infoValue \ else PlatformDiagnosticPacket_Type.UNKNOWN elif "len" in infoType: EncryptedPacket.TLVsLength = int(infoValue)