1 //******************************************************************
\r
3 // Copyright 2016 Samsung Electronics All Rights Reserved.
\r
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
\r
7 // Licensed under the Apache License, Version 2.0 (the "License");
\r
8 // you may not use this file except in compliance with the License.
\r
9 // You may obtain a copy of the License at
\r
11 // http://www.apache.org/licenses/LICENSE-2.0
\r
13 // Unless required by applicable law or agreed to in writing, software
\r
14 // distributed under the License is distributed on an "AS IS" BASIS,
\r
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
16 // See the License for the specific language governing permissions and
\r
17 // limitations under the License.
\r
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
\r
20 #include "NSProviderMemoryCache.h"
\r
22 NSCacheList * NSCacheCreate()
\r
24 pthread_mutex_lock(&NSCacheMutex);
\r
25 NSCacheList * newList = (NSCacheList *) OICMalloc(sizeof(NSCacheList));
\r
28 pthread_mutex_unlock(&NSCacheMutex);
\r
32 newList->head = newList->tail = NULL;
\r
34 pthread_mutex_unlock(&NSCacheMutex);
\r
39 NSCacheElement * NSCacheRead(NSCacheList * list, char * findId)
\r
41 pthread_mutex_lock(&NSCacheMutex);
\r
42 NSCacheElement * iter = list->head;
\r
43 NSCacheElement * next = NULL;
\r
44 NSCacheType type = list->cacheType;
\r
46 printf("NS_ findId = %s\n", findId);
\r
52 printf("NS_ findId2 = %s\n", findId);
\r
53 pthread_mutex_unlock(&NSCacheMutex);
\r
55 if (NSProviderCompareIdCacheData(type, iter->data, findId))
\r
57 pthread_mutex_unlock(&NSCacheMutex);
\r
64 pthread_mutex_unlock(&NSCacheMutex);
\r
69 NSResult NSCacheUpdateSubScriptionState(NSCacheList * list, NSCacheSubData * subData)
\r
71 pthread_mutex_lock(&NSCacheMutex);
\r
73 NSCacheType type = list->cacheType;
\r
75 printf("NS_ NSCacheWrite\n");
\r
77 if (subData == NULL)
\r
79 printf("NS_ NSCacheWrite - newObj is NULL\n");
\r
80 pthread_mutex_unlock(&NSCacheMutex);
\r
84 printf("NS_ findId0 - 0 = %s\n", subData->id);
\r
85 pthread_mutex_unlock(&NSCacheMutex);
\r
86 NSCacheElement * it = NSCacheRead(list, subData->id);
\r
87 pthread_mutex_lock(&NSCacheMutex);
\r
88 printf("NS_ findId0 -1 = %s\n", subData->id);
\r
91 printf("NS_ findId1 = %s\n", subData->id);
\r
92 NSCacheSubData * itData = (NSCacheSubData *) it->data;
\r
93 printf("NS_ findId2 = %s\n", subData->id);
\r
94 if (strcmp(itData->id, subData->id) == 0)
\r
96 printf("NS_ findId3_subdata_id = %s\n", subData->id);
\r
97 printf("NS_ findId3_subdata_messageobId = %d\n", subData->messageObId);
\r
98 printf("NS_ findId3_subdata_syncobId = %d\n", subData->syncObId);
\r
99 printf("NS_ findId3_subdata_isWhite = %d\n", subData->isWhite);
\r
101 printf("NS_ findId3_itdata_id = %s\n", itData->id);
\r
102 printf("NS_ findId3_itdata_messageobId = %d\n", itData->messageObId);
\r
103 printf("NS_ findId3_itdata_isWhite = %d\n", itData->isWhite);
\r
105 itData->isWhite = subData->isWhite;
\r
107 printf("_NS : PROVIDER_CACHE_SUBSCRIBER UPDATE\n");
\r
109 pthread_mutex_unlock(&NSCacheMutex);
\r
114 pthread_mutex_unlock(&NSCacheMutex);
\r
118 NSResult NSCacheWrite(NSCacheList * list, NSCacheElement * newObj)
\r
120 pthread_mutex_lock(&NSCacheMutex);
\r
122 NSCacheType type = list->cacheType;
\r
124 printf("NS_ NSCacheWrite\n");
\r
126 if (newObj == NULL)
\r
128 printf("NS_ NSCacheWrite - newObj is NULL\n");
\r
129 pthread_mutex_unlock(&NSCacheMutex);
\r
133 if (type == NS_PROVIDER_CACHE_SUBSCRIBER)
\r
135 NSCacheSubData * subData = (NSCacheSubData *) newObj->data;
\r
137 printf("NS_ findId0 - 0 = %s\n", subData->id);
\r
138 pthread_mutex_unlock(&NSCacheMutex);
\r
139 NSCacheElement * it = NSCacheRead(list, subData->id);
\r
140 pthread_mutex_lock(&NSCacheMutex);
\r
141 printf("NS_ findId0 -1 = %s\n", subData->id);
\r
144 printf("NS_ findId1 = %s\n", subData->id);
\r
145 NSCacheSubData * itData = (NSCacheSubData *) it->data;
\r
146 printf("NS_ findId2 = %s\n", subData->id);
\r
147 if (strcmp(itData->id, subData->id) == 0)
\r
149 printf("NS_ findId3_subdata_id = %s\n", subData->id);
\r
150 printf("NS_ findId3_subdata_messageobId = %d\n", subData->messageObId);
\r
151 printf("NS_ findId3_subdata_syncobId = %d\n", subData->syncObId);
\r
152 printf("NS_ findId3_subdata_isWhite = %d\n", subData->isWhite);
\r
154 printf("NS_ findId3_itdata_id = %s\n", itData->id);
\r
155 printf("NS_ findId3_itdata_messageobId = %d\n", itData->messageObId);
\r
156 printf("NS_ findId3_itdata_isWhite = %d\n", itData->isWhite);
\r
157 if (itData->messageObId == 0)
\r
159 itData->messageObId = subData->messageObId;
\r
162 if (itData->syncObId == 0)
\r
164 itData->syncObId = subData->syncObId;
\r
167 //itData->isWhite = subData->isWhite;
\r
169 printf("_NS : PROVIDER_CACHE_SUBSCRIBER UPDATE\n");
\r
171 pthread_mutex_unlock(&NSCacheMutex);
\r
178 else if (type == NS_PROVIDER_CACHE_MESSAGE)
\r
180 NSCacheMsgData * msgData = (NSCacheMsgData *) newObj->data;
\r
182 NSCacheElement * it = NSCacheRead(list, msgData->id);
\r
185 NSCacheMsgData * itData = (NSCacheMsgData *) it->data;
\r
187 if (strcmp(itData->id, msgData->id) == 0)
\r
190 itData->messageType = msgData->messageType;
\r
191 printf("_NS : PROVIDER_CACHE_MESSAGE UPDATE\n");
\r
192 pthread_mutex_unlock(&NSCacheMutex);
\r
199 printf("NS_ berfore list->head == NULL\n");
\r
200 if (list->head == NULL)
\r
202 list->head = list->tail = newObj;
\r
203 printf("NS_ list->head == NULL\n");
\r
204 pthread_mutex_unlock(&NSCacheMutex);
\r
208 list->tail = list->tail->next = newObj;
\r
209 printf("NS_ list->head == not NULL\n");
\r
210 pthread_mutex_unlock(&NSCacheMutex);
\r
214 NSResult NSCacheDelete(NSCacheList * list, char * delId)
\r
217 pthread_mutex_lock(&NSCacheMutex);
\r
218 NSCacheElement * prev = list->head;
\r
219 NSCacheElement * del = list->head;
\r
221 NSCacheType type = list->cacheType;
\r
223 if (NSProviderCompareIdCacheData(type, del->data, delId))
\r
225 if (del == list->head) // first object
\r
227 if (del == list->tail) // first object (one object)
\r
228 list->tail = del->next;
\r
230 list->head = del->next;
\r
232 NSProviderDeleteCacheData(type, del->data);
\r
234 pthread_mutex_unlock(&NSCacheMutex);
\r
242 if (NSProviderCompareIdCacheData(type, del->data, delId))
\r
244 if (del == list->tail) // delete object same to last object
\r
247 prev->next = del->next;
\r
248 NSProviderDeleteCacheData(type, del->data);
\r
250 pthread_mutex_unlock(&NSCacheMutex);
\r
257 pthread_mutex_unlock(&NSCacheMutex);
\r
261 NSResult NSCacheDestroy(NSCacheList * list)
\r
263 NSCacheElement * iter = list->head;
\r
264 NSCacheElement * next = NULL;
\r
266 NSCacheType type = list->cacheType;
\r
270 next = (NSCacheElement *) iter->next;
\r
272 NSProviderDeleteCacheData(type, iter->data);
\r
283 bool NSProviderCompareIdCacheData(NSCacheType type, void * data, char * id)
\r
290 if (type == NS_PROVIDER_CACHE_SUBSCRIBER)
\r
292 NSCacheSubData * subData = (NSCacheSubData *) data;
\r
294 printf("NS_ subdata->id = %s\n", subData->id);
\r
295 printf("NS_ id = %s\n", id);
\r
297 if (strcmp(subData->id, id) == 0)
\r
304 else if (type == NS_PROVIDER_CACHE_MESSAGE)
\r
306 NSCacheMsgData * msgData = (NSCacheMsgData *) data;
\r
308 if (strcmp(msgData->id, id) == 0)
\r
319 NSResult NSProviderDeleteCacheData(NSCacheType type, void * data)
\r
326 if (type == NS_PROVIDER_CACHE_SUBSCRIBER)
\r
328 NSCacheSubData * subData = (NSCacheSubData *) data;
\r
331 OICFree(subData->id);
\r
332 subData->id = NULL;
\r
339 else if (type == NS_PROVIDER_CACHE_MESSAGE)
\r
341 NSCacheMsgData * msgData = (NSCacheMsgData *) data;
\r
345 OICFree(msgData->id);
\r
346 msgData->id = NULL;
\r
349 if (msgData->nsMessage)
\r
351 NSFreeMessage(msgData->nsMessage);
\r