+\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