Modify Consumer example & Logic to copy provider
[platform/upstream/iotivity.git] / service / notification / src / consumer / NSConsumerInternalTaskController.c
index 06742bf..a1718e6 100644 (file)
@@ -303,6 +303,14 @@ void NSConsumerHandleProviderDeleted(NSProvider_internal * provider)
     NS_VERIFY_NOT_NULL_V(ret == NS_OK ? (void *)1 : NULL);
 }
 
+void NSConsumerHandleSubscribeSucceed(NSProvider_internal * provider)
+{
+    NS_VERIFY_NOT_NULL_V(provider);
+
+    NSResult ret = NSProviderCacheUpdate(provider);
+    NS_VERIFY_NOT_NULL_V(ret == NS_OK ? (void *) 1 : NULL);
+}
+
 void NSConsumerHandleRecvProviderChanged(NSMessage * msg)
 {
     NS_VERIFY_NOT_NULL_V(msg);
@@ -314,7 +322,9 @@ void NSConsumerHandleRecvProviderChanged(NSMessage * msg)
     if (provider->connection->next == NULL && provider->accessPolicy == NS_SELECTION_CONSUMER)
     {
         NS_LOG(DEBUG, "call back to user");
-        NSProviderChanged((NSProvider *) provider, (NSResponse) msg->messageId);
+        NSProvider * prov = NSCopyProvider(provider);
+        NSProviderChanged(prov, (NSResponse) msg->messageId);
+        NSRemoveProvider_internal(provider);
     }
 }
 
@@ -389,11 +399,9 @@ void NSConsumerHandleRecvTopicLL(NSProvider_internal * provider)
     NSResult ret = NSProviderCacheUpdate(provider);
     NS_VERIFY_NOT_NULL_V(ret == NS_OK ? (void *) 1 : NULL);
 
-    if (provider->connection->next == NULL)
-    {
-        NS_LOG(DEBUG, "call back to user");
-        NSProviderChanged((NSProvider *) provider, (NSResponse) NS_TOPIC);
-    }
+    NS_LOG(DEBUG, "call back to user");
+    NSProvider * prov = NSCopyProvider(provider);
+    NSProviderChanged((NSProvider *) prov, (NSResponse) NS_TOPIC);
 }
 
 void NSConsumerInternalTaskProcessing(NSTask * task)
@@ -403,10 +411,15 @@ void NSConsumerInternalTaskProcessing(NSTask * task)
     NS_LOG_V(DEBUG, "Receive Event : %d", (int)task->taskType);
     switch (task->taskType)
     {
-        //case TASK_CONSUMER_RECV_SUBSCRIBE_CONFIRMED:
+        case TASK_CONSUMER_SENT_REQ_OBSERVE:
+        {
+            NS_LOG(DEBUG, "Receive Subscribe succeed from provider.");
+            NSConsumerHandleSubscribeSucceed((NSProvider_internal *)task->taskData);
+            NSRemoveProvider_internal((NSProvider_internal *)task->taskData);
+            break;
+        }
         case TASK_CONSUMER_RECV_PROVIDER_CHANGED:
         {
-            //NS_LOG(DEBUG, "Receive Subscribe confirm from provider.");
             NS_LOG(DEBUG, "Receive Provider Changed");
             NSConsumerHandleRecvProviderChanged((NSMessage *)task->taskData);
             NSRemoveMessage((NSMessage *)task->taskData);