\r
typedef struct\r
{\r
- char providerId[37];\r
- char * providerName;\r
+ char providerId[37];\r
+ char * providerName;\r
} NSProviderInfo;\r
\r
#endif /* _NS_STRUCTS_H_ */\r
{\r
NS_LOG(DEBUG, "NSEntityHandlerMessageCb - OC_OBSERVE_FLAG");\r
\r
- if (OC_OBSERVE_REGISTER == entityHandlerRequest->obsInfo.action)\r
+ OCObserveAction ocObAction = entityHandlerRequest->obsInfo.action;\r
+\r
+ if (ocObAction == OC_OBSERVE_REGISTER)\r
{\r
NS_LOG(DEBUG, "NSEntityHandlerMessageCb - OC_OBSERVE_REGISTER");\r
NS_LOG_V(DEBUG, "NSEntityHandlerMessageCb\n"\r
NSPushQueue(SUBSCRIPTION_SCHEDULER, TASK_RECV_SUBSCRIPTION,\r
NSCopyOCEntityHandlerRequest(entityHandlerRequest));\r
}\r
+ else if(ocObAction == OC_OBSERVE_DEREGISTER)\r
+ {\r
+ NS_LOG(DEBUG, "NSEntityHandlerMessageCb - OC_OBSERVE_DEREGISTER");\r
+ NS_LOG_V(DEBUG, "NSEntityHandlerMessageCb\n - "\r
+ "Deregister Message observerID : %d\n", entityHandlerRequest->obsInfo.obsId);\r
+ NSPushQueue(SUBSCRIPTION_SCHEDULER, TASK_RECV_UNSUBSCRIPTION,\r
+ NSCopyOCEntityHandlerRequest(entityHandlerRequest));\r
+ }\r
}\r
\r
OCPayloadDestroy(response.payload);\r
\r
NS_LOG(DEBUG, "NSEntityHandlerSyncCb - OC_OBSERVE_FLAG");\r
\r
- if (OC_OBSERVE_REGISTER == entityHandlerRequest->obsInfo.action)\r
+\r
+ OCObserveAction ocObAction = entityHandlerRequest->obsInfo.action;\r
+\r
+ if (ocObAction == OC_OBSERVE_REGISTER)\r
{\r
NS_LOG(DEBUG, "NSEntityHandlerSyncCb - OC_OBSERVE_REGISTER");\r
NS_LOG_V(DEBUG, "NSEntityHandlerSyncCb\n - "\r
NSPushQueue(SUBSCRIPTION_SCHEDULER, TASK_SYNC_SUBSCRIPTION,\r
NSCopyOCEntityHandlerRequest(entityHandlerRequest));\r
}\r
+ else if(ocObAction == OC_OBSERVE_DEREGISTER)\r
+ {\r
+ NS_LOG(DEBUG, "NSEntityHandlerSyncCb - OC_OBSERVE_DEREGISTER");\r
+ NS_LOG_V(DEBUG, "NSEntityHandlerSyncCb\n - "\r
+ "Deregister Sync observerID : %d\n", entityHandlerRequest->obsInfo.obsId);\r
+ NSPushQueue(SUBSCRIPTION_SCHEDULER, TASK_RECV_UNSUBSCRIPTION,\r
+ NSCopyOCEntityHandlerRequest(entityHandlerRequest));\r
+ }\r
}\r
\r
OCPayloadDestroy(response.payload);\r
}
OCStackResult ocstackResult = OCNotifyListOfObservers(rHandle, obArray, obCount, payload,
- OC_LOW_QOS);
+ OC_HIGH_QOS);
NS_LOG_V(DEBUG, "Message ocstackResult = %d", ocstackResult);
}
OCStackResult ocstackResult = OCNotifyListOfObservers(rHandle, obArray,
- obCount, payload, OC_LOW_QOS);
+ obCount, payload, OC_HIGH_QOS);
NS_LOG_V(DEBUG, "Sync ocstackResult = %d", ocstackResult);
NSSendSync((NSSyncInfo*) node->taskData);
NSPushQueue(CALLBACK_RESPONSE_SCHEDULER, TASK_CB_SYNC, node->taskData);
break;
-
default:
NS_LOG(ERROR, "Unknown type message");
break;
{\r
NS_LOG(DEBUG, "NSHandleUnsubscription - IN");\r
\r
- char * id = NSGetValueFromQuery(OICStrdup(entityHandlerRequest->query), NS_QUERY_CONSUMER_ID);\r
-\r
- if(!id)\r
- {\r
- NSFreeOCEntityHandlerRequest(entityHandlerRequest);\r
- NS_LOG(ERROR, "Invalid ConsumerID");\r
- return;\r
- }\r
-\r
- NSCacheElement * element = (NSCacheElement *) OICMalloc(sizeof(NSCacheElement));\r
- NSCacheSubData * subData = (NSCacheSubData *) OICMalloc(sizeof(NSCacheSubData));\r
-\r
- OICStrcpy(subData->id, UUID_STRING_SIZE, id);\r
- subData->isWhite = false;\r
- subData->messageObId = entityHandlerRequest->obsInfo.obsId;\r
-\r
- element->data = (void*) subData;\r
- element->next = NULL;\r
-\r
- NS_LOG_V(DEBUG, "SubList IP[ID] = [%s]", subData->id);\r
- NS_LOG_V(DEBUG, "SubList observation ID = [%d]", subData->syncObId);\r
-\r
- if (NSStorageWrite(consumerSubList, element) != NS_OK)\r
- {\r
- NS_LOG(ERROR, "fail to write consumer white list");\r
- }\r
-\r
- NS_LOG(DEBUG, "NSHandleUnsubscription - IN");\r
+ NSProviderDeleteSubDataFromObId(consumerSubList, entityHandlerRequest->obsInfo.obsId);\r
\r
NSFreeOCEntityHandlerRequest(entityHandlerRequest);\r
+\r
+ NS_LOG(DEBUG, "NSHandleUnsubscription - OUT");\r
}\r
\r
void NSAskAcceptanceToUser(OCEntityHandlerRequest *entityHandlerRequest)\r
{\r
NSCacheSubData * subData = (NSCacheSubData *) data;\r
\r
-\r
NS_LOG_V(DEBUG, "Data(subData) = [%s]", subData->id);\r
NS_LOG_V(DEBUG, "Data(compData) = [%s]", id);\r
\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
+ return true;\r
+ return false;\r
+}\r
+\r
+NSResult NSProviderDeleteSubDataFromObId(NSCacheList * list, OCObservationId id)\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
+ {\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
+ list->tail = del->next;\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
+ list->tail = prev;\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
+ }\r
+ pthread_mutex_unlock(&NSCacheMutex);\r
+ return NS_OK;\r
+}\r
\r
NSResult NSCacheUpdateSubScriptionState(NSCacheList *, char *, bool);\r
\r
+NSResult NSProviderDeleteSubDataFromObId(NSCacheList * list, OCObservationId id);\r
+\r
pthread_mutex_t NSCacheMutex;\r
\r
#endif /* _NS_PROVIDER_CACHEADAPTER__H_ */\r