#include "NSConsumerCommon.h"
#include "NSConstants.h"
#include "NSConsumerScheduler.h"
+#include "NSUtil.h"
#include "oic_malloc.h"
#include "oic_string.h"
bool isStartedConsumer = NSIsStartedConsumer();
NS_VERIFY_NOT_NULL(isStartedConsumer == false ? (void *) 1 : NULL, NS_OK);
- NS_VERIFY_NOT_NULL(config.discoverCb, NS_ERROR);
NS_VERIFY_NOT_NULL(config.messageCb, NS_ERROR);
NS_VERIFY_NOT_NULL(config.syncInfoCb, NS_ERROR);
- NS_VERIFY_NOT_NULL(config.acceptedCb, NS_ERROR);
+ NS_VERIFY_NOT_NULL(config.changedCb, NS_ERROR);
- NSSetDiscoverProviderCb(config.discoverCb);
NSSetMessagePostedCb(config.messageCb);
NSSetNotificationSyncCb(config.syncInfoCb);
- NSSetSubscriptionAcceptedCb(config.acceptedCb);
+ NSSetProviderChangedCb(config.changedCb);
NSSetIsStartedConsumer(true);
NSResult ret = NSConsumerMessageHandlerInit();
bool isStartedConsumer = NSIsStartedConsumer();
NS_VERIFY_NOT_NULL(isStartedConsumer == true ? (void *) 1 : NULL, NS_ERROR);
- NSSetDiscoverProviderCb(NULL);
NSSetMessagePostedCb(NULL);
NSSetNotificationSyncCb(NULL);
- NSSetSubscriptionAcceptedCb(NULL);
+ NSSetProviderChangedCb(NULL);
NSSetIsStartedConsumer(false);
NSConsumerMessageHandlerExit();
return NS_OK;
}
-NSResult NSConsumerEnableRemoteService(char *serverAddress)
+#ifdef WITH_MQ
+NSResult NSConsumerSubscribeMQService(const char * serverAddress, const char * topicName)
{
+ NS_VERIFY_NOT_NULL(serverAddress, NS_ERROR);
+ NS_VERIFY_NOT_NULL(topicName, NS_ERROR);
bool isStartedConsumer = NSIsStartedConsumer();
NS_VERIFY_NOT_NULL(isStartedConsumer == true ? (void *) 1 : NULL, NS_ERROR);
- NSTask * discoverTask = NSMakeTask(TASK_CONSUMER_REQ_DISCOVER, (void *)serverAddress);
+ char * queryAddr = NSGetQueryAddress(serverAddress);
+ NS_VERIFY_NOT_NULL(queryAddr, NS_ERROR);
+
+ NSMQTopicAddress * topicAddr = (NSMQTopicAddress *)OICMalloc(sizeof(NSMQTopicAddress));
+ NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(queryAddr, NS_ERROR, NSOICFree(queryAddr));
+
+ topicAddr->serverAddr = queryAddr;
+ topicAddr->topicName = OICStrdup(topicName);
+
+ NSTask * subMQTask = NSMakeTask(TASK_MQ_REQ_SUBSCRIBE, (void *)topicAddr);
+ NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(subMQTask, NS_ERROR,
+ {
+ NSOICFree(topicAddr->serverAddr);
+ NSOICFree(topicAddr->topicName)
+ NSOICFree(topicAddr);
+ });
+
+ return NSConsumerPushEvent(subMQTask);
+}
+#endif
+
+NSResult NSConsumerEnableRemoteService(const char * serverAddress)
+{
+ NS_VERIFY_NOT_NULL(serverAddress, NS_ERROR);
+ bool isStartedConsumer = NSIsStartedConsumer();
+ NS_VERIFY_NOT_NULL(isStartedConsumer == true ? (void *) 1 : NULL, NS_ERROR);
+
+ char * queryAddr = OICStrdup(serverAddress);
+ NS_VERIFY_NOT_NULL(queryAddr, NS_ERROR);
+
+ NSTask * discoverTask = NSMakeTask(TASK_CONSUMER_REQ_DISCOVER, (void *)queryAddr);
NS_VERIFY_NOT_NULL(discoverTask, NS_ERROR);
return NSConsumerPushEvent(discoverTask);
}
-NSResult NSSubscribe(NSProvider * provider)
+NSResult NSSubscribe(const char * providerId)
{
+ NS_VERIFY_NOT_NULL(providerId, NS_ERROR);
bool isStartedConsumer = NSIsStartedConsumer();
NS_VERIFY_NOT_NULL(isStartedConsumer == true ? (void *) 1 : NULL, NS_ERROR);
- NSTask * subscribeTask = NSMakeTask(TASK_CONSUMER_REQ_SUBSCRIBE, (void *) provider);
+ NSProvider_internal * provInternal = NSConsumerFindNSProvider(providerId);
+ NS_VERIFY_NOT_NULL(provInternal, NS_ERROR);
+
+ NSProvider * prov = (NSProvider *)NSCopyProvider(provInternal);
+ NSRemoveProvider_internal(provInternal);
+ NS_VERIFY_NOT_NULL(prov, NS_ERROR);
+
+ NSTask * subscribeTask = NSMakeTask(TASK_CONSUMER_REQ_SUBSCRIBE, (void *) prov);
NS_VERIFY_NOT_NULL(subscribeTask, NS_ERROR);
return NSConsumerPushEvent(subscribeTask);
}
-NSResult NSUnsubscribe(NSProvider * provider)
+NSResult NSUnsubscribe(const char * providerId)
{
+ NS_VERIFY_NOT_NULL(providerId, NS_ERROR);
bool isStartedConsumer = NSIsStartedConsumer();
NS_VERIFY_NOT_NULL(isStartedConsumer == true ? (void *) 1 : NULL, NS_ERROR);
- NSTask * unsubscribeTask = NSMakeTask(TASK_CONSUMER_REQ_SUBSCRIBE_CANCEL, (void *) provider);
+ NSProvider_internal * provInternal = NSConsumerFindNSProvider(providerId);
+ NS_VERIFY_NOT_NULL(provInternal, NS_ERROR);
+
+ NSProvider * prov = (NSProvider *)NSCopyProvider((NSProvider_internal *) provInternal);
+ NSRemoveProvider_internal(provInternal);
+ NS_VERIFY_NOT_NULL(prov, NS_ERROR);
+
+ NSTask * unsubscribeTask = NSMakeTask(TASK_CONSUMER_REQ_SUBSCRIBE_CANCEL, (void *) prov);
NS_VERIFY_NOT_NULL(unsubscribeTask, NS_ERROR);
return NSConsumerPushEvent(unsubscribeTask);
NSResult NSConsumerSendSyncInfo(const char * providerId, uint64_t messageId, NSSyncType type)
{
+ NS_VERIFY_NOT_NULL(providerId, NS_ERROR);
bool isStartedConsumer = NSIsStartedConsumer();
NS_VERIFY_NOT_NULL(isStartedConsumer == true ? (void *) 1 : NULL, NS_ERROR);
NSProvider * NSConsumerGetProvider(const char * providerId)
{
+ NS_VERIFY_NOT_NULL(providerId, NULL);
bool isStartedConsumer = NSIsStartedConsumer();
NS_VERIFY_NOT_NULL(isStartedConsumer == true ? (void *) 1 : NULL, NULL);
NS_VERIFY_NOT_NULL(providerId, NULL);
- return (NSProvider *) NSConsumerFindNSProvider(providerId);
+ NSProvider_internal * prov = NSConsumerFindNSProvider(providerId);
+ NS_VERIFY_NOT_NULL(prov, NULL);
+
+ NSProvider * retProv = NSCopyProvider(prov);
+ NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(retProv, NULL, NSRemoveProvider_internal(prov));
+ NSRemoveProvider_internal(prov);
+
+ return retProv;
}
-NSMessage * NSConsumerGetMessage(uint64_t messageId)
+NSTopicLL * NSConsumerGetTopicList(const char * providerId)
{
+ NS_VERIFY_NOT_NULL(providerId, NULL);
bool isStartedConsumer = NSIsStartedConsumer();
NS_VERIFY_NOT_NULL(isStartedConsumer == true ? (void *) 1 : NULL, NULL);
- char msgId[NS_DEVICE_ID_LENGTH] = { 0, };
- snprintf(msgId, NS_DEVICE_ID_LENGTH, "%lld", (long long int)messageId);
+ NS_LOG_V(INFO_PRIVATE, "NSProvider ID: %s", providerId);
+ NSProvider_internal * prov_internal = NSConsumerFindNSProvider(providerId);
+ NS_VERIFY_NOT_NULL(prov_internal, NULL);
+
+ NSTopicLL * retTopics = prov_internal->topicLL;
+ prov_internal->topicLL = NULL;
+ NSRemoveProvider_internal(prov_internal);
- return (NSMessage *) NSConsumerFindNSMessage(msgId);
+ return retTopics;
}
-NSResult NSDropNSMessage(NSMessage * obj)
+NSResult NSConsumerUpdateTopicList(const char * providerId, NSTopicLL * topics)
{
- NS_VERIFY_NOT_NULL(obj, NS_ERROR);
+ NS_VERIFY_NOT_NULL(providerId, NS_ERROR);
+ NS_VERIFY_NOT_NULL(topics, NS_ERROR);
+ bool isStartedConsumer = NSIsStartedConsumer();
+ NS_VERIFY_NOT_NULL(isStartedConsumer == true ? (void *) 1 : NULL, NS_ERROR);
- obj->messageId = 0;
- NSOICFree(obj->title);
- NSOICFree(obj->contentText);
- NSOICFree(obj->sourceName);
- NSOICFree(obj);
+ NSProvider_internal * prov_internal = NSConsumerFindNSProvider(providerId);
+ NS_VERIFY_NOT_NULL(prov_internal, NS_ERROR);
+ NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(prov_internal->topicLL, NS_ERROR,
+ NSRemoveProvider_internal(prov_internal));
- return NS_OK;
+ NSSelector selector = prov_internal->accessPolicy;
+ NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(
+ selector == NS_SELECTION_CONSUMER ? (void *) 1 : NULL, NS_ERROR,
+ NSRemoveProvider_internal(prov_internal));
+
+ NSRemoveTopicLL(prov_internal->topicLL);
+ prov_internal->topicLL = NSCopyTopicLL(topics);
+
+ NSTask * topicTask = NSMakeTask(TASK_CONSUMER_SELECT_TOPIC_LIST, (void *) prov_internal);
+ NS_VERIFY_NOT_NULL(topicTask, NS_ERROR);
+
+ return NSConsumerPushEvent(topicTask);
}