1 //******************************************************************
3 // Copyright 2016 Samsung Electronics All Rights Reserved.
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7 // Licensed under the Apache License, Version 2.0 (the "License");
8 // you may not use this file except in compliance with the License.
9 // You may obtain a copy of the License at
11 // http://www.apache.org/licenses/LICENSE-2.0
13 // Unless required by applicable law or agreed to in writing, software
14 // distributed under the License is distributed on an "AS IS" BASIS,
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 // See the License for the specific language governing permissions and
17 // limitations under the License.
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
21 #include "NSProviderNotification.h"
23 NSResult NSInitMessageList()
25 NS_LOG(DEBUG, "NSInitMessageList - IN");
27 messageList = NSStorageCreate();
28 messageList->cacheType = NS_PROVIDER_CACHE_MESSAGE;
30 NS_LOG(DEBUG, "NSInitMessageList - OUT");
34 NSResult NSSetMessagePayload(NSMessage *msg, OCRepPayload** msgPayload)
36 NS_LOG(DEBUG, "NSSetMessagePayload - IN");
38 *msgPayload = OCRepPayloadCreate();
42 NS_LOG(ERROR, "Failed to allocate payload");
46 OCRepPayloadSetUri(*msgPayload, NS_COLLECTION_MESSAGE_URI);
48 OCRepPayloadSetPropInt(msgPayload, NS_ATTRIBUTE_MESSAGE_ID, msg->messageId);
49 NSDuplicateSetPropertyString(msgPayload, NS_ATTRIBUTE_TITLE, msg->title);
50 NSDuplicateSetPropertyString(msgPayload, NS_ATTRIBUTE_TEXT, msg->contentText);
51 NSDuplicateSetPropertyString(msgPayload, NS_ATTRIBUTE_SOURCE, msg->sourceName);
53 NS_LOG(DEBUG, "NSSetMessagePayload - OUT");
57 NSResult NSSetSyncPayload(NSSyncInfo *sync, OCRepPayload** syncPayload)
59 NS_LOG(DEBUG, "NSSetSyncPayload - IN");
61 *syncPayload = OCRepPayloadCreate();
65 NS_LOG(ERROR, "Failed to allocate payload");
69 OCRepPayloadSetUri(*syncPayload, NS_COLLECTION_SYNC_URI);
71 NSDuplicateSetPropertyString(syncPayload, NS_ATTRIBUTE_PROVIDER_ID, sync->providerId);
72 OCRepPayloadSetPropInt(syncPayload, NS_ATTRIBUTE_MESSAGE_ID, sync->messageId);
73 OCRepPayloadSetPropInt(*syncPayload, NS_ATTRIBUTE_STATE, sync->state);
75 NS_LOG(DEBUG, "NSSetSyncPayload - OUT");
79 NSResult NSSendNotification(NSMessage *msg)
81 NS_LOG(DEBUG, "NSSendMessage - IN");
83 OCResourceHandle rHandle;
84 OCObservationId obArray[255] = { 0, };
87 if (NSPutMessageResource(msg, &rHandle) != NS_OK)
89 NS_LOG(ERROR, "fail to Put notification resource");
93 if (consumerSubList->head == NULL)
95 NS_LOG(ERROR, "SubList->head is NULL, empty SubList");
99 OCRepPayload* payload;
101 if (NSSetMessagePayload(msg, &payload) != NS_OK)
103 NS_LOG(ERROR, "fail to Get message payload");
107 NSCacheElement * it = consumerSubList->head;
111 NSCacheSubData * subData = (NSCacheSubData *) it->data;
112 NS_LOG_V(DEBUG, "subData->id = %s", subData->id);
113 NS_LOG_V(DEBUG, "subData->messageId = %d", subData->messageObId);
114 NS_LOG_V(DEBUG, "subData->obID = %d", subData->syncObId);
115 NS_LOG_V(DEBUG, "subData->isWhite = %d", subData->isWhite);
117 if (subData->isWhite)
119 obArray[obCount++] = subData->messageObId;
124 NS_LOG_V(DEBUG, "observer Count = %d", obCount);
126 for (i = 0; i < obCount; ++i)
128 NS_LOG(DEBUG, "-------------------------------------------------------message\n");
129 NS_LOG_V(DEBUG, "SubScription WhiteList[%d] = %d", i, obArray[i]);
130 NS_LOG(DEBUG, "-------------------------------------------------------message\n");
133 OCStackResult ocstackResult = OCNotifyListOfObservers(rHandle, obArray, obCount, payload,
136 NS_LOG_V(DEBUG, "Message ocstackResult = %d", ocstackResult);
138 if (ocstackResult != OC_STACK_OK)
140 NS_LOG(ERROR, "fail to send message");
141 OCRepPayloadDestroy(payload);
144 OCRepPayloadDestroy(payload);
147 NS_LOG(DEBUG, "NSSendMessage - OUT");
152 NSResult NSSendSync(NSSyncInfo *sync)
154 NS_LOG(DEBUG, "NSSendSync - IN");
156 OCObservationId obArray[255] = { 0, };
160 OCResourceHandle rHandle;
161 if (NSPutSyncResource(sync, &rHandle) != NS_OK)
163 NS_LOG(ERROR, PCF("Fail to put sync resource"));
167 NSCacheElement * it = consumerSubList->head;
171 NSCacheSubData * subData = (NSCacheSubData *) it->data;
172 if (subData->isWhite)
174 obArray[obCount++] = subData->syncObId;
179 OCRepPayload* payload;
180 if (NSSetSyncPayload(sync, &payload) != NS_OK)
182 NS_LOG(ERROR, "Failed to allocate payload");
186 for (i = 0; i < obCount; ++i)
188 NS_LOG(DEBUG, "-------------------------------------------------------message\n");
189 NS_LOG_V(DEBUG, "Sync WhiteList[%d] = %d", i, obArray[i]);
190 NS_LOG(DEBUG, "-------------------------------------------------------message\n");
193 OCStackResult ocstackResult = OCNotifyListOfObservers(rHandle, obArray,
194 obCount, payload, OC_LOW_QOS);
196 NS_LOG_V(DEBUG, "Sync ocstackResult = %d", ocstackResult);
198 if (ocstackResult != OC_STACK_OK)
200 NS_LOG(ERROR, "fail to send Sync");
201 OCRepPayloadDestroy(payload);
206 OCRepPayloadDestroy(payload);
208 NS_LOG(DEBUG, "NSSendSync - OUT");
212 void * NSNotificationSchedule(void *ptr)
216 NS_LOG(DEBUG, "Create NSNotifiactionSchedule");
219 while (NSIsRunning[NOTIFICATION_SCHEDULER])
221 sem_wait(&NSSemaphore[NOTIFICATION_SCHEDULER]);
222 pthread_mutex_lock(&NSMutex[NOTIFICATION_SCHEDULER]);
224 if (NSHeadMsg[NOTIFICATION_SCHEDULER] != NULL)
226 NSTask *node = NSHeadMsg[NOTIFICATION_SCHEDULER];
227 NSHeadMsg[NOTIFICATION_SCHEDULER] = node->nextTask;
229 switch (node->taskType)
231 case TASK_SEND_NOTIFICATION:
233 NS_LOG(DEBUG, "CASE TASK_SEND_NOTIFICATION : ");
234 NSSendNotification((NSMessage *)node->taskData);
238 NS_LOG(DEBUG, "CASE TASK_SEND_READ : ");
239 NSSendSync((NSSyncInfo*) node->taskData);
240 NSFreeSync((NSSyncInfo*) node->taskData);
243 NS_LOG(DEBUG, "CASE TASK_RECV_READ : ");
244 NSSendSync((NSSyncInfo*) node->taskData);
245 NSPushQueue(INTERFACE_SCHEDULER, TASK_CB_SYNC, node->taskData);
249 NS_LOG(ERROR, "Unknown type message");
256 pthread_mutex_unlock(&NSMutex[NOTIFICATION_SCHEDULER]);
260 NS_LOG(INFO, "Destroy NSNotificationSchedule");