replace : iotivity -> iotivity-sec
[platform/upstream/iotivity.git] / service / notification / cpp-wrapper / provider / src / NSProviderService.cpp
index 79d2dc5..c6332cc 100755 (executable)
 #include <cstring>\r
 #include "NSCommon.h"\r
 #include "NSProviderInterface.h"\r
+#include "NSAcceptedConsumers.h"\r
 #include "NSConsumer.h"\r
 #include "NSSyncInfo.h"\r
 #include "NSConstants.h"\r
 #include "OCRepresentation.h"\r
+#include "ocpayload.h"\r
 #include "oic_string.h"\r
 #include "oic_malloc.h"\r
 \r
@@ -34,11 +36,11 @@ namespace OIC
 {\r
     namespace Service\r
     {\r
-        void onConsumerSubscribedCallback(::NSConsumer *consumer)\r
+        void NSProviderService::onConsumerSubscribedCallback(::NSConsumer *consumer)\r
         {\r
             NS_LOG(DEBUG, "onConsumerSubscribedCallback - IN");\r
-            NSConsumer *nsConsumer = new NSConsumer(consumer);\r
-            NSProviderService::getInstance()->getAcceptedConsumers().push_back(nsConsumer);\r
+            std::shared_ptr<NSConsumer> nsConsumer = std::make_shared<NSConsumer>(consumer);\r
+            NSProviderService::getInstance()->getAcceptedConsumers()->addConsumer(nsConsumer);\r
             if (NSProviderService::getInstance()->getProviderConfig().m_subscribeRequestCb != NULL)\r
             {\r
                 NS_LOG(DEBUG, "initiating the callback for consumer subscribed");\r
@@ -47,52 +49,57 @@ namespace OIC
             NS_LOG(DEBUG, "onConsumerSubscribedCallback - OUT");\r
         }\r
 \r
-        void onMessageSynchronizedCallback(::NSSyncInfo *syncInfo)\r
+        void NSProviderService::onMessageSynchronizedCallback(::NSSyncInfo *syncInfo)\r
         {\r
             NS_LOG(DEBUG, "onMessageSynchronizedCallback - IN");\r
-            NSSyncInfo *nsSyncInfo = new NSSyncInfo(syncInfo);\r
+            NSSyncInfo nsSyncInfo(syncInfo);\r
             if (NSProviderService::getInstance()->getProviderConfig().m_syncInfoCb != NULL)\r
             {\r
                 NS_LOG(DEBUG, "initiating the callback for synchronized");\r
                 NSProviderService::getInstance()->getProviderConfig().m_syncInfoCb(nsSyncInfo);\r
             }\r
-            delete nsSyncInfo;\r
             NS_LOG(DEBUG, "onMessageSynchronizedCallback - OUT");\r
         }\r
 \r
-        ::NSMessage *NSProviderService::getNSMessage(NSMessage *msg)\r
+        ::NSMessage *NSProviderService::getNSMessage(const NSMessage &msg)\r
         {\r
             ::NSMessage *nsMsg = new ::NSMessage;\r
-            nsMsg->messageId = msg->getMessageId();\r
-            OICStrcpy(nsMsg->providerId, NS_UTILS_UUID_STRING_SIZE, msg->getProviderId().c_str());\r
-            nsMsg->sourceName = OICStrdup(msg->getSourceName().c_str());\r
-            nsMsg->type = (::NSMessageType) msg->getType();\r
-            nsMsg->dateTime = OICStrdup(msg->getTime().c_str());\r
-            nsMsg->ttl = msg->getTTL();\r
-            nsMsg->title = OICStrdup(msg->getTitle().c_str());\r
-            nsMsg->contentText = OICStrdup(msg->getContentText().c_str());\r
-            nsMsg->topic = OICStrdup(msg->getTopic().c_str());\r
-\r
-            if (msg->getMediaContents() != nullptr)\r
+            nsMsg->messageId = msg.getMessageId();\r
+            OICStrcpy(nsMsg->providerId, NS_UTILS_UUID_STRING_SIZE, msg.getProviderId().c_str());\r
+            nsMsg->sourceName = OICStrdup(msg.getSourceName().c_str());\r
+            nsMsg->type = (::NSMessageType) msg.getType();\r
+            nsMsg->dateTime = OICStrdup(msg.getTime().c_str());\r
+            nsMsg->ttl = msg.getTTL();\r
+            nsMsg->title = OICStrdup(msg.getTitle().c_str());\r
+            nsMsg->contentText = OICStrdup(msg.getContentText().c_str());\r
+            nsMsg->topic = OICStrdup(msg.getTopic().c_str());\r
+\r
+            if (msg.getMediaContents() != nullptr)\r
             {\r
                 nsMsg->mediaContents = new ::NSMediaContents;\r
-                nsMsg->mediaContents->iconImage = OICStrdup(msg->getMediaContents()->getIconImage().c_str());\r
+                nsMsg->mediaContents->iconImage = OICStrdup(msg.getMediaContents()->getIconImage().c_str());\r
             }\r
             else\r
             {\r
                 nsMsg->mediaContents = nullptr;\r
             }\r
-            nsMsg->extraInfo = msg->getExtraInfo().getPayload();\r
+            nsMsg->extraInfo = msg.getExtraInfo().getPayload();\r
             return nsMsg;\r
         }\r
 \r
+        NSProviderService::NSProviderService()\r
+        {\r
+            m_config.m_subscribeRequestCb = NULL;\r
+            m_config.m_syncInfoCb = NULL;\r
+            m_acceptedConsumers = new NSAcceptedConsumers();\r
+        }\r
+\r
         NSProviderService::~NSProviderService()\r
         {\r
-            for (auto it : getAcceptedConsumers())\r
-            {\r
-                delete it;\r
-            }\r
-            getAcceptedConsumers().clear();\r
+            m_config.m_subscribeRequestCb = NULL;\r
+            m_config.m_syncInfoCb = NULL;\r
+            m_acceptedConsumers->removeConsumers();\r
+            delete m_acceptedConsumers;\r
         }\r
 \r
         NSProviderService *NSProviderService::getInstance()\r
@@ -104,6 +111,7 @@ namespace OIC
         NSResult NSProviderService::start(NSProviderService::ProviderConfig config)\r
         {\r
             NS_LOG(DEBUG, "start - IN");\r
+            m_acceptedConsumers->removeConsumers();\r
 \r
             m_config = config;\r
             NSProviderConfig nsConfig;\r
@@ -122,6 +130,11 @@ namespace OIC
         NSResult NSProviderService::stop()\r
         {\r
             NS_LOG(DEBUG, "stop - IN");\r
+\r
+            m_config.m_subscribeRequestCb = NULL;\r
+            m_config.m_syncInfoCb = NULL;\r
+            m_acceptedConsumers->removeConsumers();\r
+\r
             NSResult result = (NSResult) NSStopProvider();\r
             NS_LOG(DEBUG, "stop - OUT");\r
             return result;\r
@@ -130,7 +143,7 @@ namespace OIC
         NSResult NSProviderService::enableRemoteService(const std::string &serverAddress)\r
         {\r
             NS_LOG(DEBUG, "enableRemoteService - IN");\r
-            NS_LOG_V(DEBUG, "Server Address : %s", serverAddress.c_str());\r
+            NS_LOG_V(INFO_PRIVATE, "Server Address : %s", serverAddress.c_str());\r
             NSResult result = NSResult::ERROR;\r
 #ifdef WITH_CLOUD\r
             result = (NSResult) NSProviderEnableRemoteService(OICStrdup(serverAddress.c_str()));\r
@@ -145,7 +158,7 @@ namespace OIC
         NSResult NSProviderService::disableRemoteService(const std::string &serverAddress)\r
         {\r
             NS_LOG(DEBUG, "disableRemoteService - IN");\r
-            NS_LOG_V(DEBUG, "Server Address : %s", serverAddress.c_str());\r
+            NS_LOG_V(INFO_PRIVATE, "Server Address : %s", serverAddress.c_str());\r
             NSResult result = NSResult::ERROR;\r
 #ifdef WITH_CLOUD\r
             result = (NSResult) NSProviderDisableRemoteService(OICStrdup(serverAddress.c_str()));\r
@@ -157,51 +170,71 @@ namespace OIC
             return result;\r
         }\r
 \r
-        NSResult NSProviderService::sendMessage(NSMessage *msg)\r
+        NSResult NSProviderService::subscribeMQService(const std::string &serverAddress,\r
+                const std::string &topicName)\r
+        {\r
+            NS_LOG(DEBUG, "subscribeMQService - IN");\r
+            NS_LOG_V(INFO_PRIVATE, "Server Address : %s", serverAddress.c_str());\r
+            NSResult result = NSResult::ERROR;\r
+#ifdef WITH_MQ\r
+            result = (NSResult) NSProviderSubscribeMQService(\r
+                         serverAddress.c_str(), topicName.c_str());\r
+#else\r
+            NS_LOG(ERROR, "MQ Services feature is not enabled in the Build");\r
+            (void) serverAddress;\r
+            (void) topicName;\r
+#endif\r
+            NS_LOG(DEBUG, "subscribeMQService - OUT");\r
+            return result;\r
+        }\r
+\r
+        NSResult NSProviderService::sendMessage(const NSMessage &msg)\r
         {\r
             NS_LOG(DEBUG, "sendMessage - IN");\r
             NSResult result = NSResult::ERROR;\r
-            if (msg != nullptr)\r
+\r
+            ::NSMessage *nsMsg = getNSMessage(msg);\r
+\r
+            NS_LOG_V(INFO_PRIVATE, "nsMsg->providerId : %s", nsMsg->providerId);\r
+            result = (NSResult) NSSendMessage(nsMsg);\r
+            OICFree(nsMsg->dateTime);\r
+            OICFree(nsMsg->title);\r
+            OICFree(nsMsg->contentText);\r
+            OICFree(nsMsg->sourceName);\r
+            OICFree(nsMsg->topic);\r
+            if (nsMsg->mediaContents != NULL)\r
             {\r
-                ::NSMessage *nsMsg = getNSMessage(msg);\r
-\r
-                NS_LOG_V(DEBUG, "nsMsg->providerId : %s", nsMsg->providerId);\r
-                result = (NSResult) NSSendMessage(nsMsg);\r
-                OICFree(nsMsg->dateTime);\r
-                OICFree(nsMsg->title);\r
-                OICFree(nsMsg->contentText);\r
-                OICFree(nsMsg->sourceName);\r
-                OICFree(nsMsg->topic);\r
-                OICFree(nsMsg->extraInfo);\r
+                if (nsMsg->mediaContents->iconImage != NULL)\r
+                {\r
+                    OICFree(nsMsg->mediaContents->iconImage);\r
+                }\r
                 delete nsMsg->mediaContents;\r
-                delete nsMsg;\r
-            }\r
-            else\r
-            {\r
-                NS_LOG(DEBUG, "Empty Message");\r
             }\r
+            OCPayloadDestroy((OCPayload *) nsMsg->extraInfo);\r
+            delete nsMsg;\r
+\r
             NS_LOG(DEBUG, "sendMessage - OUT");\r
             return result;\r
         }\r
 \r
-        void NSProviderService::sendSyncInfo(uint64_t messageId,\r
-                                             NSSyncInfo::NSSyncType type)\r
+        NSResult NSProviderService::sendSyncInfo(uint64_t messageId,\r
+                NSSyncInfo::NSSyncType type)\r
         {\r
             NS_LOG(DEBUG, "sendSyncInfo - IN");\r
-            NSProviderSendSyncInfo(messageId, (NSSyncType)type);\r
+            NSResult result = (NSResult) NSProviderSendSyncInfo(messageId, (NSSyncType)type);\r
             NS_LOG(DEBUG, "sendSyncInfo - OUT");\r
-            return;\r
+            return result;\r
         }\r
 \r
-        NSMessage *NSProviderService::createMessage()\r
+        NSMessage NSProviderService::createMessage()\r
         {\r
             NS_LOG(DEBUG, "createMessage - IN");\r
 \r
             ::NSMessage *message = NSCreateMessage();\r
-            NSMessage *nsMessage = new NSMessage(message);\r
+            NSMessage nsMessage(message);\r
 \r
-            NS_LOG_V(DEBUG, "Message ID : %lld", (long long int) nsMessage->getMessageId());\r
-            NS_LOG_V(DEBUG, "Provider ID : %s", nsMessage->getProviderId().c_str());\r
+            NS_LOG_V(DEBUG, "Message ID : %lld", (long long int) nsMessage.getMessageId());\r
+            NS_LOG_V(INFO_PRIVATE, "Provider ID : %s", nsMessage.getProviderId().c_str());\r
             NS_LOG(DEBUG, "createMessage - OUT");\r
 \r
             OICFree(message);\r
@@ -224,12 +257,12 @@ namespace OIC
             return result;\r
         }\r
 \r
-        NSTopicsList *NSProviderService::getRegisteredTopicList()\r
+        std::shared_ptr<NSTopicsList> NSProviderService::getRegisteredTopicList()\r
         {\r
             NS_LOG(DEBUG, "getRegisteredTopicList - IN");\r
             ::NSTopicLL *topics = NSProviderGetTopics();\r
 \r
-            NSTopicsList *nsTopics = new NSTopicsList(topics);\r
+            std::shared_ptr<NSTopicsList> nsTopics = std::make_shared<NSTopicsList>(topics, false);\r
             NS_LOG(DEBUG, "getRegisteredTopicList - OUT");\r
             return nsTopics;\r
         }\r
@@ -239,21 +272,12 @@ namespace OIC
             return m_config;\r
         }\r
 \r
-        NSConsumer *NSProviderService::getConsumer(const std::string &id)\r
+        std::shared_ptr<NSConsumer> NSProviderService::getConsumer(const std::string &id)\r
         {\r
-            for (auto it : getAcceptedConsumers())\r
-            {\r
-                if (it->getConsumerId() == id)\r
-                {\r
-                    NS_LOG(DEBUG, "getConsumer : Found Consumer with given ID");\r
-                    return it;\r
-                }\r
-            }\r
-            NS_LOG(DEBUG, "getConsumer : Not Found Consumer with given ID");\r
-            return NULL;\r
+            return m_acceptedConsumers->getConsumer(id);\r
         }\r
 \r
-        std::list<NSConsumer *> &NSProviderService::getAcceptedConsumers()\r
+        NSAcceptedConsumers *NSProviderService::getAcceptedConsumers()\r
         {\r
             return m_acceptedConsumers;\r
         }\r