added cacheadapter interface and memorycache of notification.
[platform/upstream/iotivity.git] / service / notification / src / provider / NSProviderInterface.c
index f7ab929..16d98b3 100644 (file)
 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
 \r
 #include "NSProviderInterface.h"\r
-#include "NSQueueScheduler.h"\r
+#include "NSProviderScheduler.h"\r
 #include "NSProviderListener.h"\r
+#include "NSCacheAdapter.h"\r
 #include "cautilinterface.h"\r
+#include "NSProviderSubscription.h"\r
+#include "NSProviderNotification.h"\r
 \r
-bool initSchedule = false;\r
+bool initProvider = false;\r
 static NSSubscribeRequestCallback g_subscribeRequestCb = NULL;\r
 static NSSyncCallback g_syncCb = NULL;\r
+pthread_mutex_t NSCacheMutex;\r
 \r
 void NSRegisterSubscribeRequestCb(NSSubscribeRequestCallback subscribeRequestCb)\r
 {\r
@@ -42,9 +46,9 @@ void NSSubscribeRequestCb(NSConsumer *consumer)
     g_subscribeRequestCb(consumer);\r
 }\r
 \r
-void NSSyncCb(NSProvider *provider, NSSync *sync)\r
+void NSSyncCb(NSSync *sync)\r
 {\r
-    g_syncCb(provider, sync);\r
+    g_syncCb(sync);\r
 }\r
 \r
 NSResult NSStartProvider(NSAccessPolicy policy, NSSubscribeRequestCallback subscribeRequestCb,\r
@@ -54,9 +58,11 @@ NSResult NSStartProvider(NSAccessPolicy policy, NSSubscribeRequestCallback subsc
 \r
     NSSetSubscriptionAcceptPolicy(policy);\r
 \r
-    if (!initSchedule)\r
+    if (!initProvider)\r
     {\r
-        initSchedule = true;\r
+        initProvider = true;\r
+\r
+        NSSetList();\r
         NSInitScheduler();\r
         NSStartScheduler();\r
     }\r
@@ -73,11 +79,18 @@ NSResult NSStartProvider(NSAccessPolicy policy, NSSubscribeRequestCallback subsc
     return NS_OK;\r
 }\r
 \r
+void NSSetList()\r
+{\r
+    pthread_mutex_init(&NSCacheMutex, NULL);\r
+    NSInitSubscriptionList();\r
+    NSInitMessageList();\r
+}\r
+\r
 NSResult NSStopProvider()\r
 {\r
-    NSRegisterSubscribeRequestCb(NULL);\r
-    NSRegisterSyncCb(NULL);\r
-    initSchedule = false;\r
+    NSRegisterSubscribeRequestCb((NSSubscribeRequestCallback)NULL);\r
+    NSRegisterSyncCb((NSSyncCallback)NULL);\r
+    initProvider = false;\r
     return NS_OK;\r
 }\r
 \r
@@ -90,22 +103,11 @@ NSResult NSSendNotification(NSMessage *msg)
     return NS_OK;\r
 }\r
 \r
-NSResult NSReadCheck(NSMessage *msg)\r
+NSResult NSProviderReadCheck(NSMessage *msg)\r
 {\r
     OIC_LOG(INFO, INTERFACE_TAG, "Read Sync");\r
 \r
-    NSTask * task = (NSTask*) OICMalloc(sizeof(NSTask));\r
-    if (!task)\r
-    {\r
-        OIC_LOG(ERROR, LISTENER_TAG, PCF("Fail to allocate memory"));\r
-        return NS_ERROR;\r
-    }\r
-\r
-    task->nextTask = NULL;\r
-    task->taskData = msg;\r
-    task->taskType = TASK_SEND_READ;\r
-\r
-    NSPushQueue(NOTIFICATION_SCHEDULER, task->taskType, task);\r
+    NSPushQueue(NOTIFICATION_SCHEDULER, TASK_SEND_READ, msg);\r
 \r
     return NS_OK;\r
 }\r
@@ -114,11 +116,19 @@ NSResult NSAccept(NSConsumer *consumer, bool accepted)
 {\r
     OIC_LOG(INFO, INTERFACE_TAG, "Response Acceptance");\r
 \r
-    NSPushQueue(SUBSCRIPTION_SCHEDULER, TASK_SEND_ALLOW, consumer);\r
+    if(accepted)\r
+    {\r
+        NSPushQueue(SUBSCRIPTION_SCHEDULER, TASK_SEND_ALLOW, consumer);\r
+    }\r
+    else\r
+    {\r
+        NSPushQueue(SUBSCRIPTION_SCHEDULER, TASK_SEND_DENY, consumer);\r
+    }\r
 \r
     return NS_OK;\r
 }\r
 \r
+/*\r
 NSResult NSGetConsumerList(uint8_t *list, uint32_t size)\r
 {\r
     OIC_LOG(INFO, INTERFACE_TAG, "Get consumer list");\r
@@ -127,13 +137,13 @@ NSResult NSGetConsumerList(uint8_t *list, uint32_t size)
     size = NSGetNumberOfObsList();\r
 \r
     return NS_OK;\r
-}\r
+}*/\r
 \r
 void * NSResponseSchedule(void * ptr)\r
 {\r
     if (ptr == NULL)\r
     {\r
-        OIC_LOG(ERROR, INTERFACE_TAG, "Fail to response to User");\r
+        OIC_LOG(INFO, INTERFACE_TAG, "Init NSResponseSchedule");\r
     }\r
 \r
     while (NSIsRunning[RESPONSE_SCHEDULER])\r
@@ -153,8 +163,9 @@ void * NSResponseSchedule(void * ptr)
                     printf("before - TASK_CB_SUBSCRIPTION :\n");\r
                     OCEntityHandlerRequest * request = (OCEntityHandlerRequest*)node->taskData;\r
                     NSConsumer consumer;\r
+\r
                     consumer.mId = strdup(request->devAddr.addr);\r
-                    int * obId = (int *) malloc (sizeof(int));\r
+                    int * obId = (int *) OICMalloc(sizeof(int));\r
                     *obId = request->obsInfo.obsId;\r
                     consumer.mUserData = obId;\r
 \r
@@ -165,7 +176,7 @@ void * NSResponseSchedule(void * ptr)
                 case TASK_CB_SYNC:\r
                 {\r
                     NSSync * sync = (NSSync*)node->taskData;\r
-                    NSSyncCb(NULL, sync);\r
+                    NSSyncCb(sync);\r
                     break;\r
                 }\r
                 default:\r