Update topic subscription
authorch79.cho <ch79.cho@samsung.com>
Thu, 11 Aug 2016 04:49:37 +0000 (13:49 +0900)
committerMadan Lanka <lanka.madan@samsung.com>
Thu, 11 Aug 2016 08:55:04 +0000 (08:55 +0000)
Topic subscription function is added.
And registration feature and transmission of the topic array
are updated.
Plus, the name of NSTopic is changed to NSTopics.

Change-Id: I87d4102b461fe3ee471487a8574b7f32ca40e9d1
Signed-off-by: ch79.cho <ch79.cho@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/10249
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Madan Lanka <lanka.madan@samsung.com>
service/notification/include/NSCommon.h
service/notification/src/common/NSStructs.h
service/notification/src/consumer/NSConsumerCommon.c
service/notification/src/provider/NSProviderTopic.c

index 27fc6c8..a3c52ff 100644 (file)
@@ -125,12 +125,15 @@ typedef struct _nsTopic
     NSTopicState state;
     struct _nsTopic * next;
 
-} NSTopic;
+} NSTopics;
 
 typedef struct
 {
-    NSTopic * head;
-    NSTopic * tail;
+    NSTopics * head;
+    NSTopics * tail;
+    //TODO: decide struct fields
+    char consumerId[NS_UUID_STRING_SIZE];
+    NSTopics ** topics;
 
 } NSTopicList;
 
index f825836..6f55c9a 100644 (file)
@@ -72,7 +72,7 @@ typedef struct
 typedef struct\r
 {\r
     char consumerId[37];\r
-    NSTopic** topics;\r
+    NSTopics** topics;\r
 } NSCacheTopicData;\r
 \r
 typedef struct\r
index de3143c..b4b6079 100644 (file)
@@ -356,13 +356,13 @@ NSTopicList * NSCopyProviderTopicList(NSTopicList * topicList, size_t dimensionS
 
     OICStrcpy(newTopicList->consumerId, NS_DEVICE_ID_LENGTH, topicList->consumerId);
 
-    newTopicList->topics = (NSTopic **) OICMalloc(sizeof(NSTopic *)*dimensionSize);
+    newTopicList->topics = (NSTopics **) OICMalloc(sizeof(NSTopics *)*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));
+        newTopicList->topics[i] = (NSTopics *) OICMalloc(sizeof(NSTopics));
         NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(newTopicList->topics[i],
             NULL, NSRemoveProviderTopicList(newTopicList, i));
 
index 4ba7da5..8c350a8 100644 (file)
@@ -53,10 +53,12 @@ NSTopicList * NSGetTopics(char *consumerId)
     if(consumerId == NULL)\r
     {\r
         NS_LOG(DEBUG, "All registered topic list");\r
+        //TODO: get registered topic list\r
     }\r
     else\r
     {\r
         NS_LOG_V(DEBUG, "Subscribed topic list for consumerId(%s)", consumerId);\r
+        //TODO: get subscribed topic list for consumer\r
     }\r
 \r
     NS_LOG(DEBUG, "NSGetTopics() NS_OK");\r
@@ -64,26 +66,38 @@ NSTopicList * NSGetTopics(char *consumerId)
 }\r
 \r
 //TODO: update parameter\r
-NSResult NSStoreTopics(char * consumerId, NSTopic** topics)\r
+NSResult NSStoreTopics(char *consumerId, NSTopics** topics)\r
 {\r
     NS_LOG(DEBUG, "NSWriteTopicsToStorage()");\r
 \r
-    NSCacheElement * element = (NSCacheElement *) OICMalloc(sizeof(NSCacheElement));\r
-    NSCacheTopicData * topicData = (NSCacheTopicData *) OICMalloc(sizeof(NSCacheTopicData));\r
+    if(!consumerId)\r
+    {\r
+        NS_LOG(DEBUG, "Store registered topic list");\r
+        //TODO: store registered topic list\r
+    }\r
+    else // topic selection for consumer\r
+    {\r
+        NS_LOG(DEBUG, "Store subscribed topic list");\r
+        //TODO: store subscribed topic list for consumer\r
+\r
+        //TODO: modiy caching logic\r
+        NSCacheElement * element = (NSCacheElement *) OICMalloc(sizeof(NSCacheElement));\r
+        NSCacheTopicData * topicData = (NSCacheTopicData *) OICMalloc(sizeof(NSCacheTopicData));\r
 \r
-    OICStrcpy(topicData->consumerId, UUID_STRING_SIZE, consumerId);\r
-    NS_LOG_V(DEBUG, "consumer id: %s", topicData->consumerId);\r
+        OICStrcpy(topicData->consumerId, UUID_STRING_SIZE, consumerId);\r
+        NS_LOG_V(DEBUG, "consumer id: %s", topicData->consumerId);\r
 \r
-    // TODO: print topic list\r
-    topicData->topics = topics;\r
-    NS_LOG(DEBUG, "print topic list");\r
+        // TODO: print topic list\r
+        topicData->topics = topics;\r
+        NS_LOG(DEBUG, "print topic list");\r
 \r
-    element->data = (void*) topicData;\r
-    element->next = NULL;\r
+        element->data = (void*) topicData;\r
+        element->next = NULL;\r
 \r
-    if(NSStorageWrite(consumerTopicList, element) != NS_OK)\r
-    {\r
-        NS_LOG(DEBUG, "fail to write cache");\r
+        if(NSStorageWrite(consumerTopicList, element) != NS_OK)\r
+        {\r
+            NS_LOG(DEBUG, "fail to write cache");\r
+        }\r
     }\r
 \r
     NS_LOG(DEBUG, "NSWriteTopicsToStorage() NS_OK");\r
@@ -107,16 +121,38 @@ NSResult NSRegisterTopicList(NSTopicList *topicList)
         return NS_ERROR;\r
     }\r
 \r
-    if(topicList->consumerId != NULL)\r
+    NSStoreTopics(NULL, topicList->head);\r
+\r
+    NS_LOG(DEBUG, "NSRegisterTopicList() NS_OK");\r
+    return NS_OK;\r
+}\r
+\r
+NSResult NSSubscribeTopicList(char *consumerId, NSTopicList *topicList)\r
+{\r
+    NS_LOG(DEBUG, "NSSubscribeTopicList()");\r
+\r
+    if(!topicList)\r
+    {\r
+        NS_LOG(ERROR, "no topics");\r
+        return NS_ERROR;\r
+    }\r
+\r
+    if(!consumerId)\r
     {\r
-        // id should be null to register topic list\r
         NS_LOG(ERROR, "invalid consumer id");\r
         return NS_ERROR;\r
     }\r
 \r
-    NSStoreTopics(topicList->consumerId, topicList->head);\r
+    OCResourceHandle rHandle = NULL;\r
+    if(NSPutTopicResource(topicList, &rHandle) != NS_OK)\r
+    {\r
+        NS_LOG(ERROR, "Fail to put topic resource");\r
+        return NS_ERROR;\r
+    }\r
+\r
+    NSStoreTopics(consumerId, topicList->head);\r
 \r
-    NS_LOG(DEBUG, "NSRegisterTopicList() NS_OK");\r
+    NS_LOG(DEBUG, "NSSubscribeTopicList() NS_OK");\r
     return NS_OK;\r
 }\r
 \r
