X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=service%2Fnotification%2Fsrc%2Fconsumer%2FNSConsumerInterface.c;h=f52b20d97da12a4d5659d49fb9dd58a3892a2b60;hb=c315c87e07c4080ecd0ef488e7a1047bc3c509b2;hp=abac627acdab93843f29096957fbfb9c7f01b51d;hpb=b1723e5509a37837de6d1b91b617d577a2749fbd;p=platform%2Fupstream%2Fiotivity.git diff --git a/service/notification/src/consumer/NSConsumerInterface.c b/service/notification/src/consumer/NSConsumerInterface.c index abac627..f52b20d 100644 --- a/service/notification/src/consumer/NSConsumerInterface.c +++ b/service/notification/src/consumer/NSConsumerInterface.c @@ -26,58 +26,41 @@ #include "NSCommon.h" #include "NSConsumerCommon.h" #include "NSConstants.h" -#include "NSConsumerQueueScheduler.h" +#include "NSConsumerScheduler.h" +#include "NSUtil.h" #include "oic_malloc.h" +#include "oic_string.h" // Public APIs -NSResult NSStartConsumer( - NSProviderDiscoveredCallback discoverCb, - NSNotificationReceivedCallback postCb, - NSSyncCallback syncCb) +NSResult NSStartConsumer(NSConsumerConfig config) { - if (NSIsStartedConsumer()) - { - NS_LOG(DEBUG, "is already started consumer service?"); - return NS_OK; - } - - if (!discoverCb) - { - NS_LOG(ERROR, "discoverCb is NULL"); - return NS_ERROR; - } - - if (!postCb) - { - NS_LOG(ERROR, "postCb is NULL"); - return NS_ERROR; - } - - if (!syncCb) - { - NS_LOG(ERROR, "syncCb is NULL"); - return NS_ERROR; - } - - NSSetDiscoverProviderCb(discoverCb); - NSSetNotificationPostedCb(postCb); - NSSetNotificationSyncCb(syncCb); + bool isStartedConsumer = NSIsStartedConsumer(); + NS_VERIFY_NOT_NULL(isStartedConsumer == false ? (void *) 1 : NULL, NS_OK); + + NS_VERIFY_NOT_NULL(config.messageCb, NS_ERROR); + NS_VERIFY_NOT_NULL(config.syncInfoCb, NS_ERROR); + NS_VERIFY_NOT_NULL(config.changedCb, NS_ERROR); + + NSSetMessagePostedCb(config.messageCb); + NSSetNotificationSyncCb(config.syncInfoCb); + NSSetProviderChangedCb(config.changedCb); NSSetIsStartedConsumer(true); - if (NS_OK != NSConsumerMessageHandlerInit()) - { - NSStopConsumer(); - return NS_ERROR; - } + NSResult ret = NSConsumerMessageHandlerInit(); + NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(ret == NS_OK ? (void *) 1 : NULL, + NS_ERROR, NSStopConsumer()); return NS_OK; } NSResult NSStopConsumer() { - NSSetDiscoverProviderCb(NULL); - NSSetNotificationPostedCb(NULL); + bool isStartedConsumer = NSIsStartedConsumer(); + NS_VERIFY_NOT_NULL(isStartedConsumer == true ? (void *) 1 : NULL, NS_ERROR); + + NSSetMessagePostedCb(NULL); NSSetNotificationSyncCb(NULL); + NSSetProviderChangedCb(NULL); NSSetIsStartedConsumer(false); NSConsumerMessageHandlerExit(); @@ -85,98 +68,175 @@ NSResult NSStopConsumer() return NS_OK; } -NSResult NSSubscribe(NSProvider * provider) +#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); + + 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) { - NSTask * subscribeTask = NSMakeTask(TASK_CONSUMER_REQ_SUBSCRIBE, (void *) provider); - if (!subscribeTask) - { - NS_LOG(ERROR, "NSTask allocation fail"); - return NS_ERROR; - } + 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(const char * providerId) +{ + NS_VERIFY_NOT_NULL(providerId, NS_ERROR); + bool isStartedConsumer = NSIsStartedConsumer(); + NS_VERIFY_NOT_NULL(isStartedConsumer == true ? (void *) 1 : NULL, NS_ERROR); + + 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) { - NSTask * unsubscribeTask = NSMakeTask(TASK_CONSUMER_REQ_SUBSCRIBE_CANCEL, (void *) provider); - if (!unsubscribeTask) - { - NS_LOG(ERROR, "NSTask allocation fail"); - return NS_ERROR; - } + NS_VERIFY_NOT_NULL(providerId, NS_ERROR); + bool isStartedConsumer = NSIsStartedConsumer(); + NS_VERIFY_NOT_NULL(isStartedConsumer == true ? (void *) 1 : NULL, NS_ERROR); + + 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); + + NSSyncInfo * syncInfo = (NSSyncInfo *)OICMalloc(sizeof(NSSyncInfo)); + NS_VERIFY_NOT_NULL(syncInfo, NS_ERROR); + + OICStrcpy(syncInfo->providerId, sizeof(char) * NS_DEVICE_ID_LENGTH, providerId); + syncInfo->messageId = messageId; + syncInfo->state = type; + + NSTask * syncTask = NSMakeTask(TASK_MAKE_SYNCINFO, (void *) syncInfo); + NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(syncTask, NS_ERROR, NSOICFree(syncInfo)); + + return NSConsumerPushEvent(syncTask); +} + NSResult NSRescanProvider() { + bool isStartedConsumer = NSIsStartedConsumer(); + NS_VERIFY_NOT_NULL(isStartedConsumer == true ? (void *) 1 : NULL, NS_ERROR); + NSTask * discoverTask = NSMakeTask(TASK_CONSUMER_REQ_DISCOVER, NULL); - if (!discoverTask) - { - NS_LOG(ERROR, "NSTask allocation fail"); - return NS_ERROR; - } + NS_VERIFY_NOT_NULL(discoverTask, NS_ERROR); return NSConsumerPushEvent(discoverTask); } -NSResult NSConsumerReadCheck(NSMessage * obj) +NSProvider * NSConsumerGetProvider(const char * providerId) { - NSTask * readTask = NSMakeTask(TASK_SEND_READ, (void *) obj); - if (!readTask) - { - NS_LOG(ERROR, "NSTask allocation fail"); - return NS_ERROR; - } - - return NSConsumerPushEvent(readTask); + 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); + + 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; } -NSResult NSConsumerDismissCheck(NSMessage * obj) +NSTopicLL * NSConsumerGetTopicList(const char * providerId) { - NSTask * dismissTask = NSMakeTask(TASK_SEND_DISMISS, (void *) obj); - if (!dismissTask) - { - NS_LOG(ERROR, "NSTask allocation fail"); - return NS_ERROR; - } - - return NSConsumerPushEvent(dismissTask); + NS_VERIFY_NOT_NULL(providerId, NULL); + bool isStartedConsumer = NSIsStartedConsumer(); + NS_VERIFY_NOT_NULL(isStartedConsumer == true ? (void *) 1 : NULL, NULL); + + 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 retTopics; } -NSResult NSDropNSObject(NSMessage * obj) +NSResult NSConsumerUpdateTopicList(const char * providerId, NSTopicLL * topics) { - if (!obj) - { - return NS_ERROR; - } - - if (obj->mId) - { - OICFree(obj->mId); - obj->mId = NULL; - } - - if (obj->mTitle) - { - OICFree(obj->mTitle); - obj->mTitle = NULL; - } - - if (obj->mContentText) - { - OICFree(obj->mContentText); - obj->mContentText = NULL; - } - - if (obj->mSource) - { - OICFree(obj->mSource); - obj->mSource = NULL; - } - - OICFree(obj); + 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); - return NS_OK; + 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)); + + 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); }