Fix for patchset 15853
authorDmitriy Zhuravlev <d.zhuravlev@samsung.com>
Fri, 30 Dec 2016 07:28:14 +0000 (09:28 +0200)
committerRandeep Singh <randeep.s@samsung.com>
Fri, 20 Jan 2017 10:30:54 +0000 (10:30 +0000)
Fixed OTM error caused by patchset 15853.
Added close notify alert sending to DeletePeerList()

Change-Id: Ib5363f8d16358a388df0f003e9111f1d56ccca62
Signed-off-by: Oleksii Beketov <ol.beketov@samsung.com>
Signed-off-by: Dmitriy Zhuravlev <d.zhuravlev@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/16001
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Chul Lee <chuls.lee@samsung.com>
Reviewed-by: Jongsung Lee <js126.lee@samsung.com>
Reviewed-by: Randeep Singh <randeep.s@samsung.com>
(cherry picked from commit 085d7a8af264f8731ee11014f711d9f39b678376)
Reviewed-on: https://gerrit.iotivity.org/gerrit/16413
Tested-by: jenkins-iotivity <jenkins@iotivity.org>
resource/csdk/connectivity/src/adapter_util/ca_adapter_net_ssl.c

index c618736..425db6c 100644 (file)
@@ -214,7 +214,7 @@ if (g_sslCallback)
  * @param[in] msg allert message
  */
 #define SSL_CHECK_FAIL(peer, ret, str, mutex, error, msg)                                          \
-if (MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY != (int) (ret) &&                                            \
+if (0 != (ret) && MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY != (int) (ret) &&                              \
     MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED != (int) (ret) &&                                        \
     MBEDTLS_ERR_SSL_WANT_READ != (int) (ret) &&                                                    \
     MBEDTLS_ERR_SSL_WANT_WRITE != (int) (ret) &&                                                   \
@@ -974,6 +974,15 @@ static void DeletePeerList()
         {
             continue;
         }
+        if (MBEDTLS_SSL_HANDSHAKE_OVER == tep->ssl.state)
+        {
+            int ret = 0;
+            do
+            {
+                ret = mbedtls_ssl_close_notify(&tep->ssl);
+            }
+            while (MBEDTLS_ERR_SSL_WANT_WRITE == ret);
+        }
         DeleteSslEndPoint(tep);
     }
     u_arraylist_free(&g_caSslContext->peerList);
@@ -1861,7 +1870,6 @@ CAResult_t CAdecryptSsl(const CASecureEndpoint_t *sep, uint8_t *data, uint32_t d
              MBEDTLS_SSL_ALERT_MSG_CLOSE_NOTIFY == peer->ssl.in_msg[1]))
         {
             OIC_LOG(INFO, NET_SSL_TAG, "Connection was closed gracefully");
-            SSL_CLOSE_NOTIFY(peer, ret);
             RemovePeerFromList(&peer->sep.endpoint);
             oc_mutex_unlock(g_sslContextMutex);
             return CA_STATUS_OK;