Remove peer when DTLS handshake failed
authorjs126.lee <js126.lee@samsung.com>
Tue, 5 Apr 2016 05:17:25 +0000 (14:17 +0900)
committerRandeep Singh <randeep.s@samsung.com>
Wed, 6 Apr 2016 11:07:06 +0000 (11:07 +0000)
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 <js126.lee@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/7597
Reviewed-by: Chul Lee <chuls.lee@samsung.com>
Reviewed-by: Kyungsun Cho <goodsun.cho@samsung.com>
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Randeep Singh <randeep.s@samsung.com>
extlibs/tinydtls/dtls.c
resource/csdk/connectivity/src/adapter_util/caadapternetdtls.c

index c201853..ee724d7 100644 (file)
@@ -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);
     }
   }
index f94007b..d64eea2 100644 (file)
@@ -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;