Add APIs for topic notification
authorch79.cho <ch79.cho@samsung.com>
Mon, 8 Aug 2016 12:00:35 +0000 (21:00 +0900)
committerMadan Lanka <lanka.madan@samsung.com>
Tue, 9 Aug 2016 06:40:59 +0000 (06:40 +0000)
Three APIs for topic notification on provider service
are added.
1) get topic list
2) set topic list
3) recommend topics

Change-Id: Ic4b606af164495c2fc02a4a7a79c8fe4ee0e69f2
Signed-off-by: ch79.cho <ch79.cho@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/10147
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Madan Lanka <lanka.madan@samsung.com>
service/notification/include/NSProviderInterface.h
service/notification/src/common/NSConstants.h
service/notification/src/common/NSUtil.c
service/notification/src/common/NSUtil.h
service/notification/src/provider/NSProviderInterface.c
service/notification/src/provider/NSProviderListener.c
service/notification/src/provider/NSProviderTopic.h [new file with mode: 0644]

index f7e4704..843a99e 100644 (file)
@@ -132,6 +132,31 @@ NSResult NSProviderSendSyncInfo(uint64_t messageId, NSSyncType type);
  */\r
 NSMessage * NSCreateMessage();\r
 \r
+/**\r
+ * Request all the topics which has already registered by user\r
+ * @param[in] consumerid  the id of consumer which subscribes topics\r
+ * if NULL, all the registered topic list is returned\r
+ * @return :: list of NSTopic\r
+ */\r
+NSTopicList * NSProviderGetTopics(char *consumerId);\r
+\r
+/**\r
+ * Request to register topics to provide to consumers\r
+ * @param[in]  topicList  List of NSTopic\r
+ * the consumerId of NSTopicList struct shoud be set NULL\r
+ * @return ::NS_OK or result code of NSResult\r
+ */\r
+NSResult NSProviderSetTopics(NSTopicList *topicList);\r
+\r
+/**\r
+ * Set recommended topics for a consumer\r
+ * @param[in]  topicList  List of NSTopic recommended by provider\r
+ * the consumerId of NSTopicList struct should be set consumerId\r
+ * @return ::NS_OK or result code of NSResult\r
+ */\r
+NSResult NSProviderRecommendTopics(NSTopicList *topicList);\r
+\r
+\r
 #ifdef __cplusplus\r
 }\r
 #endif // __cplusplus\r
index 56320ee..1bc12ef 100644 (file)
@@ -232,8 +232,8 @@ typedef enum eTaskType
     TASK_CB_SYNC = 10001,
 
     TASK_SEND_TOPICS = 11000,
-    TASK_SELECT_TOPICS = 11001,
-    TASK_SET_TOPICS = 11002,
+    TASK_SUBSCRIBE_TOPICS = 11001,
+    TASK_REGISTER_TOPICS = 11002,
 
 } NSTaskType;
 
index 541cdd8..d5885e6 100755 (executable)
@@ -424,3 +424,20 @@ NSMessage * NSInitializeMessage()
 
     return msg;
 }
+
+NSTopicList * NSInitializeTopicList()
+{
+    NSTopicList * topicList = (NSTopicList *)OICMalloc(sizeof(NSTopicList));
+
+    if(!topicList)
+    {
+        NS_LOG(ERROR, "topicList is NULL");
+        return NULL;
+    }
+
+    (topicList->consumerId)[0] = '\0';
+    topicList->topics = NULL;
+
+    return topicList;
+}
+
index 06f0cd7..df3de1e 100755 (executable)
@@ -49,6 +49,8 @@ NSSyncInfo * NSGetSyncInfo(OCPayload * payload);
 NSResult NSFreeConsumer(NSConsumer *);\r
 NSConsumer * NSDuplicateConsumer(NSConsumer *);\r
 \r
+NSTopicList * NSInitializeTopicList();\r
+\r
 void NSDuplicateSetPropertyString(OCRepPayload **, const char *, const char *);\r
 void NSDuplicateSetPropertyInt(OCRepPayload ** msgPayload, const char * name, int64_t value);\r
 NSResult NSGenerateUUIDStr(char uuidStr[UUID_STRING_SIZE]);\r
index c91f03d..3b8ca0e 100644 (file)
@@ -26,6 +26,7 @@
 #include "NSProviderCallbackResponse.h"\r
 #include "NSStorageAdapter.h"\r
 #include "NSProviderMemoryCache.h"\r
+#include "NSProviderTopic.h"\r
 #include "oic_malloc.h"\r
 #include "oic_string.h"\r
 #include "cautilinterface.h"\r
@@ -207,7 +208,6 @@ NSResult NSAcceptSubscription(NSConsumer *consumer, bool accepted)
     pthread_mutex_lock(&nsInitMutex);\r
 \r
     NSConsumer * newConsumer = NSDuplicateConsumer(consumer);\r
