do code optimization of EntityHandler.
[platform/upstream/iotivity.git] / service / notification / src / provider / NSProviderListener.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 "NSProviderListener.h"\r
22 \r
23 OCEntityHandlerResult NSEntityHandlerNotificationCb(OCEntityHandlerFlag flag,\r
24         OCEntityHandlerRequest *entityHandlerRequest, void* callback)\r
25 {\r
26     NS_LOG(DEBUG, "NSEntityHandlerNotificationCb - IN");\r
27 \r
28     OCEntityHandlerResult ehResult = OC_EH_OK;\r
29 \r
30     (void)callback;\r
31 \r
32     if (!entityHandlerRequest)\r
33     {\r
34         NS_LOG(ERROR, "Invalid request pointer");\r
35         return OC_EH_ERROR;\r
36     }\r
37 \r
38     if (flag & OC_REQUEST_FLAG)\r
39     {\r
40         NS_LOG(DEBUG, "Flag includes OC_REQUEST_FLAG");\r
41 \r
42         if (OC_REST_GET == entityHandlerRequest->method)\r
43         {\r
44             NS_LOG(DEBUG, "NSEntityHandlerNotificationCb - OC_REST_GET");\r
45 \r
46             NSPushQueue(SUBSCRIPTION_SCHEDULER, TASK_SEND_POLICY,\r
47                     NSCopyOCEntityHandlerRequest(entityHandlerRequest));\r
48 \r
49         }\r
50         else\r
51         {\r
52             NS_LOG_V (DEBUG, "Received method %d from client", entityHandlerRequest->method);\r
53         }\r
54     }\r
55 \r
56     NS_LOG(DEBUG, "NSEntityHandlerNotificationCb - OUT");\r
57     return ehResult;\r
58 }\r
59 \r
60 OCEntityHandlerResult NSEntityHandlerMessageCb(OCEntityHandlerFlag flag,\r
61         OCEntityHandlerRequest *entityHandlerRequest, void* callback)\r
62 {\r
63     NS_LOG(DEBUG, "NSEntityHandlerMessageCb - IN");\r
64 \r
65     OCEntityHandlerResult ehResult = OC_EH_OK;\r
66 \r
67     (void)callback;\r
68 \r
69     if (!entityHandlerRequest)\r
70     {\r
71         NS_LOG (ERROR,"Invalid request pointer");\r
72         return OC_EH_ERROR;\r
73     }\r
74 \r
75     if (flag & OC_REQUEST_FLAG)\r
76     {\r
77         NS_LOG(DEBUG, "Flag includes OC_REQUEST_FLAG");\r
78         NS_LOG_V(DEBUG, "Received method %d from client", entityHandlerRequest->method);\r
79     }\r
80 \r
81     if (flag & OC_OBSERVE_FLAG)\r
82     {\r
83         NS_LOG(DEBUG, "NSEntityHandlerMessageCb - OC_OBSERVE_FLAG");\r
84 \r
85         OCObserveAction ocObAction = entityHandlerRequest->obsInfo.action;\r
86 \r
87         if (ocObAction == OC_OBSERVE_REGISTER)\r
88         {\r
89             NS_LOG(DEBUG, "NSEntityHandlerMessageCb - OC_OBSERVE_REGISTER");\r
90             NS_LOG_V(DEBUG, "NSEntityHandlerMessageCb\n"\r
91                     "Register message observerID : %d\n", entityHandlerRequest->obsInfo.obsId);\r
92             NSPushQueue(SUBSCRIPTION_SCHEDULER, TASK_RECV_SUBSCRIPTION,\r
93                     NSCopyOCEntityHandlerRequest(entityHandlerRequest));\r
94         }\r
95         else if(ocObAction == OC_OBSERVE_DEREGISTER)\r
96         {\r
97             NS_LOG(DEBUG, "NSEntityHandlerMessageCb - OC_OBSERVE_DEREGISTER");\r
98             NS_LOG_V(DEBUG, "NSEntityHandlerMessageCb\n - "\r
99                     "Deregister Message observerID : %d\n", entityHandlerRequest->obsInfo.obsId);\r
100             NSPushQueue(SUBSCRIPTION_SCHEDULER, TASK_RECV_UNSUBSCRIPTION,\r
101                     NSCopyOCEntityHandlerRequest(entityHandlerRequest));\r
102         }\r
103     }\r
104 \r
105     NS_LOG(DEBUG, "NSEntityHandlerMessageCb - OUT");\r
106     return ehResult;\r
107 }\r
108 \r
109 OCEntityHandlerResult NSEntityHandlerSyncCb(OCEntityHandlerFlag flag,\r
110         OCEntityHandlerRequest *entityHandlerRequest, void* callback)\r
111 {\r
112     NS_LOG(DEBUG, "NSEntityHandlerSyncCb - IN");\r
113     OCEntityHandlerResult ehResult = OC_EH_OK;\r
114 \r
115     (void)callback;\r
116 \r
117     if (!entityHandlerRequest)\r
118     {\r
119         NS_LOG(ERROR, "Invalid request pointer");\r
120         return OC_EH_ERROR;\r
121     }\r
122 \r
123     if (flag & OC_REQUEST_FLAG)\r
124     {\r
125         NS_LOG(DEBUG, "Flag includes OC_REQUEST_FLAG");\r
126 \r
127         if (OC_REST_POST == entityHandlerRequest->method)\r
128         {\r
129             /** Receive sync data from consumer which read or dismiss notification message.\r
130                            And broadcast the sync data to all subscribers including provider app\r
131                            to synchronize the notification message status. */\r
132 \r
133             NS_LOG(DEBUG, "NSEntityHandlerSyncCb - OC_REST_POST");\r
134 \r
135             NSPushQueue(NOTIFICATION_SCHEDULER, TASK_RECV_READ,\r
136                     NSGetSyncInfo(entityHandlerRequest->payload));\r
137 \r
138         }\r
139 \r
140         NS_LOG_V(DEBUG, "Received method %d from client", entityHandlerRequest->method);\r
141     }\r
142 \r
143     if (flag & OC_OBSERVE_FLAG)\r
144     {\r
145         /** Requested by consumers to synchronize notification message status.\r
146             Store the observer IDs to storage or cache */\r
147 \r
148         NS_LOG(DEBUG, "NSEntityHandlerSyncCb - OC_OBSERVE_FLAG");\r
149 \r
150         OCObserveAction ocObAction = entityHandlerRequest->obsInfo.action;\r
151 \r
152         if (ocObAction == OC_OBSERVE_REGISTER)\r
153         {\r
154             NS_LOG(DEBUG, "NSEntityHandlerSyncCb - OC_OBSERVE_REGISTER");\r
155             NS_LOG_V(DEBUG, "NSEntityHandlerSyncCb\n - "\r
156                     "Register Sync observerID : %d\n", entityHandlerRequest->obsInfo.obsId);\r
157             NSPushQueue(SUBSCRIPTION_SCHEDULER, TASK_SYNC_SUBSCRIPTION,\r
158                     NSCopyOCEntityHandlerRequest(entityHandlerRequest));\r
159         }\r
160         else if(ocObAction == OC_OBSERVE_DEREGISTER)\r
161         {\r
162             NS_LOG(DEBUG, "NSEntityHandlerSyncCb - OC_OBSERVE_DEREGISTER");\r
163             NS_LOG_V(DEBUG, "NSEntityHandlerSyncCb\n - "\r
164                     "Deregister Sync observerID : %d\n", entityHandlerRequest->obsInfo.obsId);\r
165             NSPushQueue(SUBSCRIPTION_SCHEDULER, TASK_RECV_UNSUBSCRIPTION,\r
166                     NSCopyOCEntityHandlerRequest(entityHandlerRequest));\r
167         }\r
168     }\r
169 \r
170     NS_LOG(DEBUG, "NSEntityHandlerSyncCb - OUT");\r
171     return ehResult;\r
172 }\r
173 \r
174 void NSProviderConnectionStateListener(const CAEndpoint_t * info, bool connected)\r
175 {\r
176 \r
177     NS_LOG(DEBUG, "NSProviderConnectionStateListener - IN");\r
178 \r
179     if (connected)\r
180     {\r
181         NS_LOG(DEBUG, "CONNECTED");\r
182 \r
183         // Set Connection State\r
184         NSSetProviderConnectionState(CONNECTED);\r
185 \r
186         // Start Presence\r
187         NSPushQueue(DISCOVERY_SCHEDULER, TASK_START_PRESENCE, NULL);\r
188 \r
189         if(info->adapter == CA_ADAPTER_TCP)\r
190         {\r
191             NS_LOG_V(DEBUG, "TCP Connected remote address: %s:%d", info->addr, info->port);\r
192         }\r
193     }\r
194     else\r
195     {\r
196 \r
197         NS_LOG(DEBUG, "DISCONNECTED");\r
198 \r
199         // Set Connection State\r
200         NSSetProviderConnectionState(DISCONNECTED);\r
201 \r
202         if(info->adapter == CA_ADAPTER_TCP)\r
203         {\r
204             NS_LOG_V(DEBUG, "TCP Disconnected remote address: %s:%d", info->addr, info->port);\r
205         }\r
206     }\r
207 \r
208     NS_LOG(DEBUG, "NSProviderConnectionStateListener - OUT");\r
209 }\r
210 \r
211 void NSProviderAdapterStateListener(CATransportAdapter_t adapter, bool enabled)\r
212 {\r
213     (void)adapter;\r
214 \r
215     NS_LOG(DEBUG, "NSProviderAdapterStateListener - IN");\r
216 \r
217     if (enabled)\r
218     {\r
219         NS_LOG(DEBUG, "CONNECTED");\r
220 \r
221         // Set Connection State\r
222         NSSetProviderConnectionState(CONNECTED);\r
223 \r
224         // Start Presence\r
225         NSPushQueue(DISCOVERY_SCHEDULER, TASK_START_PRESENCE, NULL);\r
226     }\r
227     else\r
228     {\r
229 \r
230         NS_LOG(DEBUG, "DISCONNECTED");\r
231 \r
232         // Set Connection State\r
233         NSSetProviderConnectionState(DISCONNECTED);\r
234     }\r
235 \r
236     NS_LOG(DEBUG, "NSProviderAdapterStateListener - OUT");\r
237 }\r
238 \r