replace : iotivity -> iotivity-sec
[platform/upstream/iotivity.git] / service / notification / cpp-wrapper / provider / src / NSConsumer.cpp
index d264191..5d3c472 100755 (executable)
 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
 \r
 #include "NSConsumer.h"\r
+#include <cstring>\r
+#include "NSProviderService.h"\r
+#include "NSAcceptedConsumers.h"\r
 #include "NSProviderInterface.h"\r
+#include "NSException.h"\r
+#include "NSConstants.h"\r
+#include "oic_string.h"\r
+#include "oic_malloc.h"\r
 \r
 namespace OIC\r
 {\r
@@ -28,7 +35,7 @@ namespace OIC
         ::NSConsumer *NSConsumer::getNSConsumer()\r
         {\r
             ::NSConsumer *nsCon = new ::NSConsumer;\r
-            OICStrcpy(nsCon->consumerId, m_consumerId.length(), m_consumerId.c_str());\r
+            OICStrcpy(nsCon->consumerId, NS_UTILS_UUID_STRING_SIZE, m_consumerId.c_str());\r
             return nsCon;\r
         }\r
 \r
@@ -36,8 +43,7 @@ namespace OIC
         {\r
             if (consumer != nullptr)\r
             {\r
-                if ((consumer->consumerId != nullptr) && strlen(consumer->consumerId))\r
-                    m_consumerId.assign(consumer->consumerId, strlen(consumer->consumerId));\r
+                m_consumerId.assign(consumer->consumerId, NS_UTILS_UUID_STRING_SIZE - 1);\r
             }\r
         }\r
 \r
@@ -46,13 +52,66 @@ namespace OIC
             return m_consumerId;\r
         }\r
 \r
-        int NSConsumer::acceptSubscription(NSConsumer *consumer, bool accepted)\r
+        NSResult NSConsumer::acceptSubscription(bool accepted)\r
         {\r
             NS_LOG(DEBUG, "acceptSubscription - IN");\r
-            if (consumer != nullptr)\r
-                return NSAcceptSubscription(consumer->getNSConsumer(), accepted);\r
+            if (!isValid())\r
+            {\r
+                throw NSException("Invalid Operation with stale reference of Consumer");\r
+            }\r
+            NSResult result = (NSResult) NSAcceptSubscription(getConsumerId().c_str(), accepted);\r
             NS_LOG(DEBUG, "acceptSubscription - OUT");\r
-            return NS_ERROR;\r
+            return result;\r
+        }\r
+\r
+        NSResult NSConsumer::setTopic(const std::string &topicName)\r
+        {\r
+            NS_LOG(DEBUG, "setTopic - IN");\r
+            if (!isValid())\r
+            {\r
+                throw NSException("Invalid Operation with stale reference of Consumer");\r
+            }\r
+            NSResult result = (NSResult) NSProviderSetConsumerTopic(getConsumerId().c_str(),\r
+                              topicName.c_str());\r
+            NS_LOG(DEBUG, "setTopic - OUT");\r
+            return result;\r
+        }\r
+\r
+        NSResult NSConsumer::unsetTopic(const std::string &topicName)\r
+        {\r
+            NS_LOG(DEBUG, "unsetTopic - IN");\r
+            if (!isValid())\r
+            {\r
+                throw NSException("Invalid Operation with stale reference of Consumer");\r
+            }\r
+            NSResult result = (NSResult) NSProviderUnsetConsumerTopic(getConsumerId().c_str(),\r
+                              topicName.c_str());\r
+            NS_LOG(DEBUG, "unsetTopic - OUT");\r
+            return result;\r
+        }\r
+\r
+        std::shared_ptr<NSTopicsList> NSConsumer::getConsumerTopicList()\r
+        {\r
+            NS_LOG(DEBUG, "getConsumerTopicList - IN");\r
+            if (!isValid())\r
+            {\r
+                throw NSException("Invalid Operation with stale reference of Consumer");\r
+            }\r
+            ::NSTopicLL *topics = NSProviderGetConsumerTopics(getConsumerId().c_str());\r
+\r
+            std::shared_ptr<NSTopicsList> nsTopics = std::make_shared<NSTopicsList>(topics, false);\r
+            NS_LOG(DEBUG, "getConsumerTopicList - OUT");\r
+            return nsTopics;\r
+        }\r
+\r
+        bool NSConsumer::isValid() const\r
+        {\r
+            if (!NSProviderService::getInstance()->getAcceptedConsumers()->isAccepted(getConsumerId()))\r
+            {\r
+                NS_LOG(DEBUG, "Invalid Operation with stale reference of Consumer. Consumer ID doesnot exist");\r
+                return false;\r
+            }\r
+            return true;\r
         }\r
     }\r
 }\r