changed log in provider side
[platform/upstream/iotivity.git] / service / notification / src / provider / NSProviderInterface.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 "NSCacheAdapter.h"\r
25 #include "cautilinterface.h"\r
26 #include "NSProviderSubscription.h"\r
27 #include "NSProviderNotification.h"\r
28 \r
29 bool initProvider = false;\r
30 static NSSubscribeRequestCallback g_subscribeRequestCb = NULL;\r
31 static NSSyncCallback g_syncCb = NULL;\r
32 pthread_mutex_t NSCacheMutex;\r
33 \r
34 void NSRegisterSubscribeRequestCb(NSSubscribeRequestCallback subscribeRequestCb)\r
35 {\r
36     NS_LOG(DEBUG, "NSRegisterSubscribeRequestCb - IN");\r
37     g_subscribeRequestCb = subscribeRequestCb;\r
38     NS_LOG(DEBUG, "NSRegisterSubscribeRequestCb - OUT");\r
39 }\r
40 \r
41 void  NSRegisterSyncCb(NSSyncCallback syncCb)\r
42 {\r
43     NS_LOG(DEBUG, "NSRegisterSyncCb - IN");\r
44     g_syncCb = syncCb;\r
45     NS_LOG(DEBUG, "NSRegisterSyncCb - OUT");\r
46 }\r
47 \r
48 void NSSubscribeRequestCb(NSConsumer *consumer)\r
49 {\r
50     NS_LOG(DEBUG, "NSSubscribeRequestCb - IN");\r
51     g_subscribeRequestCb(consumer);\r
52     NS_LOG(DEBUG, "NSSubscribeRequestCb - OUT");\r
53 }\r
54 \r
55 void NSSyncCb(NSSync *sync)\r
56 {\r
57     NS_LOG(DEBUG, "NSSyncCb - IN");\r
58     g_syncCb(sync);\r
59     NS_LOG(DEBUG, "NSSyncCb - OUT");\r
60 }\r
61 \r
62 NSResult NSStartProvider(NSAccessPolicy policy, NSSubscribeRequestCallback subscribeRequestCb,\r
63         NSSyncCallback syncCb)\r
64 {\r
65     OIC_LOG(INFO, INTERFACE_TAG, "Notification Service Start Provider..");\r
66     NS_LOG(DEBUG, "NSStartProvider - IN");\r
67     NSSetSubscriptionAcceptPolicy(policy);\r
68 \r
69     if (!initProvider)\r
70     {\r
71         NS_LOG(DEBUG, "Init Provider");\r
72         initProvider = true;\r
73 \r
74         NSSetList();\r
75         NSInitScheduler();\r
76         NSStartScheduler();\r
77     }\r
78 \r
79     NSRegisterSubscribeRequestCb(subscribeRequestCb);\r
80     NSRegisterSyncCb(syncCb);\r
81 \r
82     CARegisterNetworkMonitorHandler(NSProviderAdapterStateListener,\r
83             NSProviderConnectionStateListener);\r
84 \r
85     NSPushQueue(DISCOVERY_SCHEDULER, TASK_START_PRESENCE, NULL);\r
86     NSPushQueue(DISCOVERY_SCHEDULER, TASK_REGISTER_RESOURCE, NULL);\r
87 \r
88     NS_LOG(DEBUG, "NSStartProvider - OUT");\r
89 \r
90     return NS_OK;\r
91 }\r
92 \r
93 void NSSetList()\r
94 {\r
95     NS_LOG(DEBUG, "NSSetList - IN");\r
96     pthread_mutex_init(&NSCacheMutex, NULL);\r
97     NSInitSubscriptionList();\r
98     NSInitMessageList();\r
99     NS_LOG(DEBUG, "NSSetList - OUT");\r
100 }\r
101 \r
102 NSResult NSStopProvider()\r
103 {\r
104     NS_LOG(DEBUG, "NSStopProvider - IN");\r
105     NSRegisterSubscribeRequestCb((NSSubscribeRequestCallback)NULL);\r
106     NSRegisterSyncCb((NSSyncCallback)NULL);\r
107     initProvider = false;\r
108     NS_LOG(DEBUG, "NSStopProvider - OUT");\r
109     return NS_OK;\r
110 }\r
111 \r
112 NSResult NSSendNotification(NSMessage *msg)\r
113 {\r
114     OIC_LOG(INFO, INTERFACE_TAG, "Send Notification");\r
115     NS_LOG(DEBUG, "NSSendNotification - IN");\r
116     NSPushQueue(NOTIFICATION_SCHEDULER, TASK_SEND_NOTIFICATION, msg);\r
117     NS_LOG(DEBUG, "NSSendNotification - OUT");\r
118     return NS_OK;\r
119 }\r
120 \r
121 NSResult NSProviderReadCheck(NSMessage *msg)\r
122 {\r
123     OIC_LOG(INFO, INTERFACE_TAG, "Read Sync");\r
124     NS_LOG(DEBUG, "NSProviderReadCheck - IN");\r
125     NSPushQueue(NOTIFICATION_SCHEDULER, TASK_SEND_READ, msg);\r
126     NS_LOG(DEBUG, "NSProviderReadCheck - OUT");\r
127     return NS_OK;\r
128 }\r
129 \r
130 NSResult NSAccept(NSConsumer *consumer, bool accepted)\r
131 {\r
132     OIC_LOG(INFO, INTERFACE_TAG, "Response Acceptance");\r
133     NS_LOG(DEBUG, "NSAccept - IN");\r
134 \r
135     if(accepted)\r
136     {\r
137         NS_LOG(DEBUG, "accepted is true - ALLOW");\r
138         NSPushQueue(SUBSCRIPTION_SCHEDULER, TASK_SEND_ALLOW, consumer);\r
139 \r
140     }\r
141     else\r
142     {\r
143         NS_LOG(DEBUG, "accepted is false - DENY");\r
144         NSPushQueue(SUBSCRIPTION_SCHEDULER, TASK_SEND_DENY, consumer);\r
145     }\r
146 \r
147     NS_LOG(DEBUG, "NSAccept - OUT");\r
148     return NS_OK;\r
149 }\r
150 \r
151 void * NSResponseSchedule(void * ptr)\r
152 {\r
153     if (ptr == NULL)\r
154     {\r
155         OIC_LOG(INFO, INTERFACE_TAG, "Init NSResponseSchedule");\r
156         NS_LOG(DEBUG, "Create NSReponseSchedule");\r
157     }\r
158 \r
159     while (NSIsRunning[RESPONSE_SCHEDULER])\r
160     {\r
161         sem_wait(&NSSemaphore[RESPONSE_SCHEDULER]);\r
162         pthread_mutex_lock(&NSMutex[RESPONSE_SCHEDULER]);\r
163 \r
164         if (NSHeadMsg[RESPONSE_SCHEDULER] != NULL)\r
165         {\r
166             NSTask *node = NSHeadMsg[RESPONSE_SCHEDULER];\r
167             NSHeadMsg[RESPONSE_SCHEDULER] = node->nextTask;\r
168 \r
169             switch (node->taskType)\r
170             {\r
171                 case TASK_CB_SUBSCRIPTION:\r
172                 {\r
173                     NS_LOG(DEBUG, "CASE TASK_CB_SUBSCRIPTION : ");\r
174                     OCEntityHandlerRequest * request = (OCEntityHandlerRequest*)node->taskData;\r
175                     NSConsumer consumer;\r
176 \r
177                     consumer.mId = strdup(request->devAddr.addr);\r
178                     int * obId = (int *) OICMalloc(sizeof(int));\r
179                     *obId = request->obsInfo.obsId;\r
180                     consumer.mUserData = obId;\r
181 \r
182                     NSSubscribeRequestCb(&consumer);\r
183 \r
184                     break;\r
185                 }\r
186                 case TASK_CB_SYNC:\r
187                 {\r
188                     NS_LOG(DEBUG, "CASE TASK_CB_SYNC : ");\r
189                     NSSync * sync = (NSSync*)node->taskData;\r
190                     NSSyncCb(sync);\r
191                     break;\r
192                 }\r
193                 default:\r
194                     OIC_LOG(INFO, INTERFACE_TAG, "Response to User");\r
195 \r
196                     // TODO: NSSubscribeRequestCb\r
197 \r
198                     // TODO: NSSyncCb\r
199 \r
200                     break;\r
201 \r
202             }\r
203             OICFree(node);\r
204         }\r
205 \r
206         pthread_mutex_unlock(&NSMutex[RESPONSE_SCHEDULER]);\r
207 \r
208     }\r
209     return NULL;\r
210 }\r
211 \r
212 NSResult NSTestStartPresence()\r
213 {\r
214     NSPushQueue(DISCOVERY_SCHEDULER, TASK_START_PRESENCE, NULL);\r
215     return NS_OK;\r
216 }\r
217 \r
218 NSResult NSTestStopPresence()\r
219 {\r
220     NSPushQueue(DISCOVERY_SCHEDULER, TASK_STOP_PRESENCE, NULL);\r
221     return NS_OK;\r
222 }\r
223 \r
224 \r