Modify for Related Topic.
authorjaesick.shin <jaesick.shin@samsung.com>
Fri, 19 Aug 2016 04:22:17 +0000 (13:22 +0900)
committerUze Choi <uzchoi@samsung.com>
Fri, 19 Aug 2016 11:23:11 +0000 (11:23 +0000)
this patch included
1. bug fixes for invalid type and mutex unlock logic.
2. Add NSProviderDeleteConsumerTopic Function. This function is called when you deselect topic.
3. delete NSIsTopicSubscribed function. This function is not required.

Change-Id: I2629418f441ad0efaaee864b22150424158fa43c
Signed-off-by: jaesick.shin <jaesick.shin@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/10645
Reviewed-by: Chihyun Cho <ch79.cho@samsung.com>
Reviewed-by: Uze Choi <uzchoi@samsung.com>
Tested-by: Uze Choi <uzchoi@samsung.com>
service/notification/src/provider/NSProviderInterface.c
service/notification/src/provider/NSProviderMemoryCache.c
service/notification/src/provider/NSProviderMemoryCache.h
service/notification/src/provider/NSProviderNotification.c
service/notification/src/provider/NSProviderNotification.h
service/notification/src/provider/NSProviderSubscription.c
service/notification/src/provider/NSProviderTopic.c

index e969238..cec5178 100644 (file)
@@ -324,7 +324,7 @@ NSResult NSProviderSelectTopic(char *consumerId, char *topicName)
     NSCacheTopicSubData * topicSubData =\r
             (NSCacheTopicSubData *) OICMalloc(sizeof(NSCacheTopicSubData));\r
 \r
-    OICStrcpy(topicSubData->id, consumerId, NS_UUID_STRING_SIZE);\r
+    OICStrcpy(topicSubData->id, NS_UUID_STRING_SIZE, consumerId);\r
     topicSubData->topicName = OICStrdup(topicName);\r
 \r
     NSPushQueue(TOPIC_SCHEDULER, TASK_SUBSCRIBE_TOPIC, (void *)topicSubData);\r
@@ -346,7 +346,13 @@ NSResult NSProviderUnselectTopic(char *consumerId, char *topicName)
         return NS_FAIL;\r
     }\r
 \r
-    NSPushQueue(TOPIC_SCHEDULER, TASK_UNSUBSCRIBE_TOPIC, topicName);\r
+    NSCacheTopicSubData * topicSubData =\r
+            (NSCacheTopicSubData *) OICMalloc(sizeof(NSCacheTopicSubData));\r
+\r
+    OICStrcpy(topicSubData->id, NS_UUID_STRING_SIZE, consumerId);\r
+    topicSubData->topicName = OICStrdup(topicName);\r
+\r
+    NSPushQueue(TOPIC_SCHEDULER, TASK_UNSUBSCRIBE_TOPIC, (void *)topicSubData);\r
 \r
     pthread_mutex_unlock(&nsInitMutex);\r
     NS_LOG(DEBUG, "NSProviderUnselectTopics - OUT");\r
index 5d209ba..a28aca8 100644 (file)
@@ -221,7 +221,6 @@ NSResult NSStorageWrite(NSCacheList * list, NSCacheElement * newObj)
             return NS_FAIL;\r
         }\r
     }\r
-\r
     else if(type == NS_PROVIDER_CACHE_CONSUMER_TOPIC_CID)\r
     {\r
         NS_LOG(DEBUG, "Type is REGITSTER TOPIC");\r
@@ -237,7 +236,6 @@ NSResult NSStorageWrite(NSCacheList * list, NSCacheElement * newObj)
         }\r
     }\r
 \r
