NS_LOG(DEBUG, "NSProviderGetConsumerTopics - IN");\r
pthread_mutex_lock(&nsInitMutex);\r
\r
- //TODO implement get subscribed topics for consumer\r
+ if(!consumerId)\r
+ {\r
+ NS_LOG(DEBUG, "consumer id should be set");\r
+ pthread_mutex_unlock(&nsInitMutex);\r
+ return NS_FAIL;\r
+ }\r
\r
- pthread_mutex_unlock(&nsInitMutex);\r
- NS_LOG(DEBUG, "NSProviderGetConsumerTopics - OUT");\r
+ NSTopics * topics = NSProviderGetConsumerTopicsCacheData(consumerTopicList, consumerId);\r
\r
- return NULL;\r
+ pthread_mutex_unlock(&nsInitMutex);\r
+ return topics;\r
}\r
\r
NSTopics * NSProviderGetTopics()\r
NS_LOG(DEBUG, "NSProviderGetTopics - IN");\r
pthread_mutex_lock(&nsInitMutex);\r
\r
- //TODO implement get registered topics for consumer\r
+ NSTopics * topics = NSProviderGetTopicsCacheData(registeredTopicList);\r
\r
pthread_mutex_unlock(&nsInitMutex);\r
NS_LOG(DEBUG, "NSProviderGetTopics - OUT");\r
\r
- return NULL;\r
+ return topics;\r
}\r
\r
NSResult NSProviderAddTopic(char *topicName)\r
NS_LOG(DEBUG, "NSProviderAddTopics - IN");\r
pthread_mutex_lock(&nsInitMutex);\r
\r
+ if(!topicName)\r
+ {\r
+ pthread_mutex_unlock(&nsInitMutex);\r
+ NS_LOG(DEBUG, "topic Name should be set");\r
+ return NS_FAIL;\r
+ }\r
+\r
NSPushQueue(TOPIC_SCHEDULER, TASK_ADD_TOPIC, OICStrdup(topicName));\r
\r
pthread_mutex_unlock(&nsInitMutex);\r
NS_LOG(DEBUG, "NSProviderDeleteTopics - IN");\r
pthread_mutex_lock(&nsInitMutex);\r
\r
+ if(!topicName)\r
+ {\r
+ pthread_mutex_unlock(&nsInitMutex);\r
+ NS_LOG(DEBUG, "topic Name should be set");\r
+ return NS_FAIL;\r
+ }\r
+\r
NSPushQueue(TOPIC_SCHEDULER, TASK_DELETE_TOPIC, topicName);\r
\r
pthread_mutex_unlock(&nsInitMutex);\r
NS_LOG(DEBUG, "NSProviderSelectTopics - IN");\r
pthread_mutex_lock(&nsInitMutex);\r
\r
- if(!consumerId)\r
+ if(!consumerId || !topicName)\r
{\r
+ pthread_mutex_unlock(&nsInitMutex);\r
NS_LOG(DEBUG, "consumer id should be set for topic subscription");\r
return NS_FAIL;\r
}\r
\r
- //TODO: add consumerId to task struct\r
- NSPushQueue(TOPIC_SCHEDULER, TASK_SUBSCRIBE_TOPIC, topicName);\r
+ NSCacheTopicSubData * topicSubData =\r
+ (NSCacheTopicSubData *) OICMalloc(sizeof(NSCacheTopicSubData));\r
+\r
+ OICStrcpy(topicSubData->id, consumerId, NS_UUID_STRING_SIZE);\r
+ topicSubData->topicName = OICStrdup(topicName);\r
+\r
+ NSPushQueue(TOPIC_SCHEDULER, TASK_SUBSCRIBE_TOPIC, (void *)topicSubData);\r
\r
pthread_mutex_unlock(&nsInitMutex);\r
NS_LOG(DEBUG, "NSProviderSelectTopics - OUT");\r
NS_LOG(DEBUG, "NSProviderUnselectTopics - IN");\r
pthread_mutex_lock(&nsInitMutex);\r
\r
- if(!consumerId)\r
+ if(!consumerId || !topicName)\r
{\r
NS_LOG(DEBUG, "consumer id should be set for topic subscription");\r
+ pthread_mutex_unlock(&nsInitMutex);\r
return NS_FAIL;\r
}\r
- \r
- //TODO: add consumerId to task struct\r
+\r
NSPushQueue(TOPIC_SCHEDULER, TASK_UNSUBSCRIBE_TOPIC, topicName);\r
\r
pthread_mutex_unlock(&nsInitMutex);\r
return NS_ERROR;\r
}\r
\r
-NSResult NSCacheUpdateSubScriptionState(NSCacheList * list, char * id, bool state)\r
-{\r
- pthread_mutex_lock(&NSCacheMutex);\r
-\r
- NS_LOG(DEBUG, "NSCacheUpdateSubScriptionState - IN");\r
-\r
- if (id == NULL)\r
- {\r
- NS_LOG(DEBUG, "id is NULL");\r
- pthread_mutex_unlock(&NSCacheMutex);\r
- return NS_ERROR;\r
- }\r
-\r
- NSCacheElement * it = NSStorageRead(list, id);\r
-\r
- if (it)\r
- {\r
- NSCacheSubData * itData = (NSCacheSubData *) it->data;\r
- if (strcmp(itData->id, id) == 0)\r
- {\r
- NS_LOG(DEBUG, "Update Data - IN");\r
-\r
- NS_LOG_V(DEBUG, "currData_ID = %s", itData->id);\r
- NS_LOG_V(DEBUG, "currData_MsgObID = %d", itData->messageObId);\r
- NS_LOG_V(DEBUG, "currData_SyncObID = %d", itData->syncObId);\r
- NS_LOG_V(DEBUG, "currData_Cloud_MsgObID = %d", itData->remote_messageObId);\r
- NS_LOG_V(DEBUG, "currData_Cloud_SyncObID = %d", itData->remote_syncObId);\r
- NS_LOG_V(DEBUG, "currData_IsWhite = %d", itData->isWhite);\r
-\r
- NS_LOG_V(DEBUG, "update state = %d", state);\r
-\r
- itData->isWhite = state;\r
-\r
- NS_LOG(DEBUG, "Update Data - OUT");\r
- pthread_mutex_unlock(&NSCacheMutex);\r
- return NS_OK;\r
- }\r
- }\r
- else\r
- {\r
- NS_LOG(DEBUG, "Not Found Data");\r
- }\r
-\r
- NS_LOG(DEBUG, "NSCacheUpdateSubScriptionState - OUT");\r
- pthread_mutex_unlock(&NSCacheMutex);\r
- return NS_ERROR;\r
-}\r
-\r
NSResult NSStorageWrite(NSCacheList * list, NSCacheElement * newObj)\r
{\r
pthread_mutex_lock(&NSCacheMutex);\r
return NS_FAIL;\r
}\r
}\r
+ else if(type == NS_PROVIDER_CACHE_CONSUMER_TOPIC_NAME)\r
+ {\r
+ NS_LOG(DEBUG, "Type is REGITSTER TOPIC");\r
+\r
+ NSCacheTopicSubData * topicData = (NSCacheTopicSubData *) newObj->data;\r
+ NSCacheElement * it = NSStorageRead(list, topicData->topicName);\r
+\r
+ if (it)\r
+ {\r
+ NS_LOG(DEBUG, "already registered for topic name");\r
+ pthread_mutex_unlock(&NSCacheMutex);\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
+ NSCacheTopicSubData * topicData = (NSCacheTopicSubData *) newObj->data;\r
+ NSCacheElement * it = NSStorageRead(list, topicData->id);\r
+\r
+ if (it)\r
+ {\r
+ NS_LOG(DEBUG, "already registered for topic name");\r
+ pthread_mutex_unlock(&NSCacheMutex);\r
+ return NS_FAIL;\r
+ }\r
+ }\r
+\r
\r
if (list->head == NULL)\r
{\r
NS_LOG(DEBUG, "Message Data is Not Same");\r
return false;\r
}\r
- else if (type == NS_PROVIDER_CACHE_CONSUMER_TOPIC)\r
+ else if (type == NS_PROVIDER_CACHE_CONSUMER_TOPIC_NAME)\r
{\r
NSCacheTopicSubData * topicData = (NSCacheTopicSubData *) data;\r
\r
NS_LOG(DEBUG, "Message Data is Not Same");\r
return false;\r
}\r
+ else if (type == NS_PROVIDER_CACHE_CONSUMER_TOPIC_CID)\r
+ {\r
+ NSCacheTopicSubData * topicData = (NSCacheTopicSubData *) data;\r
+\r
+ NS_LOG_V(DEBUG, "Data(topicData) = [%s]", topicData->id);\r
+\r
+ if (strcmp(topicData->id, id) == 0)\r
+ {\r
+ NS_LOG(DEBUG, "SubData is Same");\r
+ return true;\r
+ }\r
+\r
+ NS_LOG(DEBUG, "Message Data is Not Same");\r
+ return false;\r
+ }\r
+\r
\r
NS_LOG(DEBUG, "NSProviderCompareIdCacheData - OUT");\r
return false;\r
NSCacheTopicData * data = (NSCacheTopicData *) data;\r
OICFree(data->topicName);\r
}\r
- else if(type == NS_PROVIDER_CACHE_CONSUMER_TOPIC)\r
+ else if(type == NS_PROVIDER_CACHE_CONSUMER_TOPIC_NAME || NS_PROVIDER_CACHE_CONSUMER_TOPIC_CID)\r
{\r
NSCacheTopicSubData * data = (NSCacheTopicSubData *) data;\r
OICFree(data->topicName);\r
pthread_mutex_unlock(&NSCacheMutex);\r
return NS_FAIL;\r
}\r
+\r
+NSTopics * NSProviderGetTopicsCacheData(NSCacheList * regTopicList)\r
+{\r
+ NS_LOG(DEBUG, "NSProviderGetTopicsCache - IN");\r
+ pthread_mutex_lock(&NSCacheMutex);\r
+\r
+ NSCacheElement * iter = regTopicList->head;\r
+\r
+ if(!iter)\r
+ {\r
+ pthread_mutex_unlock(&NSCacheMutex);\r
+ return NULL;\r
+ }\r
+\r
+ NSTopics * iterTopic = NULL;\r
+ NSTopics * newTopic = NULL;\r
+ NSTopics * topics = NULL;\r
+\r
+ while (iter)\r
+ {\r
+ NSCacheTopicData * curr = (NSCacheTopicData *) iter->data;\r
+\r
+ newTopic = (NSTopics *) OICMalloc(sizeof(NSTopics));\r
+ newTopic->state = curr->state;\r
+ newTopic->next = NULL;\r
+ newTopic->topicName = OICStrdup(curr->topicName);\r
+\r
+ if(!topics)\r
+ {\r
+ iterTopic = topics = newTopic;\r
+ }\r
+ else\r
+ {\r
+ iterTopic->next = newTopic;\r
+ iterTopic = newTopic;\r
+ }\r
+\r
+ iter = iter->next;\r
+ }\r
+\r
+ pthread_mutex_unlock(&NSCacheMutex);\r
+ NS_LOG(DEBUG, "NSProviderGetTopicsCache - OUT");\r
+\r
+ return topics;\r
+}\r
+\r
+NSTopics * NSProviderGetConsumerTopicsCacheData(NSCacheList * conTopicList, char *consumerId)\r
+{\r
+ NS_LOG(DEBUG, "NSProviderGetConsumerTopics - IN");\r
+\r
+ pthread_mutex_lock(&NSCacheMutex);\r
+ NSTopics * topics = NSProviderGetTopics();\r
+\r
+ if(!topics)\r
+ {\r
+ pthread_mutex_unlock(&NSCacheMutex);\r
+ return NULL;\r
+ }\r
+\r
+ NSCacheElement * iter = conTopicList->head;\r
+ conTopicList->cacheType = NS_PROVIDER_CACHE_CONSUMER_TOPIC_CID;\r
+\r
+ while(iter)\r
+ {\r
+ NSCacheElement * curr = NSStorageRead(iter, consumerId);\r
+\r
+ if(!curr)\r
+ {\r
+ NSTopics * topicIter = topics;\r
+ while(!topicIter)\r
+ {\r
+ NSCacheTopicSubData * topicSubData = (NSCacheTopicSubData *) curr->data;\r
+ if(strcmp(topicIter->topicName, topicSubData->topicName) == 0)\r
+ {\r
+ topicIter->state = NS_TOPIC_SUBSCRIBED;\r
+ break;\r
+ }\r
+ topicIter = topicIter->next;\r
+ }\r
+ }\r
+\r
+ iter = iter->next;\r
+ }\r
+\r
+ conTopicList->cacheType = NS_PROVIDER_CACHE_CONSUMER_TOPIC_NAME;\r
+ pthread_mutex_unlock(&NSCacheMutex);\r
+ NS_LOG(DEBUG, "NSProviderGetConsumerTopics - OUT");\r
+\r
+ return topics;\r
+}\r
\r
static bool isTopicList = false;\r
\r
+NSResult NSStoreTopics(const char * topicName);\r
NSResult NSSendTopicUpdation();\r
\r
NSResult NSInitTopicList()\r
}\r
\r
consumerTopicList = NSStorageCreate();\r
- consumerTopicList->cacheType = NS_PROVIDER_CACHE_CONSUMER_TOPIC;\r
+ consumerTopicList->cacheType = NS_PROVIDER_CACHE_CONSUMER_TOPIC_NAME;\r
\r
registeredTopicList = NSStorageCreate();\r
registeredTopicList->cacheType = NS_PROVIDER_CACHE_REGISTER_TOPIC;\r
NSSendTopicList((OCEntityHandlerRequest*) node->taskData);\r
break;\r
case TASK_SUBSCRIBE_TOPIC:\r
- //TODO: modify subscription with single topic\r
NS_LOG(DEBUG, "CASE TASK_SUBSCRIBE_TOPIC : ");\r
- NSTopicList * topicList = (NSTopicList *) node->taskData;\r
- NSSubscribeTopicList(topicList->consumerId, topicList);\r
- NSSendTopicUpdationToConsumer(topicList->consumerId);\r
- // TODO : free NSTopic\r
+ NSCacheElement * newObj = (NSCacheElement *) OICMalloc(sizeof(NSCacheElement));\r
+ newObj->data = node->taskData;\r
+ newObj->next = NULL;\r
+ NSStorageWrite(consumerTopicList, newObj);\r
break;\r
case TASK_UNSUBSCRIBE_TOPIC:\r
- // TODO: implement\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
break;\r
case TASK_ADD_TOPIC:\r
{\r