From 0b17d26695ba54b3e6969a9cc5fe77ba6c496d16 Mon Sep 17 00:00:00 2001
From: Oleksii Beketov
Date: Thu, 14 Feb 2019 17:52:31 +0200
Subject: [PATCH] [IOT-3260] SSL close callback
Added callback to return peer's UUID
on SSL connection closure
Change-Id: Ib31250c639b9c2633e1459f0d555424ca429fb26
Signed-off-by: Oleksii Beketov
---
.../csdk/connectivity/inc/ca_adapter_net_ssl.h | 16 ++++++++++++++++
.../src/adapter_util/ca_adapter_net_ssl.c | 15 ++++++++++++++-
.../csdk/connectivity/test/ssladapter_test.cpp | 1 +
3 files changed, 31 insertions(+), 1 deletion(-)
diff --git a/resource/csdk/connectivity/inc/ca_adapter_net_ssl.h b/resource/csdk/connectivity/inc/ca_adapter_net_ssl.h
index 85fc1997c2..5d90c72217 100644
--- a/resource/csdk/connectivity/inc/ca_adapter_net_ssl.h
+++ b/resource/csdk/connectivity/inc/ca_adapter_net_ssl.h
@@ -83,6 +83,22 @@ void CAsetCredentialTypesCallback(CAgetCredentialTypesHandler credTypesCallback)
*/
void CAsetSslCredentialsCallback(CAgetPskCredentialsHandler credCallback);
+/**
+ * Callback to return peer's UUID on SSL session closure
+ *
+ * @param[out] uuid peer's UUID
+ * @param[out] uuidLen peer's UUID length
+ *
+ * @return CA_STATUS_OK or CA_STATUS_FAIL
+ */
+typedef CAResult_t (*CAcloseSslConnectionCallback)(const unsigned char *uuid, size_t uuidLen);
+
+/**
+ * Register callback that returns peer's UUID on SSL session closure
+ * @param[in] cb callback to return peer's UUID on SSL session closure
+ */
+void CAsetCloseSslConnectionCallback(CAcloseSslConnectionCallback cb);
+
/**
* Close the TLS session
*
diff --git a/resource/csdk/connectivity/src/adapter_util/ca_adapter_net_ssl.c b/resource/csdk/connectivity/src/adapter_util/ca_adapter_net_ssl.c
index 3661cbfc24..5651f1d895 100644
--- a/resource/csdk/connectivity/src/adapter_util/ca_adapter_net_ssl.c
+++ b/resource/csdk/connectivity/src/adapter_util/ca_adapter_net_ssl.c
@@ -418,6 +418,12 @@ static CAgetPkixInfoHandler g_getPkixInfoCallback = NULL;
* @brief callback to retrieve acceptable UUID list
*/
static CAgetIdentityHandler g_getIdentityCallback = NULL;
+/**
+ * @var g_closeSslConnectionCallback
+ *
+ * @brief callback to retrieve UUID on SSL connection closure
+ */
+static CAcloseSslConnectionCallback g_closeSslConnectionCallback = NULL;
/**
* @var g_dtlsContextMutex
@@ -504,6 +510,13 @@ void CAsetPeerCNVerifyCallback(PeerCNVerifyCallback cb)
OIC_LOG_V(DEBUG, NET_SSL_TAG, "OUT %s", __func__);
}
+void CAsetCloseSslConnectionCallback(CAcloseSslConnectionCallback closeSslCallback)
+{
+ OIC_LOG_V(DEBUG, NET_SSL_TAG, "In %s", __func__);
+ g_closeSslConnectionCallback = closeSslCallback;
+ OIC_LOG_V(DEBUG, NET_SSL_TAG, "Out %s", __func__);
+}
+
/**
* Sets SSL result for callback.
*
@@ -1274,7 +1287,7 @@ CAResult_t CAcloseSslConnection(const CAEndpoint_t *endpoint)
ret = mbedtls_ssl_close_notify(&tep->ssl);
}
while (MBEDTLS_ERR_SSL_WANT_WRITE == ret);
-
+ g_closeSslConnectionCallback(tep->sep.identity.id, tep->sep.identity.id_length);
RemovePeerFromList(&tep->sep.endpoint);
oc_mutex_unlock(g_sslContextMutex);
diff --git a/resource/csdk/connectivity/test/ssladapter_test.cpp b/resource/csdk/connectivity/test/ssladapter_test.cpp
index 2c09541ac0..029574ee41 100644
--- a/resource/csdk/connectivity/test/ssladapter_test.cpp
+++ b/resource/csdk/connectivity/test/ssladapter_test.cpp
@@ -49,6 +49,7 @@
#define SetCASecureEndpointAttribute SetCASecureEndpointAttributeTest
#define GetCASecureEndpointAttributes GetCASecureEndpointAttributesTest
#define CAsetPeerCNVerifyCallback CAsetPeerCNVerifyCallbackTest
+#define CAsetCloseSslConnectionCallback CAsetCloseSslConnectionCallbackTest
#include "../src/adapter_util/ca_adapter_net_ssl.c"
--
GitLab