-\r
     if (list->head == NULL)\r
     {\r
         NS_LOG(DEBUG, "list->head is NULL, Insert First Data");\r
@@ -635,8 +633,8 @@ bool NSProviderIsTopicSubScribed(NSCacheElement * conTopicList, char * cId, char
 \r
     if(!conTopicList || !cId || !topicName)\r
     {\r
-        return false;\r
         pthread_mutex_unlock(&NSCacheMutex);\r
+        return false;\r
     }\r
 \r
     NSCacheElement * iter = conTopicList;\r
@@ -655,3 +653,77 @@ bool NSProviderIsTopicSubScribed(NSCacheElement * conTopicList, char * cId, char
     pthread_mutex_unlock(&NSCacheMutex);\r
     return false;\r
 }\r
+\r
+NSResult NSProviderDeleteConsumerTopic(NSCacheList * conTopicList,\r
+        NSCacheTopicSubData * topicSubData)\r
+{\r
+    pthread_mutex_lock(&NSCacheMutex);\r
+\r
+    char * cId = topicSubData->id;\r
+    char * topicName = topicSubData->topicName;\r
+\r
+    if(!conTopicList || !cId || !topicName)\r
+    {\r
+        return NS_ERROR;\r
+        pthread_mutex_unlock(&NSCacheMutex);\r
+    }\r
+\r
+    NSCacheElement * prev = conTopicList->head;\r
+    NSCacheElement * del = conTopicList->head;\r
+\r
+    NSCacheType type = conTopicList->cacheType;\r
+\r
+    if(!del)\r
+    {\r
+        NS_LOG(DEBUG, "list head is NULL");\r
+        return NS_FAIL;\r
+    }\r
+\r
+    NSCacheTopicSubData * curr = (NSCacheTopicSubData *) del->data;\r
+    NS_LOG_V(DEBUG, "compareid = %s", cId);\r
+    NS_LOG_V(DEBUG, "comparetopicName = %s", topicName);\r
+    NS_LOG_V(DEBUG, "curr->id = %s", curr->id);\r
+    NS_LOG_V(DEBUG, "curr->topicName = %s", curr->topicName);\r
+\r
+    if( (strncmp(curr->id, cId, NS_UUID_STRING_SIZE) == 0) && (strcmp(curr->topicName, topicName) == 0) )\r
+    {\r
+        if (del == conTopicList->head) // first object\r
+        {\r
+            if (del == conTopicList->tail) // first object (one object)\r
+            {\r
+                conTopicList->tail = del->next;\r
+            }\r
+\r
+            conTopicList->head = del->next;\r
+            NSProviderDeleteCacheData(type, del->data);\r
+            OICFree(del);\r
+            pthread_mutex_unlock(&NSCacheMutex);\r
+            return NS_OK;\r
+        }\r
+    }\r
+\r
+    curr = NULL;\r
+    del = del->next;\r
+    while (del)\r
+    {\r
+        curr = (NSCacheTopicSubData *) del->data;\r
+        if( (strncmp(curr->id, cId, NS_UUID_STRING_SIZE) == 0) && (strcmp(curr->topicName, topicName) == 0) )\r
+        {\r
+            if (del == conTopicList->tail) // delete object same to last object\r
+            {\r
+                conTopicList->tail = prev;\r
+            }\r
+\r
+            prev->next = del->next;\r
+            NSProviderDeleteCacheData(type, del->data);\r
+            OICFree(del);\r
+            pthread_mutex_unlock(&NSCacheMutex);\r
+            return NS_OK;\r
+        }\r
+\r
+        prev = del;\r
+        del = del->next;\r
+    }\r
+    pthread_mutex_unlock(&NSCacheMutex);\r
+    return NS_FAIL;\r
+}\r
index 0512fe6..702c63a 100644 (file)
@@ -50,6 +50,9 @@ size_t NSProviderGetListSize(NSCacheElement * firstElement);
 \r
 bool NSProviderIsTopicSubScribed(NSCacheElement * conTopicList, char * cId, char * topicName);\r
 \r
+NSResult NSProviderDeleteConsumerTopic(NSCacheList * conTopicList,\r
+        NSCacheTopicSubData * topicSubData);\r
+\r
 pthread_mutex_t NSCacheMutex;\r
 pthread_mutexattr_t NSCacheMutexAttr;\r
 \r
index 51373cf..ee56bee 100644 (file)
@@ -129,7 +129,7 @@ NSResult NSSendNotification(NSMessage *msg)
                 {
                     NS_LOG_V(DEBUG, "this is topic message: %s", msg->topic);
 
-                    if(NSIsTopicSubscribed(subData->id, msg->topic))
+                    if(NSProviderIsTopicSubScribed(consumerTopicList->head, subData->id, msg->topic))
                     {
                         obArray[obCount++] = subData->messageObId;
                     }
@@ -143,7 +143,7 @@ NSResult NSSendNotification(NSMessage *msg)
 #ifdef WITH_CLOUD
             if(subData->remote_messageObId != 0)
             {
-                if(NSIsTopicSubscribed(subData->id, msg->topic))
+                if(NSProviderIsTopicSubScribed(consumerTopicList->head, subData->id, msg->topic))
                 {
                     obArray[obCount++] = subData->remote_messageObId;
                 }
@@ -172,7 +172,7 @@ NSResult NSSendNotification(NSMessage *msg)
     }
 
     OCStackResult ocstackResult = OCNotifyListOfObservers(rHandle, obArray, obCount, payload,
-            OC_HIGH_QOS);
+            OC_LOW_QOS);
 
     NS_LOG_V(DEBUG, "Message ocstackResult = %d", ocstackResult);
 
@@ -249,7 +249,7 @@ NSResult NSSendSync(NSSyncInfo *sync)
     }
 
     OCStackResult ocstackResult = OCNotifyListOfObservers(rHandle, obArray,
-            obCount, payload, OC_HIGH_QOS);
+            obCount, payload, OC_LOW_QOS);
 
     NS_LOG_V(DEBUG, "Sync ocstackResult = %d", ocstackResult);
 
