Add Topic List into the NSProvider to support topic Functionality
authorYounghyunJoo <yh_.joo@samsung.com>
Tue, 9 Aug 2016 08:11:40 +0000 (17:11 +0900)
committerMadan Lanka <lanka.madan@samsung.com>
Wed, 10 Aug 2016 15:48:34 +0000 (15:48 +0000)
Conflicts:
        service/notification/src/consumer/NSConsumerCommon.h

Change-Id: I83d197f20bd33d063aa25416b9f0682dd56e6c83
Signed-off-by: YounghyunJoo <yh_.joo@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/10185
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Madan Lanka <lanka.madan@samsung.com>
service/notification/include/NSCommon.h
service/notification/src/consumer/NSConsumerCommon.c
service/notification/src/consumer/NSConsumerCommon.h
service/notification/src/consumer/NSConsumerCommunication.c
service/notification/src/consumer/NSConsumerDiscovery.c

index e293df5..1ab2e96 100644 (file)
@@ -150,6 +150,7 @@ typedef struct
 typedef struct
 {
     char providerId[NS_UUID_STRING_SIZE];
+    NSTopicList * topicList;
 
 } NSProvider;
 
index 1f84137..de3143c 100644 (file)
@@ -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);
 }
index fd27754..c1511f9 100644 (file)
@@ -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,
index 6a6df15..32c37db 100644 (file)
 //
 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 
+#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);
index 1467159..a334b78 100644 (file)
@@ -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;