From de3c710ed46d7c3b1b766ea957d0db253038b426 Mon Sep 17 00:00:00 2001 From: "js126.lee" Date: Tue, 5 Apr 2016 14:17:25 +0900 Subject: [PATCH] Remove peer when DTLS handshake failed Issue: Once failed to DTLS Handshake between A and B in abnormal case, it is unable to establish dtls session between both. Relate jira : IOTSEC-824 Patch 1 : Init Patch 2,3 : Refesh dtls.c file Change-Id: I1be5717580d7fa254af562c672d187653ff81f11 Signed-off-by: js126.lee Reviewed-on: https://gerrit.iotivity.org/gerrit/7597 Reviewed-by: Chul Lee Reviewed-by: Kyungsun Cho Tested-by: jenkins-iotivity Reviewed-by: Randeep Singh --- extlibs/tinydtls/dtls.c | 8 ++++++++ resource/csdk/connectivity/src/adapter_util/caadapternetdtls.c | 5 +++++ 2 files changed, 13 insertions(+) diff --git a/extlibs/tinydtls/dtls.c b/extlibs/tinydtls/dtls.c index c201853..ee724d7 100644 --- a/extlibs/tinydtls/dtls.c +++ b/extlibs/tinydtls/dtls.c @@ -4395,6 +4395,14 @@ static int dtls_alert_send_from_err(dtls_context_t *ctx, dtls_peer_t *peer, } if (peer) { peer->state = DTLS_STATE_CLOSING; +#ifndef WITH_CONTIKI + HASH_DEL_PEER(ctx->peers, peer); +#else /* WITH_CONTIKI */ + list_remove(ctx->peers, peer); +#endif + (void)CALL(ctx, event, &peer->session, + DTLS_ALERT_LEVEL_FATAL, DTLS_ALERT_HANDSHAKE_FAILURE); + return dtls_send_alert(ctx, peer, DTLS_ALERT_LEVEL_FATAL, DTLS_ALERT_INTERNAL_ERROR); } } diff --git a/resource/csdk/connectivity/src/adapter_util/caadapternetdtls.c b/resource/csdk/connectivity/src/adapter_util/caadapternetdtls.c index f94007b..d64eea2 100644 --- a/resource/csdk/connectivity/src/adapter_util/caadapternetdtls.c +++ b/resource/csdk/connectivity/src/adapter_util/caadapternetdtls.c @@ -554,6 +554,11 @@ static int32_t CAHandleSecureEvent(dtls_context_t *context, OIC_LOG(INFO, NET_DTLS_TAG, "Peer closing connection"); CARemovePeerFromPeerInfoList(peerAddr, port); } + else if(DTLS_ALERT_LEVEL_FATAL == level && DTLS_ALERT_HANDSHAKE_FAILURE == code) + { + OIC_LOG(INFO, NET_DTLS_TAG, "Failed to DTLS handshake, the peer will be removed."); + CARemovePeerFromPeerInfoList(peerAddr, port); + } OIC_LOG(DEBUG, NET_DTLS_TAG, "OUT"); return 0; -- 2.7.4