@@ -247,11 +283,13 @@ NSResult NSSendTopicList(OCEntityHandlerRequest * entityHandlerRequest)
     {\r
         NS_LOG(DEBUG, "Send registered topic list");\r
         //TODO: get registered topic list\r
+        // NSGetTopics(NULL);\r
     }\r
     else\r
     {\r
         NS_LOG(DEBUG, "Send subscribed topic list to consumer");\r
         //TODO: get subscribed topic list for consumer\r
+        // NSGetTopics(consumerid);\r
     }\r
 \r
     // make response for the Get Request\r
@@ -268,9 +306,28 @@ NSResult NSSendTopicList(OCEntityHandlerRequest * entityHandlerRequest)
         return NS_ERROR;\r
     }\r
 \r
+    // set topics to the array of resource property\r
+    const int TOPIC_MAX_SIZE = 100;\r
+    int dimensions = 0;\r
+    OCRepPayload* payloadTopicArray[TOPIC_MAX_SIZE];\r
+    //TODO: use while(NSTopicList)\r
+    OCRepPayload* payloadTopic1;\r
+    OCRepPayload* payloadTopic2;\r
+\r
+    OCRepPayloadSetPropString(payloadTopic1, NS_ATTRIBUTE_TOPIC_NAME, "test topic name1");\r
+    OCRepPayloadSetPropBool(payloadTopic1, NS_ATTRIBUTE_TOPIC_SELECTION, true);\r
+\r
+    OCRepPayloadSetPropString(payloadTopic2, NS_ATTRIBUTE_TOPIC_NAME, "test topic name2");\r
+    OCRepPayloadSetPropBool(payloadTopic2, NS_ATTRIBUTE_TOPIC_SELECTION, false);\r
+\r
+    payloadTopicArray[dimensions++] = payloadTopic1;\r
+    payloadTopicArray[dimensions++] = payloadTopic2;\r
+    // end of set topics\r
+\r
     OCRepPayloadSetUri(payload, NS_COLLECTION_TOPIC_URI);\r
     OCRepPayloadSetPropString(payload, NS_ATTRIBUTE_CONSUMER_ID, id);\r
     // TODO: add PayLoadSet with topic list got above\r
+    OCRepPayloadSetPropObjectArray(payload, NS_ATTRIBUTE_TOPIC_LIST, (const OCRepPayload**)(payloadTopicArray), dimensions);\r
 \r
     response.requestHandle = entityHandlerRequest->requestHandle;\r
     response.resourceHandle = entityHandlerRequest->resource;\r
@@ -322,14 +379,17 @@ void * NSTopicSchedule(void * ptr)
                     break;\r
                 case TASK_SUBSCRIBE_TOPICS:\r
                     NS_LOG(DEBUG, "CASE TASK_SUBSCRIBE_TOPICS : ");\r
+                    NSTopicList * topicList = (NSTopicList *) node->taskData;\r
+                    NSSubscribeTopicList(topicList->consumerId, topicList);\r
+                    NSSendTopicUpdationToConsumer(topicList->consumerId);\r
+                    // TODO : free NSTopic\r
                     break;\r
                 case TASK_REGISTER_TOPICS:\r
                     NS_LOG(DEBUG, "CASE TASK_REGISTER_TOPICS : ");\r
-                    NSTopicList * topicList = (NSTopicList *) node->taskData;\r
-                    NSRegisterTopicList(topicList);\r
+                    NSTopicList * registeredTopicList = (NSTopicList *) node->taskData;\r
+                    NSRegisterTopicList(registeredTopicList);\r
                     NSSendTopicUpdation();\r
                     // TODO : free NSTopic\r
-                    // NSFreeTopicList(topicList);\r
                     break;\r
                 default:\r
                     break;\r