1 //******************************************************************
\r
3 // Copyright 2016 Samsung Electronics All Rights Reserved.
\r
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
\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
11 // http://www.apache.org/licenses/LICENSE-2.0
\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
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
\r
21 #include "NSProviderListener.h"
\r
23 OCEntityHandlerResult NSEntityHandlerNotificationCb(OCEntityHandlerFlag flag,
\r
24 OCEntityHandlerRequest *entityHandlerRequest, void* callback)
\r
26 NS_LOG(DEBUG, "NSEntityHandlerNotificationCb - IN");
\r
28 OCEntityHandlerResult ehResult = OC_EH_OK;
\r
29 OCEntityHandlerResponse response =
\r
30 { 0, 0, OC_EH_ERROR, 0, 0,
\r
37 if (!entityHandlerRequest)
\r
39 NS_LOG(ERROR, "Invalid request pointer");
\r
43 // Initialize certain response fields
\r
44 response.numSendVendorSpecificHeaderOptions = 0;
\r
45 memset(response.sendVendorSpecificHeaderOptions, 0,
\r
46 sizeof response.sendVendorSpecificHeaderOptions);
\r
47 memset(response.resourceUri, 0, sizeof response.resourceUri);
\r
48 OCRepPayload* payload = NULL;
\r
50 if (flag & OC_REQUEST_FLAG)
\r
52 NS_LOG(DEBUG, "Flag includes OC_REQUEST_FLAG");
\r
54 if (OC_REST_GET == entityHandlerRequest->method)
\r
56 NS_LOG(DEBUG, "NSEntityHandlerNotificationCb - OC_REST_GET");
\r
58 NSPushQueue(SUBSCRIPTION_SCHEDULER, TASK_SEND_POLICY,
\r
59 NSCopyOCEntityHandlerRequest(entityHandlerRequest));
\r
60 ehResult = OC_EH_OK;
\r
63 else if (OC_REST_PUT == entityHandlerRequest->method)
\r
65 NS_LOG(DEBUG, "NSEntityHandlerNotificationCb - OC_REST_PUT");
\r
66 ehResult = OC_EH_OK;
\r
68 else if (OC_REST_POST == entityHandlerRequest->method)
\r
70 NS_LOG(DEBUG, "NSEntityHandlerNotificationCb - OC_REST_POST");
\r
71 ehResult = OC_EH_OK;
\r
73 else if (OC_REST_DELETE == entityHandlerRequest->method)
\r
75 NS_LOG(DEBUG, "NSEntityHandlerNotificationCb - OC_REST_DELETE");
\r
76 ehResult = OC_EH_OK;
\r
80 NS_LOG_V (DEBUG, "Received unsupported method %d from client",
\r
81 entityHandlerRequest->method);
\r
82 ehResult = OC_EH_OK;
\r
86 OCPayloadDestroy(response.payload);
\r
87 NS_LOG(DEBUG, "NSEntityHandlerNotificationCb - OUT");
\r
91 OCEntityHandlerResult NSEntityHandlerMessageCb(OCEntityHandlerFlag flag,
\r
92 OCEntityHandlerRequest *entityHandlerRequest, void* callback)
\r
94 NS_LOG(DEBUG, "NSEntityHandlerMessageCb - IN");
\r
96 OCEntityHandlerResult ehResult = OC_EH_OK;
\r
97 OCEntityHandlerResponse response =
\r
98 { 0, 0, OC_EH_ERROR, 0, 0,
\r
104 // Validate pointer
\r
105 if (!entityHandlerRequest)
\r
107 NS_LOG (ERROR,"Invalid request pointer");
\r
108 return OC_EH_ERROR;
\r
111 // Initialize certain response fields
\r
112 response.numSendVendorSpecificHeaderOptions = 0;
\r
113 memset(response.sendVendorSpecificHeaderOptions, 0,
\r
114 sizeof response.sendVendorSpecificHeaderOptions);
\r
115 memset(response.resourceUri, 0, sizeof response.resourceUri);
\r
116 OCRepPayload* payload = NULL;
\r
118 if (flag & OC_REQUEST_FLAG)
\r
120 NS_LOG(DEBUG, "Flag includes OC_REQUEST_FLAG");
\r
122 if (OC_REST_GET == entityHandlerRequest->method)
\r
124 NS_LOG(DEBUG, "NSEntityHandlerMessageCb - OC_REST_GET");
\r
125 ehResult = OC_EH_OK;
\r
127 else if (OC_REST_PUT == entityHandlerRequest->method)
\r
129 NS_LOG(DEBUG, "NSEntityHandlerMessageCb - OC_REST_PUT");
\r
130 ehResult = OC_EH_OK;
\r
132 else if (OC_REST_POST == entityHandlerRequest->method)
\r
134 NS_LOG(DEBUG, "NSEntityHandlerMessageCb - OC_REST_POST");
\r
135 ehResult = OC_EH_OK;
\r
137 else if (OC_REST_DELETE == entityHandlerRequest->method)
\r
139 NS_LOG(DEBUG, "NSEntityHandlerMessageCb - OC_REST_DELETE");
\r
140 ehResult = OC_EH_OK;
\r
144 NS_LOG_V(DEBUG, "Received unsupported method %d from client",
\r
145 entityHandlerRequest->method);
\r
146 ehResult = OC_EH_OK;
\r
150 if (flag & OC_OBSERVE_FLAG)
\r
152 NS_LOG(DEBUG, "NSEntityHandlerMessageCb - OC_OBSERVE_FLAG");
\r
154 OCObserveAction ocObAction = entityHandlerRequest->obsInfo.action;
\r
156 if (ocObAction == OC_OBSERVE_REGISTER)
\r
158 NS_LOG(DEBUG, "NSEntityHandlerMessageCb - OC_OBSERVE_REGISTER");
\r
159 NS_LOG_V(DEBUG, "NSEntityHandlerMessageCb\n"
\r
160 "Register message observerID : %d\n", entityHandlerRequest->obsInfo.obsId);
\r
161 NSPushQueue(SUBSCRIPTION_SCHEDULER, TASK_RECV_SUBSCRIPTION,
\r
162 NSCopyOCEntityHandlerRequest(entityHandlerRequest));
\r
164 else if(ocObAction == OC_OBSERVE_DEREGISTER)
\r
166 NS_LOG(DEBUG, "NSEntityHandlerMessageCb - OC_OBSERVE_DEREGISTER");
\r
167 NS_LOG_V(DEBUG, "NSEntityHandlerMessageCb\n - "
\r
168 "Deregister Message observerID : %d\n", entityHandlerRequest->obsInfo.obsId);
\r
169 NSPushQueue(SUBSCRIPTION_SCHEDULER, TASK_RECV_UNSUBSCRIPTION,
\r
170 NSCopyOCEntityHandlerRequest(entityHandlerRequest));
\r
174 OCPayloadDestroy(response.payload);
\r
175 NS_LOG(DEBUG, "NSEntityHandlerMessageCb - OUT");
\r
179 OCEntityHandlerResult NSEntityHandlerSyncCb(OCEntityHandlerFlag flag,
\r
180 OCEntityHandlerRequest *entityHandlerRequest, void* callback)
\r
182 NS_LOG(DEBUG, "NSEntityHandlerSyncCb - IN");
\r
183 OCEntityHandlerResult ehResult = OC_EH_OK;
\r
184 OCEntityHandlerResponse response =
\r
185 { 0, 0, OC_EH_ERROR, 0, 0,
\r
191 // Validate pointer
\r
192 if (!entityHandlerRequest)
\r
194 NS_LOG(ERROR, "Invalid request pointer");
\r
195 return OC_EH_ERROR;
\r
198 // Initialize certain response fields
\r
199 response.numSendVendorSpecificHeaderOptions = 0;
\r
200 memset(response.sendVendorSpecificHeaderOptions, 0,
\r
201 sizeof response.sendVendorSpecificHeaderOptions);
\r
202 memset(response.resourceUri, 0, sizeof response.resourceUri);
\r
203 OCRepPayload* payload = NULL;
\r
205 if (flag & OC_REQUEST_FLAG)
\r
207 NS_LOG(DEBUG, "Flag includes OC_REQUEST_FLAG");
\r
209 if (OC_REST_GET == entityHandlerRequest->method)
\r
211 NS_LOG(DEBUG, "NSEntityHandlerSyncCb - OC_REST_GET");
\r
212 ehResult = OC_EH_OK;
\r
214 else if (OC_REST_PUT == entityHandlerRequest->method)
\r
216 NS_LOG(DEBUG, "NSEntityHandlerSyncCb - OC_REST_PUT");
\r
217 ehResult = OC_EH_OK;
\r
219 else if (OC_REST_POST == entityHandlerRequest->method)
\r
221 /** Receive sync data from consumer which read or dismiss notification message.
\r
222 And broadcast the sync data to all subscribers including provider app
\r
223 to synchronize the notification message status. */
\r
225 NS_LOG(DEBUG, "NSEntityHandlerSyncCb - OC_REST_POST");
\r
227 NSPushQueue(NOTIFICATION_SCHEDULER, TASK_RECV_READ,
\r
228 NSGetSyncInfo(entityHandlerRequest->payload));
\r
229 ehResult = OC_EH_OK;
\r
231 else if (OC_REST_DELETE == entityHandlerRequest->method)
\r
233 NS_LOG(DEBUG, "Received OC_REST_DELETE from client");
\r
234 ehResult = OC_EH_OK;
\r
238 NS_LOG_V(DEBUG, "Received unsupported method %d from client",
\r
239 entityHandlerRequest->method);
\r
240 ehResult = OC_EH_OK;
\r
244 if (flag & OC_OBSERVE_FLAG)
\r
246 /** Requested by consumers to synchronize notification message status.
\r
247 Store the observer IDs to storage or cache */
\r
249 NS_LOG(DEBUG, "NSEntityHandlerSyncCb - OC_OBSERVE_FLAG");
\r
251 OCObserveAction ocObAction = entityHandlerRequest->obsInfo.action;
\r
253 if (ocObAction == OC_OBSERVE_REGISTER)
\r
255 NS_LOG(DEBUG, "NSEntityHandlerSyncCb - OC_OBSERVE_REGISTER");
\r
256 NS_LOG_V(DEBUG, "NSEntityHandlerSyncCb\n - "
\r
257 "Register Sync observerID : %d\n", entityHandlerRequest->obsInfo.obsId);
\r
258 NSPushQueue(SUBSCRIPTION_SCHEDULER, TASK_SYNC_SUBSCRIPTION,
\r
259 NSCopyOCEntityHandlerRequest(entityHandlerRequest));
\r
261 else if(ocObAction == OC_OBSERVE_DEREGISTER)
\r
263 NS_LOG(DEBUG, "NSEntityHandlerSyncCb - OC_OBSERVE_DEREGISTER");
\r
264 NS_LOG_V(DEBUG, "NSEntityHandlerSyncCb\n - "
\r
265 "Deregister Sync observerID : %d\n", entityHandlerRequest->obsInfo.obsId);
\r
266 NSPushQueue(SUBSCRIPTION_SCHEDULER, TASK_RECV_UNSUBSCRIPTION,
\r
267 NSCopyOCEntityHandlerRequest(entityHandlerRequest));
\r
271 OCPayloadDestroy(response.payload);
\r
272 NS_LOG(DEBUG, "NSEntityHandlerSyncCb - OUT");
\r
276 void NSProviderConnectionStateListener(const CAEndpoint_t * info, bool connected)
\r
279 NS_LOG(DEBUG, "NSProviderConnectionStateListener - IN");
\r
283 NS_LOG(DEBUG, "CONNECTED");
\r
285 // Set Connection State
\r
286 NSSetProviderConnectionState(CONNECTED);
\r
289 NSPushQueue(DISCOVERY_SCHEDULER, TASK_START_PRESENCE, NULL);
\r
291 if(info->adapter == CA_ADAPTER_TCP)
\r
293 NS_LOG_V(DEBUG, "TCP Connected remote address: %s:%d", info->addr, info->port);
\r
299 NS_LOG(DEBUG, "DISCONNECTED");
\r
301 // Set Connection State
\r
302 NSSetProviderConnectionState(DISCONNECTED);
\r
304 if(info->adapter == CA_ADAPTER_TCP)
\r
306 NS_LOG_V(DEBUG, "TCP Disconnected remote address: %s:%d", info->addr, info->port);
\r
310 NS_LOG(DEBUG, "NSProviderConnectionStateListener - OUT");
\r
313 void NSProviderAdapterStateListener(CATransportAdapter_t adapter, bool enabled)
\r
317 NS_LOG(DEBUG, "NSProviderAdapterStateListener - IN");
\r
321 NS_LOG(DEBUG, "CONNECTED");
\r
323 // Set Connection State
\r
324 NSSetProviderConnectionState(CONNECTED);
\r
327 NSPushQueue(DISCOVERY_SCHEDULER, TASK_START_PRESENCE, NULL);
\r
332 NS_LOG(DEBUG, "DISCONNECTED");
\r
334 // Set Connection State
\r
335 NSSetProviderConnectionState(DISCONNECTED);
\r
338 NS_LOG(DEBUG, "NSProviderAdapterStateListener - OUT");
\r