From: Vitalii Irkha Date: Fri, 8 Nov 2019 15:52:54 +0000 (+0200) Subject: Added notification callback on reset SVR DB X-Git-Tag: submit/tizen/20191119.000236~4 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0a2fb7053b159213cd1d288f87f89ba822cba1fe;p=platform%2Fupstream%2Fiotivity.git 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 --- diff --git a/resource/csdk/security/include/internal/psinterface.h b/resource/csdk/security/include/internal/psinterface.h index ae228bf03..73bc90e83 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 483afa236..b27d8ecd1 100644 --- a/resource/csdk/security/provisioning/include/ocprovisioningmanager.h +++ b/resource/csdk/security/provisioning/include/ocprovisioningmanager.h @@ -448,6 +448,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. * diff --git a/resource/csdk/security/provisioning/src/ocprovisioningmanager.c b/resource/csdk/security/provisioning/src/ocprovisioningmanager.c index a46843fff..7453a8238 100644 --- a/resource/csdk/security/provisioning/src/ocprovisioningmanager.c +++ b/resource/csdk/security/provisioning/src/ocprovisioningmanager.c @@ -933,6 +933,44 @@ OCStackResult OCResetSVRDB(void) return ResetSecureResourceInPS(); } +/** + * 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. * diff --git a/resource/csdk/security/src/psinterface.c b/resource/csdk/security/src/psinterface.c index baba2872c..029592f30 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 8187b884f..128470cf6 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