index 7133e3e..d8b19d0 100644 (file)
@@ -27,6 +27,7 @@
 #include "NSProviderListener.h"\r
 #include "NSProviderResource.h"\r
 #include "NSProviderSubscription.h"\r
+#include "NSProviderTopic.h"\r
 #include "oic_string.h"\r
 #include "oic_malloc.h"\r
 #include "NSUtil.h"\r
index b9b3592..50e53ef 100644 (file)
@@ -277,7 +277,7 @@ NSResult NSSendResponse(const char * id, bool accepted)
     }\r
     NSCacheSubData * subData = (NSCacheSubData*) element->data;\r
 \r
-    if (OCNotifyListOfObservers(rHandle, (OCObservationId*)&subData->messageObId, 1, payload, OC_HIGH_QOS)\r
+    if (OCNotifyListOfObservers(rHandle, (OCObservationId*)&subData->messageObId, 1, payload, OC_LOW_QOS)\r
             != OC_STACK_OK)\r
     {\r
         NS_LOG(ERROR, "fail to send Acceptance");\r
index e0193e1..947a15f 100644 (file)
@@ -288,11 +288,6 @@ NSResult NSSendTopicList(OCEntityHandlerRequest * entityHandlerRequest)
     return NS_OK;\r
 }\r
 \r
-bool NSIsTopicSubscribed(char * consumerId, char * topic)\r
-{\r
-    return NSProviderIsTopicSubScribed(consumerTopicList->head, consumerId, topic);\r
-}\r
-\r
 NSResult NSPostConsumerTopics(OCEntityHandlerRequest * entityHandlerRequest)\r
 {\r
     NS_LOG(DEBUG, "NSPostConsumerTopics() - IN");\r
@@ -373,10 +368,10 @@ void * NSTopicSchedule(void * ptr)
                     NSStorageWrite(consumerTopicList, newObj);\r
                     break;\r
                 case TASK_UNSUBSCRIBE_TOPIC:\r
-                    consumerTopicList->cacheType = NS_PROVIDER_CACHE_CONSUMER_TOPIC_CID;\r
-                    NSStorageDelete(consumerTopicList, (const char *) node->taskData);\r
-                    consumerTopicList->cacheType = NS_PROVIDER_CACHE_CONSUMER_TOPIC_NAME;\r
-                    OICFree((char *)node->taskData);\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
                     break;\r
                 case TASK_ADD_TOPIC:\r
                 {\r