X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=service%2Fnotification%2Fsrc%2Fconsumer%2FNSConsumerInterface.c;h=f52b20d97da12a4d5659d49fb9dd58a3892a2b60;hb=3c093548382bb2542c87a67e6e5fa32552c29cb3;hp=617454d0184620e357f2bddad5a960e66756bac2;hpb=90f488430cd0e99018ec1196b7d030ea887b79f0;p=platform%2Fupstream%2Fiotivity.git diff --git a/service/notification/src/consumer/NSConsumerInterface.c b/service/notification/src/consumer/NSConsumerInterface.c index 617454d..f52b20d 100644 --- a/service/notification/src/consumer/NSConsumerInterface.c +++ b/service/notification/src/consumer/NSConsumerInterface.c @@ -27,6 +27,7 @@ #include "NSConsumerCommon.h" #include "NSConstants.h" #include "NSConsumerScheduler.h" +#include "NSUtil.h" #include "oic_malloc.h" #include "oic_string.h" @@ -36,15 +37,13 @@ NSResult NSStartConsumer(NSConsumerConfig config) 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(); @@ -56,10 +55,12 @@ NSResult NSStartConsumer(NSConsumerConfig config) NSResult NSStopConsumer() { - NSSetDiscoverProviderCb(NULL); + bool isStartedConsumer = NSIsStartedConsumer(); + NS_VERIFY_NOT_NULL(isStartedConsumer == true ? (void *) 1 : NULL, NS_ERROR); + NSSetMessagePostedCb(NULL); NSSetNotificationSyncCb(NULL); - NSSetSubscriptionAcceptedCb(NULL); + NSSetProviderChangedCb(NULL); NSSetIsStartedConsumer(false); NSConsumerMessageHandlerExit(); @@ -67,17 +68,83 @@ 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); + 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); + 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); @@ -85,6 +152,10 @@ NSResult NSUnsubscribe(NSProvider * provider) 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); @@ -100,6 +171,9 @@ NSResult NSConsumerSendSyncInfo(const char * providerId, uint64_t messageId, NSS NSResult NSRescanProvider() { + bool isStartedConsumer = NSIsStartedConsumer(); + NS_VERIFY_NOT_NULL(isStartedConsumer == true ? (void *) 1 : NULL, NS_ERROR); + NSTask * discoverTask = NSMakeTask(TASK_CONSUMER_REQ_DISCOVER, NULL); NS_VERIFY_NOT_NULL(discoverTask, NS_ERROR); @@ -109,27 +183,60 @@ NSResult NSRescanProvider() 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) { - char msgId[NS_DEVICE_ID_LENGTH] = { 0, }; - snprintf(msgId, NS_DEVICE_ID_LENGTH, "%lu", messageId); + 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 (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); }