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 "NSConstants.h"
22 #include "NSConsumerCommon.h"
23 #include "NSConsumerInternalTaskController.h"
24 #include "NSStructs.h"
26 #include "oic_malloc.h"
27 #include "oic_string.h"
29 NSCacheList ** NSGetCacheList()
31 static NSCacheList * cache = NULL;
35 void NSSetCacheList(NSCacheList * cache)
37 *(NSGetCacheList()) = cache;
40 void NSDestroyCacheList()
42 NSCacheList * cache = *(NSGetCacheList());
45 NSStorageDestroy(cache);
49 NSResult NSCacheUpdate(NSCacheList * cache, NSTask * task, NSConsumerMessageTypes type)
51 NSMessage_consumer * noti = (NSMessage_consumer *) task->taskData;
52 NS_VERIFY_NOT_NULL(noti, NS_ERROR);
56 NSCacheElement * obj = (NSCacheElement *)OICMalloc(sizeof(NSCacheElement));
57 NS_VERIFY_NOT_NULL(obj, NS_ERROR);
59 obj->data = (NSCacheData *) noti;
62 NS_LOG(DEBUG, "try to write to storage");
63 NSResult ret = NSStorageWrite(cache, obj);
64 NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(ret == NS_OK ? (void *) 1 : NULL,
65 NS_ERROR, NSRemoveMessage(noti));
67 NSRemoveMessage(noti);
73 void NSConsumerHandleProviderDiscovered(NSProvider_internal * provider)
75 // TODO need to check for discovered provider is new and store provider.
77 if (provider->accessPolicy == NS_ACCESS_DENY)
79 NS_LOG(DEBUG, "accepter is NS_ACCEPTER_CONSUMER, Callback to user");
80 NSDiscoveredProvider((NSProvider *) provider);
84 NS_LOG(DEBUG, "accepter is NS_ACCEPTER_PROVIDER, request subscribe");
85 NSTask * task = NSMakeTask(TASK_CONSUMER_REQ_SUBSCRIBE, (void *) provider);
86 NS_VERIFY_NOT_NULL_V(task);
88 NSConsumerPushEvent(task);
92 void NSConsumerHandleRecvSubscriptionConfirmed(NSMessage_consumer * msg)
94 NS_VERIFY_NOT_NULL_V(msg);
96 // TODO change to find provider using pId.
97 NSProvider * provider = NULL;
99 provider = (NSProvider *)OICMalloc(sizeof(NSProvider));
100 NS_VERIFY_NOT_NULL_V(provider);
101 OICStrcpy(provider->providerId, sizeof(char) * NS_DEVICE_ID_LENGTH, msg->providerId);
104 NSSubscriptionAccepted(provider);
107 void NSConsumerHandleRecvMessage(NSMessage_consumer * msg)
109 NS_VERIFY_NOT_NULL_V(msg);
110 // TODO store message to cache
111 // NSResult ret = NSCacheUpdate(cache, task, Notification);
112 // NS_VERTIFY_NOT_NULL_V(ret == NS_OK ? (void *) 1 : NULL);
114 NSMessagePost((NSMessage *) msg);
117 void NSConsumerHandleRecvSyncInfo(NSSyncInfo * sync)
119 NS_VERIFY_NOT_NULL_V(sync);
121 // TODO need to check for provider is available.
122 // TODO need to update msg list.
123 // NSResult ret = NSPushToCache(clientResponse, taskType);
124 // NS_VERTIFY_NOT_NULL(ret == NS_OK ? (void *)1 : NULL, OC_STACK_KEEP_TRANSACTION);
126 NSNotificationSync(sync);
129 void NSConsumerInternalTaskProcessing(NSTask * task)
131 NS_VERIFY_NOT_NULL_V(task);
133 NSCacheList * cache = *(NSGetCacheList());
136 NS_LOG(DEBUG, "Cache Init");
137 cache = NSStorageCreate();
138 NS_VERIFY_NOT_NULL_V(cache);
140 cache->cacheType = NS_CONSUMER_CACHE_MESSAGE;
141 NSSetCacheList(cache);
144 NSResult ret = NS_ERROR;
145 NS_LOG_V(DEBUG, "Receive Event : %d", (int)task->taskType);
146 switch (task->taskType)
148 case TASK_CONSUMER_RECV_SUBSCRIBE_CONFIRMED:
150 NS_LOG(DEBUG, "Receive Subscribe confirm from provider.");
151 NSConsumerHandleRecvSubscriptionConfirmed((NSMessage_consumer *)task->taskData);
154 case TASK_CONSUMER_RECV_MESSAGE:
156 NS_LOG(DEBUG, "Receive New Notification");
157 NSConsumerHandleRecvMessage((NSMessage_consumer *)task->taskData);
161 case TASK_CONSUMER_PROVIDER_DISCOVERED:
163 NS_LOG(DEBUG, "Receive New Provider is discovdered.");
164 NSConsumerHandleProviderDiscovered((NSProvider_internal *)task->taskData);
167 case TASK_RECV_SYNCINFO:
169 NS_LOG(DEBUG, "Receive SyncInfo.");
170 NSConsumerHandleRecvSyncInfo((NSSyncInfo *)task->taskData);
175 NS_LOG(DEBUG, "Receive Read Notification");
177 ret = NSCacheUpdate(cache, task, Read);
178 NS_VERIFY_NOT_NULL_V(ret == NS_OK ? (void *) 1 : NULL);
181 case TASK_RECV_DISMISS:
183 NS_LOG(DEBUG, "Receive Dismiss Notification");
185 ret = NSCacheUpdate(cache, task, Dismiss);
186 NS_VERIFY_NOT_NULL_V(ret == NS_OK ? (void *) 1 : NULL);
191 NS_LOG(ERROR, "Unknown TASK Type");