Fix Asan build errors (#281)
[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 "NSProviderMemoryCache.h"\r
27 #include "NSProviderCallbackResponse.h"\r
28 #include "oic_malloc.h"\r
29 #include "oic_string.h"\r
30 #include "cautilinterface.h"\r
31 #include "NSProviderSystem.h"\r
32 #include "oic_time.h"\r
33 \r
34 static NSSubscribeRequestCallback g_subscribeRequestCb = NULL;\r
35 static NSProviderSyncInfoCallback g_syncCb = NULL;\r
36 \r
37 extern pthread_mutex_t nsInitMutex;\r
38 \r
39 void NSRegisterSubscribeRequestCb(NSSubscribeRequestCallback subscribeRequestCb)\r
40 {\r
41     NS_LOG(DEBUG, "NSRegisterSubscribeRequestCb - IN");\r
42     g_subscribeRequestCb = subscribeRequestCb;\r
43     NS_LOG(DEBUG, "NSRegisterSubscribeRequestCb - OUT");\r
44 }\r
45 \r
46 void NSRegisterSyncCb(NSProviderSyncInfoCallback syncCb)\r
47 {\r
48     NS_LOG(DEBUG, "NSRegisterSyncCb - IN");\r
49     g_syncCb = syncCb;\r
50     NS_LOG(DEBUG, "NSRegisterSyncCb - OUT");\r
51 }\r
52 \r
53 void NSSubscribeRequestCb(NSConsumer *consumer)\r
54 {\r
55     NS_LOG(DEBUG, "NSSubscribeRequestCb - IN");\r
56     g_subscribeRequestCb(consumer);\r
57     NS_LOG(DEBUG, "NSSubscribeRequestCb - OUT");\r
58 }\r
59 \r
60 void NSSyncCb(NSSyncInfo *sync)\r
61 {\r
62     NS_LOG(DEBUG, "NSSyncCb - IN");\r
63     g_syncCb(sync);\r
64     NS_LOG(DEBUG, "NSSyncCb - OUT");\r
65 }\r
66 \r
67 void * NSCallbackResponseSchedule(void * ptr)\r
68 {\r
69     if (ptr == NULL)\r
70     {\r
71         NS_LOG(DEBUG, "Create NSReponseSchedule");\r
72     }\r
73 \r
74     while (NSIsRunning[CALLBACK_RESPONSE_SCHEDULER])\r
75     {\r
76         sem_wait(&NSSemaphore[CALLBACK_RESPONSE_SCHEDULER]);\r
77         pthread_mutex_lock(&NSMutex[CALLBACK_RESPONSE_SCHEDULER]);\r
78 \r
79         if (NSHeadMsg[CALLBACK_RESPONSE_SCHEDULER] != NULL)\r
80         {\r
81             NSTask *node = NSHeadMsg[CALLBACK_RESPONSE_SCHEDULER];\r
82             NSHeadMsg[CALLBACK_RESPONSE_SCHEDULER] = node->nextTask;\r
83 \r
84             switch (node->taskType)\r
85             {\r
86                 case TASK_CB_SUBSCRIPTION:\r
87                 {\r
88                     NS_LOG(DEBUG, "CASE TASK_CB_SUBSCRIPTION : ");\r
89 \r
90                     OCEntityHandlerRequest * request = (OCEntityHandlerRequest*)node->taskData;\r
91                     NSConsumer * consumer = (NSConsumer *)OICMalloc(sizeof(NSConsumer));\r
92 \r
93                     char * copyQuery = OICStrdup(request->query);\r
94                     char * consumerId = NSGetValueFromQuery(copyQuery, NS_QUERY_CONSUMER_ID);\r
95 \r
96                     if (consumerId)\r
97                     {\r
98                         OICStrcpy(consumer->consumerId, UUID_STRING_SIZE, consumerId);\r
99                         NSSubscribeRequestCb(consumer);\r
100                     }\r
101 \r
102                     NSOICFree(copyQuery);\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             NSOICFree(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