diff --git a/resource/csdk/connectivity/inc/ca_adapter_net_ssl.h b/resource/csdk/connectivity/inc/ca_adapter_net_ssl.h index 85fc1997c2742ff7a8366db3abdce9e9a8ce92fa..5d90c722174e0d9d91fb61c99b392348864a19cc 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 3661cbfc2420ecd69806ca4998b47e78eea9022b..5651f1d895475665ae1bd6024ad18aa20e329a11 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 2c09541ac0939af2bdbce2deab2491ea61cdbe8c..029574ee4171c3ee4347d79c3a648268c60f8325 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"