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 "NSConsumerInterface.h"
27 #include "NSConsumerCommon.h"
28 #include "NSConstants.h"
29 #include "NSConsumerScheduler.h"
30 #include "oic_malloc.h"
31 #include "oic_string.h"
34 NSResult NSStartConsumer(NSConsumerConfig config)
36 bool isStartedConsumer = NSIsStartedConsumer();
37 NS_VERIFY_NOT_NULL(isStartedConsumer == false ? (void *) 1 : NULL, NS_OK);
39 NS_VERIFY_NOT_NULL(config.discoverCb, NS_ERROR);
40 NS_VERIFY_NOT_NULL(config.messageCb, NS_ERROR);
41 NS_VERIFY_NOT_NULL(config.syncInfoCb, NS_ERROR);
42 NS_VERIFY_NOT_NULL(config.changedCb, NS_ERROR);
44 NSSetDiscoverProviderCb(config.discoverCb);
45 NSSetMessagePostedCb(config.messageCb);
46 NSSetNotificationSyncCb(config.syncInfoCb);
47 NSSetProviderChangedCb(config.changedCb);
48 NSSetIsStartedConsumer(true);
50 NSResult ret = NSConsumerMessageHandlerInit();
51 NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(ret == NS_OK ? (void *) 1 : NULL,
52 NS_ERROR, NSStopConsumer());
57 NSResult NSStopConsumer()
59 bool isStartedConsumer = NSIsStartedConsumer();
60 NS_VERIFY_NOT_NULL(isStartedConsumer == true ? (void *) 1 : NULL, NS_ERROR);
62 NSSetDiscoverProviderCb(NULL);
63 NSSetMessagePostedCb(NULL);
64 NSSetNotificationSyncCb(NULL);
65 NSSetProviderChangedCb(NULL);
66 NSSetIsStartedConsumer(false);
68 NSConsumerMessageHandlerExit();
73 NSResult NSConsumerEnableRemoteService(char *serverAddress)
75 bool isStartedConsumer = NSIsStartedConsumer();
76 NS_VERIFY_NOT_NULL(isStartedConsumer == true ? (void *) 1 : NULL, NS_ERROR);
78 char * queryAddr = OICStrdup(serverAddress);
79 NS_VERIFY_NOT_NULL(queryAddr, NS_ERROR);
81 NSTask * discoverTask = NSMakeTask(TASK_CONSUMER_REQ_DISCOVER, (void *)queryAddr);
82 NS_VERIFY_NOT_NULL(discoverTask, NS_ERROR);
84 return NSConsumerPushEvent(discoverTask);
87 NSResult NSSubscribe(NSProvider * provider)
89 bool isStartedConsumer = NSIsStartedConsumer();
90 NS_VERIFY_NOT_NULL(isStartedConsumer == true ? (void *) 1 : NULL, NS_ERROR);
92 NSProvider * prov = (NSProvider *)NSCopyProvider((NSProvider_internal *) provider);
93 NS_VERIFY_NOT_NULL(prov, NS_ERROR);
95 NSTask * subscribeTask = NSMakeTask(TASK_CONSUMER_REQ_SUBSCRIBE, (void *) prov);
96 NS_VERIFY_NOT_NULL(subscribeTask, NS_ERROR);
98 return NSConsumerPushEvent(subscribeTask);
101 NSResult NSUnsubscribe(NSProvider * provider)
103 bool isStartedConsumer = NSIsStartedConsumer();
104 NS_VERIFY_NOT_NULL(isStartedConsumer == true ? (void *) 1 : NULL, NS_ERROR);
106 NSProvider * prov = (NSProvider *)NSCopyProvider((NSProvider_internal *) provider);
107 NS_VERIFY_NOT_NULL(prov, NS_ERROR);
109 NSTask * unsubscribeTask = NSMakeTask(TASK_CONSUMER_REQ_SUBSCRIBE_CANCEL, (void *) prov);
110 NS_VERIFY_NOT_NULL(unsubscribeTask, NS_ERROR);
112 return NSConsumerPushEvent(unsubscribeTask);
115 NSResult NSConsumerSendSyncInfo(const char * providerId, uint64_t messageId, NSSyncType type)
117 bool isStartedConsumer = NSIsStartedConsumer();
118 NS_VERIFY_NOT_NULL(isStartedConsumer == true ? (void *) 1 : NULL, NS_ERROR);
120 NSSyncInfo * syncInfo = (NSSyncInfo *)OICMalloc(sizeof(NSSyncInfo));
121 NS_VERIFY_NOT_NULL(syncInfo, NS_ERROR);
123 OICStrcpy(syncInfo->providerId, sizeof(char) * NS_DEVICE_ID_LENGTH, providerId);
124 syncInfo->messageId = messageId;
125 syncInfo->state = type;
127 NSTask * syncTask = NSMakeTask(TASK_MAKE_SYNCINFO, (void *) syncInfo);
128 NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(syncTask, NS_ERROR, NSOICFree(syncInfo));
130 return NSConsumerPushEvent(syncTask);
133 NSResult NSRescanProvider()
135 bool isStartedConsumer = NSIsStartedConsumer();
136 NS_VERIFY_NOT_NULL(isStartedConsumer == true ? (void *) 1 : NULL, NS_ERROR);
138 NSTask * discoverTask = NSMakeTask(TASK_CONSUMER_REQ_DISCOVER, NULL);
139 NS_VERIFY_NOT_NULL(discoverTask, NS_ERROR);
141 return NSConsumerPushEvent(discoverTask);
144 NSProvider * NSConsumerGetProvider(const char * providerId)
146 bool isStartedConsumer = NSIsStartedConsumer();
147 NS_VERIFY_NOT_NULL(isStartedConsumer == true ? (void *) 1 : NULL, NULL);
149 NS_VERIFY_NOT_NULL(providerId, NULL);
151 NSProvider_internal * prov = NSConsumerFindNSProvider(providerId);
152 NS_VERIFY_NOT_NULL(prov, NULL);
154 NSProvider * retProv = NSCopyProvider(prov);
155 NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(retProv, NULL, NSRemoveProvider_internal(prov));
156 NSRemoveProvider_internal(prov);
161 NSMessage * NSConsumerGetMessage(uint64_t messageId)
163 bool isStartedConsumer = NSIsStartedConsumer();
164 NS_VERIFY_NOT_NULL(isStartedConsumer == true ? (void *) 1 : NULL, NULL);
166 char msgId[NS_DEVICE_ID_LENGTH] = { 0, };
167 snprintf(msgId, NS_DEVICE_ID_LENGTH, "%lld", (long long int)messageId);
169 return (NSMessage *) NSConsumerFindNSMessage(msgId);
172 NSResult NSConsumerGetInterestTopics(NSProvider * provider)
174 bool isStartedConsumer = NSIsStartedConsumer();
175 NS_VERIFY_NOT_NULL(isStartedConsumer == true ? (void *) 1 : NULL, NS_ERROR);
177 NS_VERIFY_NOT_NULL(provider, NS_ERROR);
179 NS_LOG_V(DEBUG, "NSProvider ID: %s", provider->providerId);
180 NSProvider_internal * prov = NSConsumerFindNSProvider(provider->providerId);
181 NS_VERIFY_NOT_NULL(prov, NS_ERROR);
182 NSSelector selector = prov->accessPolicy;
183 NSRemoveProvider_internal(prov);
184 NS_VERIFY_NOT_NULL(selector == NS_SELECTION_CONSUMER ? (void *) 1 : NULL, NS_ERROR);
186 prov = (NSProvider *)NSCopyProvider((NSProvider_internal *) provider);
187 NS_VERIFY_NOT_NULL(prov, NS_ERROR);
189 NSTask * topicTask = NSMakeTask(TASK_CONSUMER_GET_TOPIC_LIST, (void *) prov);
190 NS_VERIFY_NOT_NULL(topicTask, NS_ERROR);
192 return NSConsumerPushEvent(topicTask);
195 NSResult NSConsumerSelectInterestTopics(NSProvider * provider)
197 bool isStartedConsumer = NSIsStartedConsumer();
198 NS_VERIFY_NOT_NULL(isStartedConsumer == true ? (void *) 1 : NULL, NS_ERROR);
200 NS_VERIFY_NOT_NULL(provider, NS_ERROR);
201 NS_VERIFY_NOT_NULL(provider->topicLL, NS_ERROR);
203 NSProvider_internal * prov = NSConsumerFindNSProvider(provider->providerId);
204 NS_VERIFY_NOT_NULL(prov, NS_ERROR);
206 NSSelector selector = prov->accessPolicy;
207 NSRemoveProvider_internal(prov);
208 NS_VERIFY_NOT_NULL(selector == NS_SELECTION_CONSUMER ? (void *) 1 : NULL, NS_ERROR);
210 prov = (NSProvider *)NSCopyProvider((NSProvider_internal *) provider);
211 NS_VERIFY_NOT_NULL(prov, NS_ERROR);
213 NSTask * topicTask = NSMakeTask(TASK_CONSUMER_SELECT_TOPIC_LIST, (void *) prov);
214 NS_VERIFY_NOT_NULL(topicTask, NS_ERROR);
216 return NSConsumerPushEvent(topicTask);
219 NSResult NSDropNSMessage(NSMessage * obj)
221 NS_VERIFY_NOT_NULL(obj, NS_ERROR);
224 NSOICFree(obj->title);
225 NSOICFree(obj->contentText);
226 NSOICFree(obj->sourceName);