[IOT-3094] Cloud deregister does not work properly 97/25897/5
authorVitalii Irkha <v.irkha@samsung.com>
Thu, 21 Jun 2018 10:58:29 +0000 (13:58 +0300)
committerAleksey Volkov <a.volkov@samsung.com>
Mon, 25 Jun 2018 10:31:27 +0000 (10:31 +0000)
Refactoring SignOut Cloud API

Change-Id: If26baa6a2e994184cc829919fb1a5f0303d78f31
Signed-off-by: Vitalii Irkha <v.irkha@samsung.com>
resource/csdk/security/provisioning/include/cloud/auth.h
resource/csdk/security/provisioning/include/cloud/cloudresource.h
resource/csdk/security/provisioning/sample/sampleserver_justworks.cpp
resource/csdk/security/provisioning/src/cloud/auth.c
resource/csdk/security/provisioning/src/cloud/cloudresource.c

index 613551a..ba44149 100644 (file)
@@ -125,6 +125,12 @@ OCStackResult OCCloudSignOut(OicCloud_t *cloud);
  */
 OicCloud_t *FreeCloud(OicCloud_t *cloud);
 
+/**
+ * Stop update session
+ * @param[in] cloud
+ */
+void StopCloudRefresh(OicCloud_t *cloud);
+
 /**
  * Cloud to CBOR
  *
index 7c750a8..1f7970f 100644 (file)
@@ -58,7 +58,7 @@ bool UpdateCloudPersistentStorage();
 /**
 * SignOut & release clouds
 */
-void StopClouds();
+void CloudsSignOut();
 
 /**
 * Release cloud entries
index c82a39f..c761246 100644 (file)
@@ -502,7 +502,7 @@ int main(void)
 #if defined(__WITH_TLS__) && defined(WITH_CLOUD)
             if (111 == key)//o
             {
-                StopClouds();
+                CloudsSignOut();
             }
             else if( 100 == key)//d
             {
index e84b4a6..a3d1b7c 100644 (file)
@@ -98,28 +98,8 @@ OicCloud_t *FreeCloud(OicCloud_t *cloud)
         OIC_LOG_V(WARNING, TAG, "%s:Cloud is null", __func__);
         return NULL;
     }
-    OIC_LOG_V(DEBUG, TAG, "%s: cloud (%s) state: %s", __func__, cloud->cis, GetCloudStatus(cloud));
-    cloud->stat = OC_CLOUD_EXIT;
-
-    if (cloud->pid)
-    {
-        OIC_LOG_V(DEBUG, TAG, "oc_thread_waiting for cloud %s/%s", cloud->cis, cloud->apn);
-        OCThreadResult_t res = oc_thread_wait(cloud->pid);
-
-        if (OC_THREAD_SUCCESS != res)
-        {
-            OIC_LOG_V(ERROR, TAG, "oc_thread_wait failed - error %u", res);
-        }
-
-        res = oc_thread_free(cloud->pid);
-        cloud->pid = NULL;
 
-        if (OC_THREAD_SUCCESS != res)
-        {
-            OIC_LOG_V(ERROR, TAG, "oc_thread_free failed - error %u", res);
-        }
-        OIC_LOG_V(DEBUG, TAG, "thread for cloud %s/%s is stopped", cloud->cis, cloud->apn);
-    }
+    StopCloudRefresh(cloud);
 
     OicCloud_t *ret = cloud->next;
     cloud->next = NULL;
@@ -839,6 +819,38 @@ exit:
     return NULL;
 }
 
+void StopCloudRefresh(OicCloud_t *cloud)
+{
+    if (!cloud)
+    {
+        OIC_LOG_V(WARNING, TAG, "%s:Cloud is null", __func__);
+        return;
+    }
+
+    OIC_LOG_V(DEBUG, TAG, "%s: cloud (%s) state: %s", __func__, cloud->cis, GetCloudStatus(cloud));
+    cloud->stat = OC_CLOUD_EXIT;
+
+    if (cloud->pid)
+    {
+        OIC_LOG_V(DEBUG, TAG, "oc_thread_waiting for cloud %s/%s", cloud->cis, cloud->apn);
+        OCThreadResult_t res = oc_thread_wait(cloud->pid);
+
+        if (OC_THREAD_SUCCESS != res)
+        {
+            OIC_LOG_V(ERROR, TAG, "oc_thread_wait failed - error %u", res);
+        }
+
+        res = oc_thread_free(cloud->pid);
+        cloud->pid = NULL;
+
+        if (OC_THREAD_SUCCESS != res)
+        {
+            OIC_LOG_V(ERROR, TAG, "oc_thread_free failed - error %u", res);
+        }
+        OIC_LOG_V(DEBUG, TAG, "thread for cloud %s/%s is stopped", cloud->cis, cloud->apn);
+    }
+}
+
 /**
  * Sign In request to cloud handle
  *
index ced509a..c35935c 100644 (file)
@@ -93,10 +93,27 @@ static void DeleteCloudList(OicCloud_t *clouds, bool signout)
     OIC_LOG_V(DEBUG, TAG, "%s: OUT", __func__);
 }
 
-void StopClouds()
+void CloudsSignOut()
 {
-    DeleteCloudList(gCloud, true);
-    gCloud = NULL;
+    OIC_LOG_V(DEBUG, TAG, "%s: IN", __func__);
+
+    if (!gCloud)
+    {
+        OIC_LOG_V(WARNING, TAG, "%s: cloud is NULL", __func__);
+        return;
+    }
+
+    OicCloud_t *p1 = NULL, *p2 = NULL;
+    oc_mutex_lock(gCloudMutex);
+    LL_FOREACH_SAFE(gCloud, p1, p2)
+    {
+        OCCloudSignOut(p1);
+        StopCloudRefresh(p1);
+        p1 = NULL;
+    }
+    oc_mutex_unlock(gCloudMutex);
+
+    OIC_LOG_V(DEBUG, TAG, "%s: OUT", __func__);
 }
 
 void ResetClouds()