From: js126.lee Date: Tue, 5 Apr 2016 05:17:25 +0000 (+0900) Subject: Remove peer when DTLS handshake failed X-Git-Tag: 1.2.0+RC1~355^2^2~24 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=de3c710ed46d7c3b1b766ea957d0db253038b426;p=platform%2Fupstream%2Fiotivity.git 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 --- 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;