BLE_API

Revision:
1062:a3fd424b73ca
Parent:
1057:93a9679d655c
Child:
1063:187f9929cb60
--- a/ble/SecurityManager.h	Mon Jan 11 08:51:36 2016 +0000
+++ b/ble/SecurityManager.h	Mon Jan 11 08:51:37 2016 +0000
@@ -232,6 +232,53 @@
     }
 
 protected:
+    /**
+     * Clear all SecurityManager state of the associated object.
+     *
+     * This function is meant to be overridden in the platform-specific
+     * sub-class. Nevertheless, the sub-class is only expected to clean up its
+     * state and not the data held in SecurityManager members. This shall be
+     * achieved by a call to SecurityManager::cleanup() from the sub-class'
+     * cleanup() implementation.
+     *
+     * @return BLE_ERROR_NONE on success.
+     */
+    virtual ble_error_t cleanup(void) {
+        securitySetupInitiatedCallback = NULL;
+        securitySetupCompletedCallback = NULL;
+        linkSecuredCallback = NULL;
+        securityContextStoredCallback = NULL;
+        passkeyDisplayCallback = NULL;
+
+        return BLE_ERROR_NONE;
+    }
+
+public:
+    /**
+     * Clear all SecurityManager state of the object pointed to by
+     * securityManagerInstance.
+     *
+     * This function is meant to be called by the overridden BLE::shutdown()
+     * in the platform-specific sub-class.
+     *
+     * @return BLE_ERROR_NONE on success.
+     *
+     * @note: If securityManagerInstance is NULL then it is assumed that Gap has
+     * not been instantiated and a call to SecurityManager::shutdown() will
+     * succeed.
+     */
+    static ble_error_t shutdown(void) {
+        if (securityManagerInstance) {
+            return securityManagerInstance->cleanup();
+        }
+        return BLE_ERROR_NONE;
+    }
+
+protected:
+    static SecurityManager *securityManagerInstance;    /**< Pointer to the SecurityManager object instance.
+                                                         *   If NULL, then SecurityManager has not been initialized. */
+
+protected:
     SecuritySetupInitiatedCallback_t securitySetupInitiatedCallback;
     SecuritySetupCompletedCallback_t securitySetupCompletedCallback;
     LinkSecuredCallback_t            linkSecuredCallback;