#include "NSProviderMemoryCache.h"\r
#include <string.h>\r
\r
-NSCacheList * NSStorageCreate()\r
+#define NS_PROVIDER_DELETE_REGISTERED_TOPIC_DATA(it, topicData, newObj) \\r
+ { \\r
+ if (it) \\r
+ { \\r
+ NS_LOG(DEBUG, "already registered for topic name"); \\r
+ NSOICFree(topicData->topicName); \\r
+ NSOICFree(topicData); \\r
+ NSOICFree(newObj); \\r
+ pthread_mutex_unlock(&NSCacheMutex); \\r
+ return NS_FAIL; \\r
+ } \\r
+ }\r
+\r
+NSCacheList * NSProviderStorageCreate()\r
{\r
pthread_mutex_lock(&NSCacheMutex);\r
NSCacheList * newList = (NSCacheList *) OICMalloc(sizeof(NSCacheList));\r
+\r
if (!newList)\r
{\r
pthread_mutex_unlock(&NSCacheMutex);\r
return newList;\r
}\r
\r
-NSCacheElement * NSStorageRead(NSCacheList * list, const char * findId)\r
+NSCacheElement * NSProviderStorageRead(NSCacheList * list, const char * findId)\r
{\r
pthread_mutex_lock(&NSCacheMutex);\r
\r
NSCacheElement * next = NULL;\r
NSCacheType type = list->cacheType;\r
\r
- NS_LOG_V(DEBUG, "Find ID - %s", findId);\r
+ NS_LOG_V(INFO_PRIVATE, "Find ID - %s", findId);\r
\r
while (iter)\r
{\r
return NS_ERROR;\r
}\r
\r
- NSCacheElement * it = NSStorageRead(list, id);\r
+ NSCacheElement * it = NSProviderStorageRead(list, id);\r
\r
if (it)\r
{\r
{\r
NS_LOG(DEBUG, "Update Data - IN");\r
\r
- NS_LOG_V(DEBUG, "currData_ID = %s", itData->id);\r
+ NS_LOG_V(INFO_PRIVATE, "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
return NS_ERROR;\r
}\r
\r
-NSResult NSStorageWrite(NSCacheList * list, NSCacheElement * newObj)\r
+NSResult NSProviderStorageWrite(NSCacheList * list, NSCacheElement * newObj)\r
{\r
pthread_mutex_lock(&NSCacheMutex);\r
\r
NS_LOG(DEBUG, "Type is SUBSCRIBER");\r
\r
NSCacheSubData * subData = (NSCacheSubData *) newObj->data;\r
- NSCacheElement * it = NSStorageRead(list, subData->id);\r
+ NSCacheElement * it = NSProviderStorageRead(list, subData->id);\r
\r
if (it)\r
{\r
{\r
NS_LOG(DEBUG, "Update Data - IN");\r
\r
- NS_LOG_V(DEBUG, "currData_ID = %s", itData->id);\r
+ NS_LOG_V(INFO_PRIVATE, "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, "subData_ID = %s", subData->id);\r
+ NS_LOG_V(INFO_PRIVATE, "subData_ID = %s", subData->id);\r
NS_LOG_V(DEBUG, "subData_MsgObID = %d", subData->messageObId);\r
NS_LOG_V(DEBUG, "subData_SyncObID = %d", subData->syncObId);\r
NS_LOG_V(DEBUG, "subData_Cloud_MsgObID = %d", subData->remote_messageObId);\r
}\r
\r
NS_LOG(DEBUG, "Update Data - OUT");\r
-\r
+ NSOICFree(subData);\r
+ NSOICFree(newObj);\r
pthread_mutex_unlock(&NSCacheMutex);\r
return NS_OK;\r
}\r
}\r
\r
}\r
- else if(type == NS_PROVIDER_CACHE_REGISTER_TOPIC)\r
+ else if (type == NS_PROVIDER_CACHE_REGISTER_TOPIC)\r
{\r
NS_LOG(DEBUG, "Type is REGITSTER TOPIC");\r
\r
NSCacheTopicData * topicData = (NSCacheTopicData *) newObj->data;\r
- NSCacheElement * it = NSStorageRead(list, topicData->topicName);\r
+ NSCacheElement * it = NSProviderStorageRead(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
+ NS_PROVIDER_DELETE_REGISTERED_TOPIC_DATA(it, topicData, newObj);\r
}\r
- else if(type == NS_PROVIDER_CACHE_CONSUMER_TOPIC_NAME)\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
+ NSCacheElement * it = NSProviderStorageRead(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
+ NS_PROVIDER_DELETE_REGISTERED_TOPIC_DATA(it, topicData, newObj);\r
}\r
-\r
- else if(type == NS_PROVIDER_CACHE_CONSUMER_TOPIC_CID)\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
+ NSCacheElement * it = NSProviderStorageRead(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
+ NS_PROVIDER_DELETE_REGISTERED_TOPIC_DATA(it, topicData, newObj);\r
}\r
\r
-\r
if (list->head == NULL)\r
{\r
NS_LOG(DEBUG, "list->head is NULL, Insert First Data");\r
return NS_OK;\r
}\r
\r
-NSResult NSStorageDestroy(NSCacheList * list)\r
+NSResult NSProviderStorageDestroy(NSCacheList * list)\r
{\r
NSCacheElement * iter = list->head;\r
NSCacheElement * next = NULL;\r
-\r
NSCacheType type = list->cacheType;\r
\r
while (iter)\r
{\r
next = (NSCacheElement *) iter->next;\r
-\r
NSProviderDeleteCacheData(type, iter->data);\r
- OICFree(iter);\r
-\r
+ NSOICFree(iter);\r
iter = next;\r
}\r
\r
- OICFree(list);\r
-\r
+ NSOICFree(list);\r
return NS_OK;\r
}\r
\r
+bool NSIsSameObId(NSCacheSubData * data, OCObservationId id)\r
+{\r
+ if (id == data->messageObId || id == data->syncObId || id == data->remote_messageObId ||\r
+ id == data->remote_syncObId)\r
+ {\r
+ return true;\r
+ }\r
+\r
+ return false;\r
+}\r
+\r
bool NSProviderCompareIdCacheData(NSCacheType type, void * data, const char * id)\r
{\r
NS_LOG(DEBUG, "NSProviderCompareIdCacheData - IN");\r
return false;\r
}\r
\r
- NS_LOG_V(DEBUG, "Data(compData) = [%s]", id);\r
+ NS_LOG_V(INFO_PRIVATE, "Data(compData) = [%s]", id);\r
\r
if (type == NS_PROVIDER_CACHE_SUBSCRIBER)\r
{\r
NSCacheSubData * subData = (NSCacheSubData *) data;\r
\r
- NS_LOG_V(DEBUG, "Data(subData) = [%s]", subData->id);\r
+ NS_LOG_V(INFO_PRIVATE, "Data(subData) = [%s]", subData->id);\r
\r
if (strcmp(subData->id, id) == 0)\r
{\r
NS_LOG(DEBUG, "Message Data is Not Same");\r
return false;\r
}\r
+ else if (type == NS_PROVIDER_CACHE_SUBSCRIBER_OBSERVE_ID)\r
+ {\r
+ NSCacheSubData * subData = (NSCacheSubData *) data;\r
+\r
+ NS_LOG_V(INFO_PRIVATE, "Data(subData) = [%s]", subData->id);\r
+\r
+ OCObservationId currID = *id;\r
+\r
+ if (NSIsSameObId(subData, currID))\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
else if (type == NS_PROVIDER_CACHE_REGISTER_TOPIC)\r
{\r
NSCacheTopicData * topicData = (NSCacheTopicData *) data;\r
{\r
NSCacheTopicSubData * topicData = (NSCacheTopicSubData *) data;\r
\r
- NS_LOG_V(DEBUG, "Data(topicData) = [%s]", topicData->id);\r
+ NS_LOG_V(INFO_PRIVATE, "Data(topicData) = [%s]", topicData->id);\r
\r
if (strcmp(topicData->id, id) == 0)\r
{\r
\r
NSResult NSProviderDeleteCacheData(NSCacheType type, void * data)\r
{\r
- if (data == NULL)\r
+ if (!data)\r
{\r
- return NS_OK;\r
+ return NS_ERROR;\r
}\r
\r
- if (type == NS_PROVIDER_CACHE_SUBSCRIBER)\r
+ if (type == NS_PROVIDER_CACHE_SUBSCRIBER || type == NS_PROVIDER_CACHE_SUBSCRIBER_OBSERVE_ID)\r
{\r
NSCacheSubData * subData = (NSCacheSubData *) data;\r
\r
(subData->id)[0] = '\0';\r
- OICFree(subData);\r
-\r
+ NSOICFree(subData);\r
return NS_OK;\r
}\r
- else if(type == NS_PROVIDER_CACHE_REGISTER_TOPIC)\r
- {\r
- NSCacheTopicData * data = (NSCacheTopicData *) data;\r
- OICFree(data->topicName);\r
- }\r
- else if(type == NS_PROVIDER_CACHE_CONSUMER_TOPIC_NAME || NS_PROVIDER_CACHE_CONSUMER_TOPIC_CID)\r
+ else if (type == NS_PROVIDER_CACHE_REGISTER_TOPIC)\r
{\r
- NSCacheTopicSubData * data = (NSCacheTopicSubData *) data;\r
- OICFree(data->topicName);\r
- }\r
\r
- return NS_OK;\r
-}\r
+ NSCacheTopicData * topicData = (NSCacheTopicData *) data;\r
+ NS_LOG_V(DEBUG, "topicData->topicName = %s, topicData->state = %d", topicData->topicName,\r
+ (int)topicData->state);\r
\r
-bool NSIsSameObId(NSCacheSubData * data, OCObservationId id)\r
-{\r
- if (id == data->messageObId || id == data->syncObId || id == data->remote_messageObId ||\r
- id == data->remote_syncObId)\r
+ NSOICFree(topicData->topicName);\r
+ NSOICFree(topicData);\r
+ }\r
+ else if (type == NS_PROVIDER_CACHE_CONSUMER_TOPIC_NAME ||\r
+ type == NS_PROVIDER_CACHE_CONSUMER_TOPIC_CID)\r
{\r
- return true;\r
+ NSCacheTopicSubData * topicData = (NSCacheTopicSubData *) data;\r
+ NSOICFree(topicData->topicName);\r
+ NSOICFree(topicData);\r
}\r
\r
- return false;\r
+ return NS_OK;\r
}\r
\r
-NSResult NSProviderDeleteSubDataFromObId(NSCacheList * list, OCObservationId id)\r
+NSResult NSProviderStorageDelete(NSCacheList * list, const char * delId)\r
{\r
- if(!list || !list->head)\r
- {\r
- NS_LOG(INFO, "list is NULL");\r
- return NS_FAIL;\r
- }\r
-\r
pthread_mutex_lock(&NSCacheMutex);\r
NSCacheElement * prev = list->head;\r
NSCacheElement * del = list->head;\r
\r
NSCacheType type = list->cacheType;\r
\r
- bool isDelete = true;\r
-\r
- while(isDelete)\r
+ if (!del)\r
{\r
- NSCacheSubData * curr = (NSCacheSubData *)del->data;\r
-\r
- isDelete = false;\r
-\r
- if (NSIsSameObId(curr, id))\r
- {\r
- if (del == list->head) // first object\r
- {\r
- if (del == list->tail) // first object (one object)\r
- {\r
- list->tail = del->next;\r
- }\r
-\r
- list->head = del->next;\r
-\r
- NSProviderDeleteCacheData(type, del->data);\r
- OICFree(del);\r
- isDelete = true;\r
- }\r
- }\r
- else\r
- {\r
- del = del->next;\r
- while (del)\r
- {\r
- if (NSIsSameObId(curr, id))\r
- {\r
- if (del == list->tail) // delete object same to last object\r
- {\r
- list->tail = prev;\r
- }\r
-\r
- prev->next = del->next;\r
- NSProviderDeleteCacheData(type, del->data);\r
- OICFree(del);\r
- isDelete = true;\r
- break;\r
- }\r
-\r
- prev = del;\r
- del = del->next;\r
- }\r
- }\r
+ NS_LOG(DEBUG, "list head is NULL");\r
+ pthread_mutex_unlock(&NSCacheMutex);\r
+ return NS_FAIL;\r
}\r
- pthread_mutex_unlock(&NSCacheMutex);\r
- return NS_OK;\r
-}\r
-\r
-NSResult NSStorageDelete(NSCacheList * list, const char * delId)\r
-{\r
- pthread_mutex_lock(&NSCacheMutex);\r
- NSCacheElement * prev = list->head;\r
- NSCacheElement * del = list->head;\r
-\r
- NSCacheType type = list->cacheType;\r
\r
if (NSProviderCompareIdCacheData(type, del->data, delId))\r
{\r
}\r
\r
list->head = del->next;\r
-\r
NSProviderDeleteCacheData(type, del->data);\r
- OICFree(del);\r
+ NSOICFree(del);\r
pthread_mutex_unlock(&NSCacheMutex);\r
return NS_OK;\r
}\r
}\r
\r
del = del->next;\r
+\r
while (del)\r
{\r
if (NSProviderCompareIdCacheData(type, del->data, delId))\r
\r
prev->next = del->next;\r
NSProviderDeleteCacheData(type, del->data);\r
- OICFree(del);\r
+ NSOICFree(del);\r
pthread_mutex_unlock(&NSCacheMutex);\r
return NS_OK;\r
}\r
prev = del;\r
del = del->next;\r
}\r
+\r
pthread_mutex_unlock(&NSCacheMutex);\r
return NS_FAIL;\r
}\r
\r
-NSTopics * NSProviderGetTopicsCacheData(NSCacheList * regTopicList)\r
+NSTopicLL * 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
+ 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
+ NSTopicLL * iterTopic = NULL;\r
+ NSTopicLL * newTopic = NULL;\r
+ NSTopicLL * topics = NULL;\r
\r
while (iter)\r
{\r
NSCacheTopicData * curr = (NSCacheTopicData *) iter->data;\r
+ newTopic = (NSTopicLL *) OICMalloc(sizeof(NSTopicLL));\r
+\r
+ if (!newTopic)\r
+ {\r
+ pthread_mutex_unlock(&NSCacheMutex);\r
+ return NULL;\r
+ }\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
+ if (!topics)\r
{\r
iterTopic = topics = newTopic;\r
}\r
return topics;\r
}\r
\r
-NSTopics * NSProviderGetConsumerTopicsCacheData(NSCacheList * conTopicList, char *consumerId)\r
+NSTopicLL * NSProviderGetConsumerTopicsCacheData(NSCacheList * regTopicList,\r
+ NSCacheList * conTopicList, const char * consumerId)\r
{\r
- NS_LOG(DEBUG, "NSProviderGetConsumerTopics - IN");\r
+ NS_LOG(DEBUG, "NSProviderGetConsumerTopicsCacheData - IN");\r
\r
pthread_mutex_lock(&NSCacheMutex);\r
- NSTopics * topics = NSProviderGetTopics();\r
+ NSTopicLL * topics = NSProviderGetTopicsCacheData(regTopicList);\r
\r
- if(!topics)\r
+ if (!topics)\r
{\r
pthread_mutex_unlock(&NSCacheMutex);\r
return NULL;\r
NSCacheElement * iter = conTopicList->head;\r
conTopicList->cacheType = NS_PROVIDER_CACHE_CONSUMER_TOPIC_CID;\r
\r
- while(iter)\r
+ while (iter)\r
{\r
- NSCacheElement * curr = NSStorageRead(iter, consumerId);\r
+ NSCacheTopicSubData * curr = (NSCacheTopicSubData *)iter->data;\r
\r
- if(!curr)\r
+ if (curr && strcmp(curr->id, consumerId) == 0)\r
{\r
- NSTopics * topicIter = topics;\r
- while(!topicIter)\r
+ NS_LOG_V(INFO_PRIVATE, "curr->id = %s", curr->id);\r
+ NS_LOG_V(DEBUG, "curr->topicName = %s", curr->topicName);\r
+ NSTopicLL * topicIter = topics;\r
+\r
+ while (topicIter)\r
{\r
- NSCacheTopicSubData * topicSubData = (NSCacheTopicSubData *) curr->data;\r
- if(strcmp(topicIter->topicName, topicSubData->topicName) == 0)\r
+ if (strcmp(topicIter->topicName, curr->topicName) == 0)\r
{\r
topicIter->state = NS_TOPIC_SUBSCRIBED;\r
break;\r
}\r
+\r
topicIter = topicIter->next;\r
}\r
}\r
\r
return topics;\r
}\r
+\r
+bool NSProviderIsTopicSubScribed(NSCacheElement * conTopicList, char * cId, char * topicName)\r
+{\r
+ pthread_mutex_lock(&NSCacheMutex);\r
+\r
+ if (!conTopicList || !cId || !topicName)\r
+ {\r
+ pthread_mutex_unlock(&NSCacheMutex);\r
+ return false;\r
+ }\r
+\r
+ NSCacheElement * iter = conTopicList;\r
+\r
+ while (iter)\r
+ {\r
+ NSCacheTopicSubData * curr = (NSCacheTopicSubData *) iter->data;\r
+\r
+ if ( (strcmp(curr->id, cId) == 0) && (strcmp(curr->topicName, topicName) == 0) )\r
+ {\r
+ pthread_mutex_unlock(&NSCacheMutex);\r
+ return true;\r
+ }\r
+\r
+ iter = iter->next;\r
+ }\r
+\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
+ pthread_mutex_unlock(&NSCacheMutex);\r
+ return NS_ERROR;\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
+ pthread_mutex_unlock(&NSCacheMutex);\r
+ return NS_FAIL;\r
+ }\r
+\r
+ NSCacheTopicSubData * curr = (NSCacheTopicSubData *) del->data;\r
+ NS_LOG_V(INFO_PRIVATE, "compareid = %s", cId);\r
+ NS_LOG_V(DEBUG, "comparetopicName = %s", topicName);\r
+ NS_LOG_V(INFO_PRIVATE, "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) &&\r
+ (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
+ NSOICFree(del);\r
+ pthread_mutex_unlock(&NSCacheMutex);\r
+ return NS_OK;\r
+ }\r
+ }\r
+\r
+ curr = NULL;\r
+ del = del->next;\r
+\r
+ while (del)\r
+ {\r
+ curr = (NSCacheTopicSubData *) del->data;\r
+ if ( (strncmp(curr->id, cId, NS_UUID_STRING_SIZE) == 0) &&\r
+ (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
+ NSOICFree(del);\r
+ pthread_mutex_unlock(&NSCacheMutex);\r
+ return NS_OK;\r
+ }\r
+\r
+ prev = del;\r
+ del = del->next;\r
+ }\r
+\r
+ pthread_mutex_unlock(&NSCacheMutex);\r
+ return NS_FAIL;\r
+}\r