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
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
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
}\r
}\r
\r
-\r
if (list->head == NULL)\r
{\r
NS_LOG(DEBUG, "list->head is NULL, Insert First Data");\r
\r
if(!conTopicList || !cId || !topicName)\r
{\r
- return false;\r
pthread_mutex_unlock(&NSCacheMutex);\r
+ return false;\r
}\r
\r
NSCacheElement * iter = conTopicList;\r
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
\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
{
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;
}
#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;
}
}
OCStackResult ocstackResult = OCNotifyListOfObservers(rHandle, obArray, obCount, payload,
- OC_HIGH_QOS);
+ OC_LOW_QOS);
NS_LOG_V(DEBUG, "Message ocstackResult = %d", ocstackResult);
}
OCStackResult ocstackResult = OCNotifyListOfObservers(rHandle, obArray,
- obCount, payload, OC_HIGH_QOS);
+ obCount, payload, OC_LOW_QOS);
NS_LOG_V(DEBUG, "Sync ocstackResult = %d", ocstackResult);
#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
}\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
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
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