-\r
     if(accepted)\r
     {\r
         NS_LOG(DEBUG, "accepted is true - ALLOW");\r
@@ -236,3 +236,61 @@ NSMessage * NSCreateMessage()
     NS_LOG(DEBUG, "NSCreateMessage - OUT");\r
     return msg;\r
 }\r
+\r
+NSTopicList * NSProviderGetTopics(char *consumerId)\r
+{\r
+    NS_LOG(DEBUG, "NSProviderGetTopics - IN");\r
+    pthread_mutex_lock(&nsInitMutex);\r
+\r
+    if(consumerId == NULL)\r
+    {\r
+        NS_LOG(DEBUG, "Get all the topics registered by user");\r
+    }\r
+\r
+    NSTopicList * topicList = NSInitializeTopicList();\r
+    OICStrcpy(topicList->consumerId, UUID_STRING_SIZE, consumerId);\r
+    // OICStrcpy(topicList->topics, sizeof(NSTopic), NSGetTopics(consumerId));\r
+\r
+    pthread_mutex_unlock(&nsInitMutex);\r
+    NS_LOG(DEBUG, "NSProviderGetTopics - OUT");\r
+\r
+    return topicList;\r
+}\r
+\r
+NSResult NSProviderSetTopics(NSTopicList *topicList)\r
+{\r
+    NS_LOG(DEBUG, "NSProviderSetTopics - IN");\r
+    pthread_mutex_lock(&nsInitMutex);\r
+\r
+    if(topicList->consumerId != NULL)\r
+    {\r
+        NS_LOG(DEBUG, "consumer id should be set by NULL to register topics");\r
+        return NS_FAIL;\r
+    }\r
+\r
+    NSPushQueue(TOPIC_SCHEDULER, TASK_REGISTER_TOPICS, topicList);\r
+\r
+    pthread_mutex_unlock(&nsInitMutex);\r
+    NS_LOG(DEBUG, "NSProviderSetTopics - OUT");\r
+    \r
+    return NS_OK;\r
+}\r
+\r
+NSResult NSProviderRecommendTopics(NSTopicList *topicList)\r
+{\r
+    NS_LOG(DEBUG, "NSProviderRecommendTopics - IN");\r
+    pthread_mutex_lock(&nsInitMutex);\r
+\r
+    if(topicList->consumerId == NULL)\r
+    {\r
+        NS_LOG(DEBUG, "consumer id should be set for topic subscription");\r
+        return NS_FAIL;\r
+    }\r
+\r
+    NSPushQueue(TOPIC_SCHEDULER, TASK_SUBSCRIBE_TOPICS, topicList);\r
+\r
+    pthread_mutex_unlock(&nsInitMutex);\r
+    NS_LOG(DEBUG, "NSProviderRecommendTopics - OUT");\r
+    return NS_OK;\r
+}\r
+\r
index 3b0e6bc..27cf554 100644 (file)
@@ -208,7 +208,7 @@ OCEntityHandlerResult NSEntityHandlerTopicCb(OCEntityHandlerFlag flag,
             NS_LOG(DEBUG, "NSEntityHandlerTopicCb - OC_REST_POST");\r
 \r
             // Send topic updated message(id=TOPIC) to the consumer who request to post.\r
-            NSPushQueue(TOPIC_SCHEDULER, TASK_SELECT_TOPICS,\r
+            NSPushQueue(TOPIC_SCHEDULER, TASK_SUBSCRIBE_TOPICS,\r
                     NSCopyOCEntityHandlerRequest(entityHandlerRequest));\r
 \r
             ehResult = OC_EH_OK;\r
diff --git a/service/notification/src/provider/NSProviderTopic.h b/service/notification/src/provider/NSProviderTopic.h
new file mode 100644 (file)
index 0000000..ef4abe6
--- /dev/null
@@ -0,0 +1,31 @@
+//******************************************************************\r
+//\r
+// Copyright 2016 Samsung Electronics All Rights Reserved.\r
+//\r
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
+//\r
+// Licensed under the Apache License, Version 2.0 (the "License");\r
+// you may not use this file except in compliance with the License.\r
+// You may obtain a copy of the License at\r
+//\r
+//      http://www.apache.org/licenses/LICENSE-2.0\r
+//\r
+// Unless required by applicable law or agreed to in writing, software\r
+// distributed under the License is distributed on an "AS IS" BASIS,\r
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+// See the License for the specific language governing permissions and\r
+// limitations under the License.\r
+//\r
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
+\r
+#ifndef _NS_PROVIDER_TOPIC_H_\r
+#define _NS_PROVIDER_TOPIC_H_\r
+\r
+#include "NSCommon.h"\r
+#include "NSStructs.h"\r
+#include "NSProviderScheduler.h"\r
+#include "NSProviderResource.h"\r
+\r
+NSTopicList * NSGetTopics(char *consumerId);\r
+\r
+#endif /* _NS_PROVIDER_TOPIC_H_ */\r