X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=service%2Fnotification%2Fsrc%2Fprovider%2FNSProviderMemoryCache.c;h=9e4dd693574e448b91c45a5b6ac5308775f95573;hb=refs%2Ftags%2Faccepted%2Ftizen%2Funified%2F20171010.063815;hp=1f79fd53464b7618b2443f606be3a3d709dad386;hpb=c1899516ad71ea6cd86517a10757a08c81a657b2;p=platform%2Fupstream%2Fiotivity.git diff --git a/service/notification/src/provider/NSProviderMemoryCache.c b/service/notification/src/provider/NSProviderMemoryCache.c index 1f79fd5..9e4dd69 100644 --- a/service/notification/src/provider/NSProviderMemoryCache.c +++ b/service/notification/src/provider/NSProviderMemoryCache.c @@ -21,10 +21,24 @@ #include "NSProviderMemoryCache.h" #include -NSCacheList * NSStorageCreate() +#define NS_PROVIDER_DELETE_REGISTERED_TOPIC_DATA(it, topicData, newObj) \ + { \ + if (it) \ + { \ + NS_LOG(DEBUG, "already registered for topic name"); \ + NSOICFree(topicData->topicName); \ + NSOICFree(topicData); \ + NSOICFree(newObj); \ + pthread_mutex_unlock(&NSCacheMutex); \ + return NS_FAIL; \ + } \ + } + +NSCacheList * NSProviderStorageCreate() { pthread_mutex_lock(&NSCacheMutex); NSCacheList * newList = (NSCacheList *) OICMalloc(sizeof(NSCacheList)); + if (!newList) { pthread_mutex_unlock(&NSCacheMutex); @@ -39,7 +53,7 @@ NSCacheList * NSStorageCreate() return newList; } -NSCacheElement * NSStorageRead(NSCacheList * list, const char * findId) +NSCacheElement * NSProviderStorageRead(NSCacheList * list, const char * findId) { pthread_mutex_lock(&NSCacheMutex); @@ -49,7 +63,7 @@ NSCacheElement * NSStorageRead(NSCacheList * list, const char * findId) NSCacheElement * next = NULL; NSCacheType type = list->cacheType; - NS_LOG_V(DEBUG, "Find ID - %s", findId); + NS_LOG_V(INFO_PRIVATE, "Find ID - %s", findId); while (iter) { @@ -85,7 +99,7 @@ NSResult NSCacheUpdateSubScriptionState(NSCacheList * list, char * id, bool stat return NS_ERROR; } - NSCacheElement * it = NSStorageRead(list, id); + NSCacheElement * it = NSProviderStorageRead(list, id); if (it) { @@ -94,7 +108,7 @@ NSResult NSCacheUpdateSubScriptionState(NSCacheList * list, char * id, bool stat { NS_LOG(DEBUG, "Update Data - IN"); - NS_LOG_V(DEBUG, "currData_ID = %s", itData->id); + NS_LOG_V(INFO_PRIVATE, "currData_ID = %s", itData->id); NS_LOG_V(DEBUG, "currData_MsgObID = %d", itData->messageObId); NS_LOG_V(DEBUG, "currData_SyncObID = %d", itData->syncObId); NS_LOG_V(DEBUG, "currData_Cloud_MsgObID = %d", itData->remote_messageObId); @@ -120,7 +134,7 @@ NSResult NSCacheUpdateSubScriptionState(NSCacheList * list, char * id, bool stat return NS_ERROR; } -NSResult NSStorageWrite(NSCacheList * list, NSCacheElement * newObj) +NSResult NSProviderStorageWrite(NSCacheList * list, NSCacheElement * newObj) { pthread_mutex_lock(&NSCacheMutex); @@ -140,7 +154,7 @@ NSResult NSStorageWrite(NSCacheList * list, NSCacheElement * newObj) NS_LOG(DEBUG, "Type is SUBSCRIBER"); NSCacheSubData * subData = (NSCacheSubData *) newObj->data; - NSCacheElement * it = NSStorageRead(list, subData->id); + NSCacheElement * it = NSProviderStorageRead(list, subData->id); if (it) { @@ -150,14 +164,14 @@ NSResult NSStorageWrite(NSCacheList * list, NSCacheElement * newObj) { NS_LOG(DEBUG, "Update Data - IN"); - NS_LOG_V(DEBUG, "currData_ID = %s", itData->id); + NS_LOG_V(INFO_PRIVATE, "currData_ID = %s", itData->id); NS_LOG_V(DEBUG, "currData_MsgObID = %d", itData->messageObId); NS_LOG_V(DEBUG, "currData_SyncObID = %d", itData->syncObId); NS_LOG_V(DEBUG, "currData_Cloud_MsgObID = %d", itData->remote_messageObId); NS_LOG_V(DEBUG, "currData_Cloud_SyncObID = %d", itData->remote_syncObId); NS_LOG_V(DEBUG, "currData_IsWhite = %d", itData->isWhite); - NS_LOG_V(DEBUG, "subData_ID = %s", subData->id); + NS_LOG_V(INFO_PRIVATE, "subData_ID = %s", subData->id); NS_LOG_V(DEBUG, "subData_MsgObID = %d", subData->messageObId); NS_LOG_V(DEBUG, "subData_SyncObID = %d", subData->syncObId); NS_LOG_V(DEBUG, "subData_Cloud_MsgObID = %d", subData->remote_messageObId); @@ -186,54 +200,40 @@ NSResult NSStorageWrite(NSCacheList * list, NSCacheElement * newObj) } NS_LOG(DEBUG, "Update Data - OUT"); - + NSOICFree(subData); + NSOICFree(newObj); pthread_mutex_unlock(&NSCacheMutex); return NS_OK; } } } - else if(type == NS_PROVIDER_CACHE_REGISTER_TOPIC) + else if (type == NS_PROVIDER_CACHE_REGISTER_TOPIC) { NS_LOG(DEBUG, "Type is REGITSTER TOPIC"); NSCacheTopicData * topicData = (NSCacheTopicData *) newObj->data; - NSCacheElement * it = NSStorageRead(list, topicData->topicName); + NSCacheElement * it = NSProviderStorageRead(list, topicData->topicName); - if (it) - { - NS_LOG(DEBUG, "already registered for topic name"); - pthread_mutex_unlock(&NSCacheMutex); - return NS_FAIL; - } + NS_PROVIDER_DELETE_REGISTERED_TOPIC_DATA(it, topicData, newObj); } - else if(type == NS_PROVIDER_CACHE_CONSUMER_TOPIC_NAME) + else if (type == NS_PROVIDER_CACHE_CONSUMER_TOPIC_NAME) { NS_LOG(DEBUG, "Type is REGITSTER TOPIC"); NSCacheTopicSubData * topicData = (NSCacheTopicSubData *) newObj->data; - NSCacheElement * it = NSStorageRead(list, topicData->topicName); + NSCacheElement * it = NSProviderStorageRead(list, topicData->topicName); - if (it) - { - NS_LOG(DEBUG, "already registered for topic name"); - pthread_mutex_unlock(&NSCacheMutex); - return NS_FAIL; - } + NS_PROVIDER_DELETE_REGISTERED_TOPIC_DATA(it, topicData, newObj); } - else if(type == NS_PROVIDER_CACHE_CONSUMER_TOPIC_CID) + else if (type == NS_PROVIDER_CACHE_CONSUMER_TOPIC_CID) { NS_LOG(DEBUG, "Type is REGITSTER TOPIC"); NSCacheTopicSubData * topicData = (NSCacheTopicSubData *) newObj->data; - NSCacheElement * it = NSStorageRead(list, topicData->id); + NSCacheElement * it = NSProviderStorageRead(list, topicData->id); - if (it) - { - NS_LOG(DEBUG, "already registered for topic name"); - pthread_mutex_unlock(&NSCacheMutex); - return NS_FAIL; - } + NS_PROVIDER_DELETE_REGISTERED_TOPIC_DATA(it, topicData, newObj); } if (list->head == NULL) @@ -250,7 +250,7 @@ NSResult NSStorageWrite(NSCacheList * list, NSCacheElement * newObj) return NS_OK; } -NSResult NSStorageDestroy(NSCacheList * list) +NSResult NSProviderStorageDestroy(NSCacheList * list) { NSCacheElement * iter = list->head; NSCacheElement * next = NULL; @@ -260,14 +260,25 @@ NSResult NSStorageDestroy(NSCacheList * list) { next = (NSCacheElement *) iter->next; NSProviderDeleteCacheData(type, iter->data); - OICFree(iter); + NSOICFree(iter); iter = next; } - OICFree(list); + NSOICFree(list); return NS_OK; } +bool NSIsSameObId(NSCacheSubData * data, OCObservationId id) +{ + if (id == data->messageObId || id == data->syncObId || id == data->remote_messageObId || + id == data->remote_syncObId) + { + return true; + } + + return false; +} + bool NSProviderCompareIdCacheData(NSCacheType type, void * data, const char * id) { NS_LOG(DEBUG, "NSProviderCompareIdCacheData - IN"); @@ -277,13 +288,13 @@ bool NSProviderCompareIdCacheData(NSCacheType type, void * data, const char * id return false; } - NS_LOG_V(DEBUG, "Data(compData) = [%s]", id); + NS_LOG_V(INFO_PRIVATE, "Data(compData) = [%s]", id); if (type == NS_PROVIDER_CACHE_SUBSCRIBER) { NSCacheSubData * subData = (NSCacheSubData *) data; - NS_LOG_V(DEBUG, "Data(subData) = [%s]", subData->id); + NS_LOG_V(INFO_PRIVATE, "Data(subData) = [%s]", subData->id); if (strcmp(subData->id, id) == 0) { @@ -294,6 +305,23 @@ bool NSProviderCompareIdCacheData(NSCacheType type, void * data, const char * id NS_LOG(DEBUG, "Message Data is Not Same"); return false; } + else if (type == NS_PROVIDER_CACHE_SUBSCRIBER_OBSERVE_ID) + { + NSCacheSubData * subData = (NSCacheSubData *) data; + + NS_LOG_V(INFO_PRIVATE, "Data(subData) = [%s]", subData->id); + + OCObservationId currID = *id; + + if (NSIsSameObId(subData, currID)) + { + NS_LOG(DEBUG, "SubData is Same"); + return true; + } + + NS_LOG(DEBUG, "Message Data is Not Same"); + return false; + } else if (type == NS_PROVIDER_CACHE_REGISTER_TOPIC) { NSCacheTopicData * topicData = (NSCacheTopicData *) data; @@ -328,7 +356,7 @@ bool NSProviderCompareIdCacheData(NSCacheType type, void * data, const char * id { NSCacheTopicSubData * topicData = (NSCacheTopicSubData *) data; - NS_LOG_V(DEBUG, "Data(topicData) = [%s]", topicData->id); + NS_LOG_V(INFO_PRIVATE, "Data(topicData) = [%s]", topicData->id); if (strcmp(topicData->id, id) == 0) { @@ -352,121 +380,47 @@ NSResult NSProviderDeleteCacheData(NSCacheType type, void * data) return NS_ERROR; } - if (type == NS_PROVIDER_CACHE_SUBSCRIBER) + if (type == NS_PROVIDER_CACHE_SUBSCRIBER || type == NS_PROVIDER_CACHE_SUBSCRIBER_OBSERVE_ID) { NSCacheSubData * subData = (NSCacheSubData *) data; (subData->id)[0] = '\0'; - OICFree(subData); + NSOICFree(subData); return NS_OK; } - else if(type == NS_PROVIDER_CACHE_REGISTER_TOPIC) + else if (type == NS_PROVIDER_CACHE_REGISTER_TOPIC) { NSCacheTopicData * topicData = (NSCacheTopicData *) data; NS_LOG_V(DEBUG, "topicData->topicName = %s, topicData->state = %d", topicData->topicName, (int)topicData->state); - OICFree(topicData->topicName); + NSOICFree(topicData->topicName); + NSOICFree(topicData); } - else if(type == NS_PROVIDER_CACHE_CONSUMER_TOPIC_NAME || + else if (type == NS_PROVIDER_CACHE_CONSUMER_TOPIC_NAME || type == NS_PROVIDER_CACHE_CONSUMER_TOPIC_CID) { NSCacheTopicSubData * topicData = (NSCacheTopicSubData *) data; - OICFree(topicData->topicName); + NSOICFree(topicData->topicName); + NSOICFree(topicData); } return NS_OK; } -bool NSIsSameObId(NSCacheSubData * data, OCObservationId id) -{ - if (id == data->messageObId || id == data->syncObId || id == data->remote_messageObId || - id == data->remote_syncObId) - { - return true; - } - - return false; -} - -NSResult NSProviderDeleteSubDataFromObId(NSCacheList * list, OCObservationId id) +NSResult NSProviderStorageDelete(NSCacheList * list, const char * delId) { - if(!list || !list->head) - { - NS_LOG(INFO, "list is NULL"); - return NS_FAIL; - } - pthread_mutex_lock(&NSCacheMutex); NSCacheElement * prev = list->head; NSCacheElement * del = list->head; NSCacheType type = list->cacheType; - bool isDelete = true; - - while(isDelete) - { - NSCacheSubData * curr = (NSCacheSubData *)del->data; - - isDelete = false; - - if (NSIsSameObId(curr, id)) - { - if (del == list->head) // first object - { - if (del == list->tail) // first object (one object) - { - list->tail = del->next; - } - - list->head = del->next; - - NSProviderDeleteCacheData(type, del->data); - OICFree(del); - isDelete = true; - } - } - else - { - del = del->next; - while (del) - { - if (NSIsSameObId(curr, id)) - { - if (del == list->tail) // delete object same to last object - { - list->tail = prev; - } - - prev->next = del->next; - NSProviderDeleteCacheData(type, del->data); - OICFree(del); - isDelete = true; - break; - } - - prev = del; - del = del->next; - } - } - } - pthread_mutex_unlock(&NSCacheMutex); - return NS_OK; -} - -NSResult NSStorageDelete(NSCacheList * list, const char * delId) -{ - pthread_mutex_lock(&NSCacheMutex); - NSCacheElement * prev = list->head; - NSCacheElement * del = list->head; - - NSCacheType type = list->cacheType; - - if(!del) + if (!del) { NS_LOG(DEBUG, "list head is NULL"); + pthread_mutex_unlock(&NSCacheMutex); return NS_FAIL; } @@ -481,13 +435,14 @@ NSResult NSStorageDelete(NSCacheList * list, const char * delId) list->head = del->next; NSProviderDeleteCacheData(type, del->data); - OICFree(del); + NSOICFree(del); pthread_mutex_unlock(&NSCacheMutex); return NS_OK; } } del = del->next; + while (del) { if (NSProviderCompareIdCacheData(type, del->data, delId)) @@ -499,7 +454,7 @@ NSResult NSStorageDelete(NSCacheList * list, const char * delId) prev->next = del->next; NSProviderDeleteCacheData(type, del->data); - OICFree(del); + NSOICFree(del); pthread_mutex_unlock(&NSCacheMutex); return NS_OK; } @@ -507,6 +462,7 @@ NSResult NSStorageDelete(NSCacheList * list, const char * delId) prev = del; del = del->next; } + pthread_mutex_unlock(&NSCacheMutex); return NS_FAIL; } @@ -518,7 +474,7 @@ NSTopicLL * NSProviderGetTopicsCacheData(NSCacheList * regTopicList) NSCacheElement * iter = regTopicList->head; - if(!iter) + if (!iter) { pthread_mutex_unlock(&NSCacheMutex); return NULL; @@ -531,13 +487,19 @@ NSTopicLL * NSProviderGetTopicsCacheData(NSCacheList * regTopicList) while (iter) { NSCacheTopicData * curr = (NSCacheTopicData *) iter->data; - newTopic = (NSTopicLL *) OICMalloc(sizeof(NSTopicLL)); + + if (!newTopic) + { + pthread_mutex_unlock(&NSCacheMutex); + return NULL; + } + newTopic->state = curr->state; newTopic->next = NULL; newTopic->topicName = OICStrdup(curr->topicName); - if(!topics) + if (!topics) { iterTopic = topics = newTopic; } @@ -557,14 +519,14 @@ NSTopicLL * NSProviderGetTopicsCacheData(NSCacheList * regTopicList) } NSTopicLL * NSProviderGetConsumerTopicsCacheData(NSCacheList * regTopicList, - NSCacheList * conTopicList, char *consumerId) + NSCacheList * conTopicList, const char * consumerId) { NS_LOG(DEBUG, "NSProviderGetConsumerTopicsCacheData - IN"); pthread_mutex_lock(&NSCacheMutex); NSTopicLL * topics = NSProviderGetTopicsCacheData(regTopicList); - if(!topics) + if (!topics) { pthread_mutex_unlock(&NSCacheMutex); return NULL; @@ -573,23 +535,24 @@ NSTopicLL * NSProviderGetConsumerTopicsCacheData(NSCacheList * regTopicList, NSCacheElement * iter = conTopicList->head; conTopicList->cacheType = NS_PROVIDER_CACHE_CONSUMER_TOPIC_CID; - while(iter) + while (iter) { NSCacheTopicSubData * curr = (NSCacheTopicSubData *)iter->data; - NS_LOG_V(DEBUG, "curr->id = %s", curr->id); - NS_LOG_V(DEBUG, "curr->topicName = %s", curr->topicName); - - if(curr && strcmp(curr->id, consumerId) == 0) + if (curr && strcmp(curr->id, consumerId) == 0) { + NS_LOG_V(INFO_PRIVATE, "curr->id = %s", curr->id); + NS_LOG_V(DEBUG, "curr->topicName = %s", curr->topicName); NSTopicLL * topicIter = topics; - while(topicIter) + + while (topicIter) { - if(strcmp(topicIter->topicName, curr->topicName) == 0) + if (strcmp(topicIter->topicName, curr->topicName) == 0) { topicIter->state = NS_TOPIC_SUBSCRIBED; break; } + topicIter = topicIter->next; } } @@ -604,49 +567,28 @@ NSTopicLL * NSProviderGetConsumerTopicsCacheData(NSCacheList * regTopicList, return topics; } -size_t NSProviderGetListSize(NSCacheElement * firstElement) -{ - pthread_mutex_lock(&NSCacheMutex); - if(!firstElement) - { - pthread_mutex_unlock(&NSCacheMutex); - return 0; - } - - int cnt = 0; - - NSCacheElement * iter = firstElement; - - while(iter) - { - cnt++; - iter = iter->next; - } - - pthread_mutex_unlock(&NSCacheMutex); - return cnt; -} - bool NSProviderIsTopicSubScribed(NSCacheElement * conTopicList, char * cId, char * topicName) { pthread_mutex_lock(&NSCacheMutex); - if(!conTopicList || !cId || !topicName) + if (!conTopicList || !cId || !topicName) { pthread_mutex_unlock(&NSCacheMutex); return false; } NSCacheElement * iter = conTopicList; - while(iter) + + while (iter) { NSCacheTopicSubData * curr = (NSCacheTopicSubData *) iter->data; - if( (strcmp(curr->id, cId) == 0) && (strcmp(curr->topicName, topicName) == 0) ) + if ( (strcmp(curr->id, cId) == 0) && (strcmp(curr->topicName, topicName) == 0) ) { pthread_mutex_unlock(&NSCacheMutex); return true; } + iter = iter->next; } @@ -662,10 +604,10 @@ NSResult NSProviderDeleteConsumerTopic(NSCacheList * conTopicList, char * cId = topicSubData->id; char * topicName = topicSubData->topicName; - if(!conTopicList || !cId || !topicName) + if (!conTopicList || !cId || !topicName) { - return NS_ERROR; pthread_mutex_unlock(&NSCacheMutex); + return NS_ERROR; } NSCacheElement * prev = conTopicList->head; @@ -673,19 +615,21 @@ NSResult NSProviderDeleteConsumerTopic(NSCacheList * conTopicList, NSCacheType type = conTopicList->cacheType; - if(!del) + if (!del) { NS_LOG(DEBUG, "list head is NULL"); + pthread_mutex_unlock(&NSCacheMutex); return NS_FAIL; } NSCacheTopicSubData * curr = (NSCacheTopicSubData *) del->data; - NS_LOG_V(DEBUG, "compareid = %s", cId); + NS_LOG_V(INFO_PRIVATE, "compareid = %s", cId); NS_LOG_V(DEBUG, "comparetopicName = %s", topicName); - NS_LOG_V(DEBUG, "curr->id = %s", curr->id); + NS_LOG_V(INFO_PRIVATE, "curr->id = %s", curr->id); NS_LOG_V(DEBUG, "curr->topicName = %s", curr->topicName); - if( (strncmp(curr->id, cId, NS_UUID_STRING_SIZE) == 0) && (strcmp(curr->topicName, topicName) == 0) ) + if ( (strncmp(curr->id, cId, NS_UUID_STRING_SIZE) == 0) && + (strcmp(curr->topicName, topicName) == 0) ) { if (del == conTopicList->head) // first object { @@ -696,7 +640,7 @@ NSResult NSProviderDeleteConsumerTopic(NSCacheList * conTopicList, conTopicList->head = del->next; NSProviderDeleteCacheData(type, del->data); - OICFree(del); + NSOICFree(del); pthread_mutex_unlock(&NSCacheMutex); return NS_OK; } @@ -704,10 +648,12 @@ NSResult NSProviderDeleteConsumerTopic(NSCacheList * conTopicList, curr = NULL; del = del->next; + while (del) { curr = (NSCacheTopicSubData *) del->data; - if( (strncmp(curr->id, cId, NS_UUID_STRING_SIZE) == 0) && (strcmp(curr->topicName, topicName) == 0) ) + if ( (strncmp(curr->id, cId, NS_UUID_STRING_SIZE) == 0) && + (strcmp(curr->topicName, topicName) == 0) ) { if (del == conTopicList->tail) // delete object same to last object { @@ -716,7 +662,7 @@ NSResult NSProviderDeleteConsumerTopic(NSCacheList * conTopicList, prev->next = del->next; NSProviderDeleteCacheData(type, del->data); - OICFree(del); + NSOICFree(del); pthread_mutex_unlock(&NSCacheMutex); return NS_OK; } @@ -724,6 +670,7 @@ NSResult NSProviderDeleteConsumerTopic(NSCacheList * conTopicList, prev = del; del = del->next; } + pthread_mutex_unlock(&NSCacheMutex); return NS_FAIL; }