X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=service%2Fnotification%2Fsrc%2Fconsumer%2FNSConsumerInterface.c;h=f52b20d97da12a4d5659d49fb9dd58a3892a2b60;hb=3c093548382bb2542c87a67e6e5fa32552c29cb3;hp=13ba403c48ae21c712ca7828ca7e9fcb9545387b;hpb=0a9584f9157485845c2b59b567e77b97e59f6c26;p=platform%2Fupstream%2Fiotivity.git diff --git a/service/notification/src/consumer/NSConsumerInterface.c b/service/notification/src/consumer/NSConsumerInterface.c index 13ba403..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,12 +37,10 @@ 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.changedCb, NS_ERROR); - NSSetDiscoverProviderCb(config.discoverCb); NSSetMessagePostedCb(config.messageCb); NSSetNotificationSyncCb(config.syncInfoCb); NSSetProviderChangedCb(config.changedCb); @@ -59,7 +58,6 @@ NSResult NSStopConsumer() bool isStartedConsumer = NSIsStartedConsumer(); NS_VERIFY_NOT_NULL(isStartedConsumer == true ? (void *) 1 : NULL, NS_ERROR); - NSSetDiscoverProviderCb(NULL); NSSetMessagePostedCb(NULL); NSSetNotificationSyncCb(NULL); NSSetProviderChangedCb(NULL); @@ -70,34 +68,83 @@ NSResult NSStopConsumer() 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); @@ -105,6 +152,7 @@ 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); @@ -134,70 +182,61 @@ 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); -NSMessage * NSConsumerGetMessage(uint64_t messageId) -{ - 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); + NSProvider * retProv = NSCopyProvider(prov); + NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(retProv, NULL, NSRemoveProvider_internal(prov)); + NSRemoveProvider_internal(prov); - return (NSMessage *) NSConsumerFindNSMessage(msgId); + return retProv; } -NSResult NSConsumerGetInterestTopics(NSProvider * provider) +NSTopicLL * NSConsumerGetTopicList(const char * providerId) { - /* TODO next commit, modify code. + NS_VERIFY_NOT_NULL(providerId, NULL); bool isStartedConsumer = NSIsStartedConsumer(); - NS_VERIFY_NOT_NULL(isStartedConsumer == true ? (void *) 1 : NULL, NS_ERROR); + NS_VERIFY_NOT_NULL(isStartedConsumer == true ? (void *) 1 : NULL, NULL); - NS_VERIFY_NOT_NULL(provider, NS_ERROR); + NS_LOG_V(INFO_PRIVATE, "NSProvider ID: %s", providerId); + NSProvider_internal * prov_internal = NSConsumerFindNSProvider(providerId); + NS_VERIFY_NOT_NULL(prov_internal, NULL); - NSTask * topicTask = NSMakeTask(TASK_CONSUMER_GET_TOPIC_LIST, (void *) provider); - NS_VERIFY_NOT_NULL(topicTask, NS_ERROR); + NSTopicLL * retTopics = prov_internal->topicLL; + prov_internal->topicLL = NULL; + NSRemoveProvider_internal(prov_internal); - return NSConsumerPushEvent(topicTask); - */ + return retTopics; } -NSResult NSConsumerSelectInterestTopics(NSProvider * provider) +NSResult NSConsumerUpdateTopicList(const char * providerId, NSTopicLL * topics) { - /* TODO next commit, modify code. + 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); - NS_VERIFY_NOT_NULL(provider, NS_ERROR); + 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)); - if (!provider->topicList) - provider->topicList = (NSTopicList *) OICMalloc(sizeof(NSTopicList)); - NS_VERIFY_NOT_NULL(provider->topicList, NS_ERROR); + 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)); - OICStrcpy(provider->topicList->consumerId, NS_DEVICE_ID_LENGTH, provider->providerId); + NSRemoveTopicLL(prov_internal->topicLL); + prov_internal->topicLL = NSCopyTopicLL(topics); - NSTask * topicTask = NSMakeTask(TASK_CONSUMER_SELECT_TOPIC_LIST, (void *) provider); - NS_VERIFY_NOT_NULL(provider, NS_ERROR); + NSTask * topicTask = NSMakeTask(TASK_CONSUMER_SELECT_TOPIC_LIST, (void *) prov_internal); + NS_VERIFY_NOT_NULL(topicTask, NS_ERROR); return NSConsumerPushEvent(topicTask); - */ -} - -NSResult NSDropNSMessage(NSMessage * obj) -{ - NS_VERIFY_NOT_NULL(obj, NS_ERROR); - - obj->messageId = 0; - NSOICFree(obj->title); - NSOICFree(obj->contentText); - NSOICFree(obj->sourceName); - NSOICFree(obj); - - return NS_OK; }