Merge branch 'cloud-interface'
[platform/upstream/iotivity.git] / service / notification / src / provider / NSProviderCallbackResponse.c
1 //******************************************************************\r
2 //\r
3 // Copyright 2016 Samsung Electronics All Rights Reserved.\r
4 //\r
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
6 //\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
10 //\r
11 //      http://www.apache.org/licenses/LICENSE-2.0\r
12 //\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
18 //\r
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
20 \r
21 #include "NSProviderInterface.h"\r
22 #include "NSProviderScheduler.h"\r
23 #include "NSProviderListener.h"\r
24 #include "NSProviderSubscription.h"\r
25 #include "NSProviderNotification.h"\r
26 #include "NSStorageAdapter.h"\r
27 #include "NSProviderMemoryCache.h"\r
28 #include "NSProviderCallbackResponse.h"\r
29 #include "oic_malloc.h"\r
30 #include "oic_string.h"\r
31 #include "cautilinterface.h"\r
32 #include "NSProviderSystem.h"\r
33 #include "oic_time.h"\r
34 \r
35 static NSSubscribeRequestCallback g_subscribeRequestCb = NULL;\r
36 static NSProviderSyncInfoCallback g_syncCb = NULL;\r
37 \r
38 pthread_mutex_t nsInitMutex;\r
39 \r
40 void NSRegisterSubscribeRequestCb(NSSubscribeRequestCallback subscribeRequestCb)\r
41 {\r
42     NS_LOG(DEBUG, "NSRegisterSubscribeRequestCb - IN");\r
43     g_subscribeRequestCb = subscribeRequestCb;\r
44     NS_LOG(DEBUG, "NSRegisterSubscribeRequestCb - OUT");\r
45 }\r
46 \r
47 void  NSRegisterSyncCb(NSProviderSyncInfoCallback syncCb)\r
48 {\r
49     NS_LOG(DEBUG, "NSRegisterSyncCb - IN");\r
50     g_syncCb = syncCb;\r
51     NS_LOG(DEBUG, "NSRegisterSyncCb - OUT");\r
52 }\r
53 \r
54 void NSSubscribeRequestCb(NSConsumer *consumer)\r
55 {\r
56     NS_LOG(DEBUG, "NSSubscribeRequestCb - IN");\r
57     g_subscribeRequestCb(consumer);\r
58     NS_LOG(DEBUG, "NSSubscribeRequestCb - OUT");\r
59 }\r
60 \r
61 void NSSyncCb(NSSyncInfo *sync)\r
62 {\r
63     NS_LOG(DEBUG, "NSSyncCb - IN");\r
64     g_syncCb(sync);\r
65     NS_LOG(DEBUG, "NSSyncCb - OUT");\r
66 }\r
67 \r
68 void * NSCallbackResponseSchedule(void * ptr)\r
69 {\r
70     if (ptr == NULL)\r
71     {\r
72         NS_LOG(DEBUG, "Create NSReponseSchedule");\r
73     }\r
74 \r
75     while (NSIsRunning[CALLBACK_RESPONSE_SCHEDULER])\r
76     {\r
77         sem_wait(&NSSemaphore[CALLBACK_RESPONSE_SCHEDULER]);\r
78         pthread_mutex_lock(&NSMutex[CALLBACK_RESPONSE_SCHEDULER]);\r
79 \r
80         if (NSHeadMsg[CALLBACK_RESPONSE_SCHEDULER] != NULL)\r
81         {\r
82             NSTask *node = NSHeadMsg[CALLBACK_RESPONSE_SCHEDULER];\r
83             NSHeadMsg[CALLBACK_RESPONSE_SCHEDULER] = node->nextTask;\r
84 \r
85             switch (node->taskType)\r
86             {\r
87                 case TASK_CB_SUBSCRIPTION:\r
88                 {\r
89                     NS_LOG(DEBUG, "CASE TASK_CB_SUBSCRIPTION : ");\r
90 \r
91                     OCEntityHandlerRequest * request = (OCEntityHandlerRequest*)node->taskData;\r
92                     NSConsumer * consumer = (NSConsumer *)OICMalloc(sizeof(NSConsumer));\r
93 \r
94                     char * consumerId = NSGetValueFromQuery(OICStrdup(request->query),\r
95                             NS_QUERY_CONSUMER_ID);\r
96 \r
97                     if(consumerId)\r
98                     {\r
99                         OICStrcpy(consumer->consumerId, UUID_STRING_SIZE, consumerId);\r
100                         NSSubscribeRequestCb(consumer);\r
101                     }\r
102 \r
103                     NSFreeConsumer(consumer);\r
104                     NSFreeOCEntityHandlerRequest(request);\r
105 \r
106                     break;\r
107                 }\r
108                 case TASK_CB_SYNC:\r
109                 {\r
110                     NS_LOG(DEBUG, "CASE TASK_CB_SYNC : ");\r
111                     NSSyncInfo * sync = (NSSyncInfo*)node->taskData;\r
112                     NSSyncCb(NSDuplicateSync(sync));\r
113                     NSFreeSync(sync);\r
114                     break;\r
115                 }\r
116                 default:\r
117                     NS_LOG(DEBUG, "No Task Type");\r
118                     break;\r
119             }\r
120             OICFree(node);\r
121         }\r
122 \r
123         pthread_mutex_unlock(&NSMutex[CALLBACK_RESPONSE_SCHEDULER]);\r
124     }\r
125 \r
126     NS_LOG(DEBUG, "Destroy NSResponseSchedule");\r
127     return NULL;\r
128 }\r
129 \r