Modify logic for subscribe callback and bug fixed.
authorjaesick.shin <jaesick.shin@samsung.com>
Mon, 19 Sep 2016 08:15:44 +0000 (17:15 +0900)
committerUze Choi <uzchoi@samsung.com>
Thu, 29 Sep 2016 10:35:52 +0000 (10:35 +0000)
this patch included,
1. modify logic for subscribe callback.
   call the user subscriberquestcallback function always.
2. bug fixed for NSProviderUnsetConsumerTopic.

Change-Id: Iad177bdf56cc7932ba1b95c157496d47ab6f9132
Signed-off-by: jaesick.shin <jaesick.shin@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/11923
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Uze Choi <uzchoi@samsung.com>
(cherry picked from commit e6cfc565ae20673e2cc71ca4c4ee05473b49ee77)
Reviewed-on: https://gerrit.iotivity.org/gerrit/12439

service/notification/examples/linux/notificationprovider.c
service/notification/src/provider/NSProviderInterface.c
service/notification/src/provider/NSProviderSubscription.c
service/notification/src/provider/NSProviderTopic.c

index 32c4f09..89a5a42 100644 (file)
@@ -305,7 +305,7 @@ int main()
                 break;
 
             case 10:
-                printf("NSProviderGetConsumerTopics\n");
+                printf("NSProviderGetTopics\n");
                 {
                     NSTopicLL * topics = NSProviderGetTopics();
                     printTopics(topics);
index 3c99457..bc59117 100644 (file)
@@ -235,9 +235,9 @@ NSResult NSAcceptSubscription(const char * consumerId, bool accepted)
     NS_LOG(DEBUG, "NSAccept - IN");
     pthread_mutex_lock(&nsInitMutex);
 
-    if(!consumerId)
+    if(!consumerId || consumerId[0] == '\0' || NSGetPolicy() == NS_POLICY_CONSUMER)
     {
-        NS_LOG(ERROR, "consumerId is NULL");
+        NS_LOG(ERROR, "consumerId is NULL or NS Policy is Consumer");
         pthread_mutex_unlock(&nsInitMutex);
         return NS_FAIL;
     }
index 375a05e..3f703f3 100644 (file)
@@ -165,16 +165,16 @@ void NSHandleSubscription(OCEntityHandlerRequest *entityHandlerRequest, NSResour
         }\r
 \r
         bool currPolicy = NSGetPolicy();\r
+        NSAskAcceptanceToUser(entityHandlerRequest);\r
 \r
         if (currPolicy == NS_POLICY_PROVIDER)\r
         {\r
             NS_LOG(DEBUG, "NSGetSubscriptionAccepter == NS_ACCEPTER_PROVIDER");\r
-            NSAskAcceptanceToUser(entityHandlerRequest);\r
         }\r
         else if (currPolicy == NS_POLICY_CONSUMER)\r
         {\r
             NS_LOG(DEBUG, "NSGetSubscriptionAccepter == NS_ACCEPTER_CONSUMER");\r
-            NSSendConsumerSubResponse(entityHandlerRequest);\r
+            NSSendConsumerSubResponse(NSCopyOCEntityHandlerRequest(entityHandlerRequest));\r
         }\r
     }\r
     else if (resourceType == NS_RESOURCE_SYNC)\r
index 6ba5094..07743cf 100644 (file)
@@ -198,13 +198,12 @@ NSResult NSSendTopicUpdationToConsumer(char *consumerId)
 \r
     NSCacheSubData * subData = (NSCacheSubData*) element->data;\r
 \r
-    if (OCNotifyListOfObservers(rHandle, (OCObservationId*)&subData->messageObId, 1, payload, OC_HIGH_QOS)\r
-            != OC_STACK_OK)\r
+    if (OCNotifyListOfObservers(rHandle, (OCObservationId*)&subData->messageObId, 1, payload,\r
+            OC_HIGH_QOS) != OC_STACK_OK)\r
     {\r
         NS_LOG(ERROR, "fail to send topic updation");\r
         OCRepPayloadDestroy(payload);\r
         return NS_ERROR;\r
-\r
     }\r
 \r
     OCRepPayloadDestroy(payload);\r
@@ -342,7 +341,7 @@ NSResult NSPostConsumerTopics(OCEntityHandlerRequest * entityHandlerRequest)
     payloadValue = NSPayloadFindValue(payload, NS_ATTRIBUTE_TOPIC_LIST);\r
     size_t dimensionSize = calcDimTotal(payloadValue->arr.dimensions);\r
     size_t dimensions[3] = {dimensionSize, 0, 0};\r
-    OCRepPayloadGetPropObjectArray(payload, NS_ATTRIBUTE_TOPIC_LIST, & topicListPayload, dimensions);\r
+    OCRepPayloadGetPropObjectArray(payload, NS_ATTRIBUTE_TOPIC_LIST, &topicListPayload, dimensions);\r
 \r
     for(int i = 0; i <(int)dimensionSize; i++)\r
     {\r
@@ -399,6 +398,7 @@ void * NSTopicSchedule(void * ptr)
                     NSFreeOCEntityHandlerRequest((OCEntityHandlerRequest*) node->taskData);\r
                     break;\r
                 case TASK_SUBSCRIBE_TOPIC:\r
+                {\r
                     NS_LOG(DEBUG, "CASE TASK_SUBSCRIBE_TOPIC : ");\r
                     NSCacheElement * newObj = (NSCacheElement *) OICMalloc(sizeof(NSCacheElement));\r
                     newObj->data = node->taskData;\r
@@ -406,12 +406,18 @@ void * NSTopicSchedule(void * ptr)
                     NSStorageWrite(consumerTopicList, newObj);\r
                     NSCacheTopicSubData * topicSubData = (NSCacheTopicSubData *) node->taskData;\r
                     NSSendTopicUpdationToConsumer(topicSubData->id);\r
+                }\r
                     break;\r
                 case TASK_UNSUBSCRIBE_TOPIC:\r
+                {\r
                     NS_LOG(DEBUG, "CASE TASK_SUBSCRIBE_TOPIC : ");\r
                     NSProviderDeleteConsumerTopic(consumerTopicList,\r
                             (NSCacheTopicSubData *) node->taskData);\r
-                    NS_LOG(DEBUG, "CASE TASK_SUBSCRIBE_TOPIC AFter: ");\r
+                    NSCacheTopicSubData * topicSubData = (NSCacheTopicSubData *) node->taskData;\r
+                    NSSendTopicUpdationToConsumer(topicSubData->id);\r
+                    OICFree(topicSubData->topicName);\r
+                    OICFree(topicSubData);\r
+                }\r
                     break;\r
                 case TASK_ADD_TOPIC:\r
                 {\r