From 8bde3647697bc07a2fc4baaf1bf6c87f8c9a3242 Mon Sep 17 00:00:00 2001 From: YounghyunJoo Date: Tue, 9 Aug 2016 17:11:40 +0900 Subject: [PATCH] Add Topic List into the NSProvider to support topic Functionality Conflicts: service/notification/src/consumer/NSConsumerCommon.h Change-Id: I83d197f20bd33d063aa25416b9f0682dd56e6c83 Signed-off-by: YounghyunJoo Reviewed-on: https://gerrit.iotivity.org/gerrit/10185 Tested-by: jenkins-iotivity Reviewed-by: Madan Lanka --- service/notification/include/NSCommon.h | 1 + .../notification/src/consumer/NSConsumerCommon.c | 62 +++++++++++++++++++++- .../notification/src/consumer/NSConsumerCommon.h | 3 ++ .../src/consumer/NSConsumerCommunication.c | 6 ++- .../src/consumer/NSConsumerDiscovery.c | 11 ++-- 5 files changed, 76 insertions(+), 7 deletions(-) diff --git a/service/notification/include/NSCommon.h b/service/notification/include/NSCommon.h index e293df5..1ab2e96 100644 --- a/service/notification/include/NSCommon.h +++ b/service/notification/include/NSCommon.h @@ -150,6 +150,7 @@ typedef struct typedef struct { char providerId[NS_UUID_STRING_SIZE]; + NSTopicList * topicList; } NSProvider; diff --git a/service/notification/src/consumer/NSConsumerCommon.c b/service/notification/src/consumer/NSConsumerCommon.c index 1f84137..de3143c 100644 --- a/service/notification/src/consumer/NSConsumerCommon.c +++ b/service/notification/src/consumer/NSConsumerCommon.c @@ -336,6 +336,50 @@ NSProviderConnectionInfo * NSCopyProviderConnections(NSProviderConnectionInfo * return retInfo; } +void NSRemoveProviderTopicList(NSTopicList * topicList, size_t dimensionSize) +{ + NS_VERIFY_NOT_NULL_V(topicList); + + for (int i = -1; i < (int)dimensionSize; i++) + { + NSOICFree(topicList->topics[i]); + } + NSOICFree(topicList); +} + +NSTopicList * NSCopyProviderTopicList(NSTopicList * topicList, size_t dimensionSize) +{ + NS_VERIFY_NOT_NULL(topicList, NULL); + + NSTopicList * newTopicList = (NSTopicList *)OICMalloc(sizeof(NSTopicList)); + NS_VERIFY_NOT_NULL(newTopicList, NULL); + + OICStrcpy(newTopicList->consumerId, NS_DEVICE_ID_LENGTH, topicList->consumerId); + + newTopicList->topics = (NSTopic **) OICMalloc(sizeof(NSTopic *)*dimensionSize); + NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(newTopicList->topics, + NULL, NSRemoveProviderTopicList(newTopicList, -1)); + + for (int i = 0; i < (int)dimensionSize; i++) + { + newTopicList->topics[i] = (NSTopic *) OICMalloc(sizeof(NSTopic)); + NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(newTopicList->topics[i], + NULL, NSRemoveProviderTopicList(newTopicList, i)); + + newTopicList->topics[i]->topicName = OICStrdup(topicList->topics[i]->topicName); + newTopicList->topics[i]->state = topicList->topics[i]->state; + } + + return newTopicList; +} + +void NSCopyProviderPostClean( + NSProviderConnectionInfo * connections, NSProvider_internal * provider) +{ + NSRemoveConnections(connections); + NSOICFree(provider); +} + NSProvider_internal * NSCopyProvider(NSProvider_internal * prov) { NS_VERIFY_NOT_NULL(prov, NULL); @@ -343,13 +387,27 @@ NSProvider_internal * NSCopyProvider(NSProvider_internal * prov) NSProviderConnectionInfo * connections = NSCopyProviderConnections(prov->connection); NS_VERIFY_NOT_NULL(connections, NULL); - NSProvider_internal * newProv = (NSProvider_internal *)OICMalloc(sizeof(NSProvider_internal)); + NSProvider_internal * newProv = (NSProvider_internal *) OICMalloc(sizeof(NSProvider_internal)); NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(newProv, NULL, NSRemoveConnections(connections)); + newProv->topicList = NULL; + newProv->topicListSize = 0; + + if (prov->topicList) + { + NSTopicList * topicList = NSCopyProviderTopicList(prov->topicList, prov->topicListSize); + NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(topicList, NULL, + NSCopyProviderPostClean(connections, newProv)); + + newProv->topicList = topicList; + newProv->topicListSize = prov->topicListSize; + } + newProv->connection = connections; OICStrcpy(newProv->providerId, NS_DEVICE_ID_LENGTH, prov->providerId); newProv->messageUri = OICStrdup(prov->messageUri); newProv->syncUri = OICStrdup(prov->syncUri); + newProv->topicUri = OICStrdup(prov->topicUri); newProv->accessPolicy = prov->accessPolicy; return newProv; @@ -361,7 +419,9 @@ void NSRemoveProvider(NSProvider_internal * prov) NSOICFree(prov->messageUri); NSOICFree(prov->syncUri); + NSOICFree(prov->topicUri); NSRemoveConnections(prov->connection); + NSRemoveProviderTopicList(prov->topicList, prov->topicListSize); NSOICFree(prov); } diff --git a/service/notification/src/consumer/NSConsumerCommon.h b/service/notification/src/consumer/NSConsumerCommon.h index fd27754..c1511f9 100644 --- a/service/notification/src/consumer/NSConsumerCommon.h +++ b/service/notification/src/consumer/NSConsumerCommon.h @@ -141,6 +141,9 @@ void NSRemoveProvider(NSProvider_internal *); NSSyncInfo_internal * NSCopySyncInfo(NSSyncInfo_internal *); void NSRemoveSyncInfo(NSSyncInfo_internal *); +NSTopicList * NSCopyProviderTopicList(NSTopicList * topicList, size_t dimensionSize); +void NSRemoveProviderTopicList(NSTopicList * topicList, size_t dimensionSize); + OCStackResult NSInvokeRequest(OCDoHandle * handle, OCMethod method, const OCDevAddr * addr, const char * queryUrl, OCPayload * payload, diff --git a/service/notification/src/consumer/NSConsumerCommunication.c b/service/notification/src/consumer/NSConsumerCommunication.c index 6a6df15..32c37db 100644 --- a/service/notification/src/consumer/NSConsumerCommunication.c +++ b/service/notification/src/consumer/NSConsumerCommunication.c @@ -18,16 +18,18 @@ // //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +#include "NSConsumerCommunication.h" + #include "NSConstants.h" +#include "NSUtil.h" #include "NSConsumerCommon.h" -#include "NSConsumerCommunication.h" #include "oic_malloc.h" #include "oic_string.h" #include "ocpayload.h" #define NS_SYNC_URI "/notification/sync" -unsigned long NS_MESSAGE_ACCEPTANCE = 1; +static unsigned long NS_MESSAGE_ACCEPTANCE = 1; NSMessage * NSCreateMessage_internal(uint64_t msgId, const char * providerId); NSSyncInfo * NSCreateSyncInfo_consumer(uint64_t msgId, const char * providerId, NSSyncType state); diff --git a/service/notification/src/consumer/NSConsumerDiscovery.c b/service/notification/src/consumer/NSConsumerDiscovery.c index 1467159..a334b78 100644 --- a/service/notification/src/consumer/NSConsumerDiscovery.c +++ b/service/notification/src/consumer/NSConsumerDiscovery.c @@ -166,11 +166,12 @@ OCStackApplicationResult NSIntrospectProvider( } void NSGetProviderPostClean( - char * pId, char * mUri, char * sUri, NSProviderConnectionInfo * connection) + char * pId, char * mUri, char * sUri, char * tUri, NSProviderConnectionInfo * connection) { NSOICFree(pId); NSOICFree(mUri); NSOICFree(sUri); + NSOICFree(tUri); NSRemoveConnections(connection); } @@ -191,6 +192,7 @@ NSProvider_internal * NSGetProvider(OCClientResponse * clientResponse) char * providerId = NULL; char * messageUri = NULL; char * syncUri = NULL; + char * topicUri = NULL; int64_t accepter = 0; NSProviderConnectionInfo * connection = NULL; @@ -205,12 +207,12 @@ NSProvider_internal * NSGetProvider(OCClientResponse * clientResponse) NS_LOG(DEBUG, "get message URI"); getResult = OCRepPayloadGetPropString(payload, NS_ATTRIBUTE_MESSAGE, & messageUri); NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(getResult == true ? (void *) 1 : NULL, NULL, - NSGetProviderPostClean(providerId, messageUri, syncUri, connection)); + NSGetProviderPostClean(providerId, messageUri, syncUri, topicUri, connection)); NS_LOG(DEBUG, "get sync URI"); getResult = OCRepPayloadGetPropString(payload, NS_ATTRIBUTE_SYNC, & syncUri); NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(getResult == true ? (void *) 1 : NULL, NULL, - NSGetProviderPostClean(providerId, messageUri, syncUri, connection)); + NSGetProviderPostClean(providerId, messageUri, syncUri, topicUri, connection)); /* TODO next commit, modify code. NS_LOG(DEBUG, "get topic URI"); @@ -227,12 +229,13 @@ NSProvider_internal * NSGetProvider(OCClientResponse * clientResponse) NSProvider_internal * newProvider = (NSProvider_internal *)OICMalloc(sizeof(NSProvider_internal)); NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(newProvider, NULL, - NSGetProviderPostClean(providerId, messageUri, syncUri, connection)); + NSGetProviderPostClean(providerId, messageUri, syncUri, topicUri, connection)); OICStrcpy(newProvider->providerId, sizeof(char) * NS_DEVICE_ID_LENGTH, providerId); NSOICFree(providerId); newProvider->messageUri = messageUri; newProvider->syncUri = syncUri; + newProvider->topicUri = topicUri; newProvider->accessPolicy = (NSSelector)accepter; newProvider->connection = connection; -- 2.7.4