+//******************************************************************\r
+//\r
+// Copyright 2016 Samsung Electronics All Rights Reserved.\r
+//\r
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
+//\r
+// Licensed under the Apache License, Version 2.0 (the "License");\r
+// you may not use this file except in compliance with the License.\r
+// You may obtain a copy of the License at\r
+//\r
+// http://www.apache.org/licenses/LICENSE-2.0\r
+//\r
+// Unless required by applicable law or agreed to in writing, software\r
+// distributed under the License is distributed on an "AS IS" BASIS,\r
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+// See the License for the specific language governing permissions and\r
+// limitations under the License.\r
+//\r
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
+\r
+#include "NSProvider.h"\r
+#include "NSProviderScheduler.h"\r
+#include "NSProviderListener.h"\r
+#include "NSProviderSubscription.h"\r
+#include "NSProviderNotification.h"\r
+#include "NSStorageAdapter.h"\r
+#include "NSProviderMemoryCache.h"\r
+#include "NSProviderCallbackResponse.h"\r
+#include "oic_malloc.h"\r
+#include "oic_string.h"\r
+#include "cautilinterface.h"\r
+#include "NSProviderSystem.h"\r
+#include "oic_time.h"\r
+\r
+static NSSubscribeRequestCallback g_subscribeRequestCb = NULL;\r
+static NSProviderSyncInfoCallback g_syncCb = NULL;\r
+\r
+pthread_mutex_t nsInitMutex;\r
+\r
+void NSRegisterSubscribeRequestCb(NSSubscribeRequestCallback subscribeRequestCb)\r
+{\r
+ NS_LOG(DEBUG, "NSRegisterSubscribeRequestCb - IN");\r
+ g_subscribeRequestCb = subscribeRequestCb;\r
+ NS_LOG(DEBUG, "NSRegisterSubscribeRequestCb - OUT");\r
+}\r
+\r
+void NSRegisterSyncCb(NSProviderSyncInfoCallback syncCb)\r
+{\r
+ NS_LOG(DEBUG, "NSRegisterSyncCb - IN");\r
+ g_syncCb = syncCb;\r
+ NS_LOG(DEBUG, "NSRegisterSyncCb - OUT");\r
+}\r
+\r
+void NSSubscribeRequestCb(NSConsumer *consumer)\r
+{\r
+ NS_LOG(DEBUG, "NSSubscribeRequestCb - IN");\r
+ g_subscribeRequestCb(consumer);\r
+ NS_LOG(DEBUG, "NSSubscribeRequestCb - OUT");\r
+}\r
+\r
+void NSSyncCb(NSSyncInfo *sync)\r
+{\r
+ NS_LOG(DEBUG, "NSSyncCb - IN");\r
+ g_syncCb(sync);\r
+ NS_LOG(DEBUG, "NSSyncCb - OUT");\r
+}\r
+\r
+void * NSCallbackResponseSchedule(void * ptr)\r
+{\r
+ if (ptr == NULL)\r
+ {\r
+ NS_LOG(DEBUG, "Create NSReponseSchedule");\r
+ }\r
+\r
+ while (NSIsRunning[CALLBACK_RESPONSE_SCHEDULER])\r
+ {\r
+ sem_wait(&NSSemaphore[CALLBACK_RESPONSE_SCHEDULER]);\r
+ pthread_mutex_lock(&NSMutex[CALLBACK_RESPONSE_SCHEDULER]);\r
+\r
+ if (NSHeadMsg[CALLBACK_RESPONSE_SCHEDULER] != NULL)\r
+ {\r
+ NSTask *node = NSHeadMsg[CALLBACK_RESPONSE_SCHEDULER];\r
+ NSHeadMsg[CALLBACK_RESPONSE_SCHEDULER] = node->nextTask;\r
+\r
+ switch (node->taskType)\r
+ {\r
+ case TASK_CB_SUBSCRIPTION:\r
+ {\r
+ NS_LOG(DEBUG, "CASE TASK_CB_SUBSCRIPTION : ");\r
+\r
+ OCEntityHandlerRequest * request = (OCEntityHandlerRequest*)node->taskData;\r
+ NSConsumer * consumer = (NSConsumer *)OICMalloc(sizeof(NSConsumer));\r
+\r
+ char * consumerId = NSGetValueFromQuery(OICStrdup(request->query),\r
+ NS_QUERY_CONSUMER_ID);\r
+\r
+ if(consumerId)\r
+ {\r
+ OICStrcpy(consumer->consumerId, UUID_STRING_SIZE, consumerId);\r
+ NSSubscribeRequestCb(consumer);\r
+ }\r
+\r
+ NSFreeConsumer(consumer);\r
+ NSFreeOCEntityHandlerRequest(request);\r
+\r
+ break;\r
+ }\r
+ case TASK_CB_SYNC:\r
+ {\r
+ NS_LOG(DEBUG, "CASE TASK_CB_SYNC : ");\r
+ NSSyncInfo * sync = (NSSyncInfo*)node->taskData;\r
+ NSSyncCb(NSDuplicateSync(sync));\r
+ NSFreeSync(sync);\r
+ break;\r
+ }\r
+ default:\r
+ NS_LOG(DEBUG, "No Task Type");\r
+ break;\r
+ }\r
+ OICFree(node);\r
+ }\r
+\r
+ pthread_mutex_unlock(&NSMutex[CALLBACK_RESPONSE_SCHEDULER]);\r
+ }\r
+\r
+ NS_LOG(DEBUG, "Destroy NSResponseSchedule");\r
+ return NULL;\r
+}\r
+\r