From 0a2fb7053b159213cd1d288f87f89ba822cba1fe Mon Sep 17 00:00:00 2001 From: Vitalii Irkha Date: Fri, 8 Nov 2019 17:52:54 +0200 Subject: [PATCH] Added notification callback on reset SVR DB Created API's for notifing when SVR DB is reset https://github.sec.samsung.net/RS7-IOTIVITY/IoTivity/pull/599/commits/93a9f532a2da7526cbede4f77f27c727480ec270 (cherry-picked from 93a9f532a2da7526cbede4f77f27c727480ec270) Change-Id: Ib4ac7d36f2232dce6ce0f6a1ecb64d9d2e153cf7 Signed-off-by: Vitalii Irkha Signed-off-by: Sudipto Bal --- .../csdk/security/include/internal/psinterface.h | 6 ++++ .../provisioning/include/ocprovisioningmanager.h | 13 ++++++++ .../provisioning/src/ocprovisioningmanager.c | 38 ++++++++++++++++++++++ resource/csdk/security/src/psinterface.c | 8 +++++ resource/csdk/stack/include/octypes.h | 15 +++++++++ 5 files changed, 80 insertions(+) diff --git a/resource/csdk/security/include/internal/psinterface.h b/resource/csdk/security/include/internal/psinterface.h index ae228bf..73bc90e 100644 --- a/resource/csdk/security/include/internal/psinterface.h +++ b/resource/csdk/security/include/internal/psinterface.h @@ -152,4 +152,10 @@ void DeinitPersistentStorageInterface(void); OCStackResult setSecurePSI(const unsigned char *key, const OCPersistentStorage *psPlain, const OCPersistentStorage *psEnc, const OCPersistentStorage *psRescue); +/** + * + * @return pointer on resetSVRDB structure for manipulating with callback + */ +resetSVRDBCB_t* const GetResetSVRDBCB(void); + #endif //IOTVT_SRM_PSI_H diff --git a/resource/csdk/security/provisioning/include/ocprovisioningmanager.h b/resource/csdk/security/provisioning/include/ocprovisioningmanager.h index 483afa2..b27d8ec 100644 --- a/resource/csdk/security/provisioning/include/ocprovisioningmanager.h +++ b/resource/csdk/security/provisioning/include/ocprovisioningmanager.h @@ -449,6 +449,19 @@ OCStackResult OCResetDevice(void *ctx, unsigned short waitTimeForOwnedDeviceDisc OCStackResult OCResetSVRDB(void); /** + * The function registers callback, for getting notification if SVR DB was reseted. + * + * @param[in] ResetSVRDBCB notifier callback function. + * @return OC_STACK_OK in case of success and other value otherwise. + */ +OCStackResult OCRegisterResetSVRDBNotifier(ResetSVRDBCB callback); + +/** + * The function unregisters ResetSVRDBCB notification callback. + */ +void OCUnregisterResetSVRDBNotifier(void); + +/** * This function configures SVR DB as self-ownership. * *@return OC_STACK_OK in case of successful configue and other value otherwise. diff --git a/resource/csdk/security/provisioning/src/ocprovisioningmanager.c b/resource/csdk/security/provisioning/src/ocprovisioningmanager.c index a46843f..7453a82 100644 --- a/resource/csdk/security/provisioning/src/ocprovisioningmanager.c +++ b/resource/csdk/security/provisioning/src/ocprovisioningmanager.c @@ -934,6 +934,44 @@ OCStackResult OCResetSVRDB(void) } /** + * This function to register callback, for getting notification if SVR DB was reseted. + * @param[in] ResetSVRDBCB notifier callback function. + * @return OC_STACK_OK in case of successful reset and other value otherwise. + */ + +OCStackResult OCRegisterResetSVRDBNotifier(ResetSVRDBCB callback) +{ + OIC_LOG_V(INFO, TAG, "IN %s", __func__); + + if(NULL != GetResetSVRDBCB()->callback) + { + OIC_LOG_V(ERROR, TAG,"%s Can't register notifier callback, unregister previous one!" ,__func__); + return OC_STACK_ERROR; + } + + GetResetSVRDBCB()->callback = callback; + + OIC_LOG_V(INFO, TAG, "Out %s", __func__); + return OC_STACK_OK; +} + + +/** + * This function to unregister ResetSVRDBCB notification callback. + */ +void OCUnregisterResetSVRDBNotifier(void) +{ + OIC_LOG_V(INFO, TAG, "IN %s", __func__); + + if(NULL != GetResetSVRDBCB()->callback) + { + GetResetSVRDBCB()->callback = NULL; + } + + OIC_LOG_V(INFO, TAG, "Out %s", __func__); +} + +/** * This function configures SVR DB as self-ownership. * *@return OC_STACK_OK in case of successful configue and other value otherwise. diff --git a/resource/csdk/security/src/psinterface.c b/resource/csdk/security/src/psinterface.c index baba287..029592f 100644 --- a/resource/csdk/security/src/psinterface.c +++ b/resource/csdk/security/src/psinterface.c @@ -59,6 +59,12 @@ static oc_mutex g_mutexDb = NULL; // Persistent Storage status static PSStatus_t g_psStatus = PS_NO_EXTERNAL_DB_SET; +static resetSVRDBCB_t g_resetSVRDBCB = {0}; + +resetSVRDBCB_t* const GetResetSVRDBCB(void) +{ + return &g_resetSVRDBCB; +} /** * Update the Persistent Storage Database size. */ @@ -1058,6 +1064,8 @@ exit: OICFree(pstatCbor); OICFree(doxmCbor); OICFree(resetPfCbor); + + g_resetSVRDBCB.callback(ret); return ret; } diff --git a/resource/csdk/stack/include/octypes.h b/resource/csdk/stack/include/octypes.h index 8187b88..128470c 100644 --- a/resource/csdk/stack/include/octypes.h +++ b/resource/csdk/stack/include/octypes.h @@ -1772,6 +1772,21 @@ typedef enum typedef void (*OCOtmEventHandler)(void *ctx, const char *addr, uint16_t port, const char *ownerId, OCOtmEvent_t event); +/** + * Callback function for notification SVR DB was reseted. + * + * @param[in] result of OCResetSVRDB API call + */ +typedef void (*ResetSVRDBCB)(OCStackResult result); + +/** + * resetSVRDBCB structure. + */ +typedef struct resetSVRDBCB +{ + ResetSVRDBCB callback; +} resetSVRDBCB_t; + #ifdef __cplusplus } #endif // __cplusplus -- 2.7.4