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