\r
#include "NSProvider.h"\r
#include <cstring>\r
+#include "NSConsumerService.h"\r
#include "NSConsumerInterface.h"\r
+#include "NSAcceptedProviders.h"\r
#include "NSConstants.h"\r
#include "NSCommon.h"\r
#include "oic_string.h"\r
m_state = NSProviderState::DENY;\r
m_subscribedState = NSProviderSubscribedState::DENY;\r
\r
- m_topicList = new NSTopicsList();\r
+ m_topicList = std::make_shared<NSTopicsList>();\r
\r
if (provider != nullptr)\r
{\r
NSProvider::NSProvider(const NSProvider &provider)\r
{\r
m_providerId = provider.getProviderId();\r
- m_topicList = new NSTopicsList();\r
+ m_topicList = std::make_shared<NSTopicsList>();\r
auto topicsList = provider.getTopicList();\r
if (topicsList != nullptr)\r
{\r
for (auto it : topicsList->getTopicsList())\r
{\r
- getTopicList()->addTopic(it->getTopicName(), it->getState());\r
+ m_topicList->addTopic(it.getTopicName(), it.getState());\r
}\r
}\r
+ m_topicList->unsetModifiability();\r
setListener(provider.getProviderStateReceivedCb(), provider.getMessageReceivedCb(),\r
provider.getSyncInfoReceivedCb());\r
setProviderState(provider.getProviderState());\r
NSProvider &NSProvider::operator=(const NSProvider &provider)\r
{\r
this->m_providerId = provider.getProviderId();\r
- this->m_topicList = new NSTopicsList();\r
+ this->m_topicList = std::make_shared<NSTopicsList>();\r
auto topicsList = provider.getTopicList();\r
if (topicsList != nullptr)\r
{\r
for (auto it : topicsList->getTopicsList())\r
{\r
- this->getTopicList()->addTopic(it->getTopicName(), it->getState());\r
+ this->m_topicList->addTopic(it.getTopicName(), it.getState());\r
}\r
}\r
+ m_topicList->unsetModifiability();\r
this->setListener(provider.getProviderStateReceivedCb(), provider.getMessageReceivedCb(),\r
provider.getSyncInfoReceivedCb());\r
this->setProviderState(provider.getProviderState());\r
return *this;\r
}\r
\r
- NSProvider::~NSProvider()\r
- {\r
- if (m_topicList != nullptr)\r
- {\r
- delete m_topicList;\r
- }\r
- }\r
-\r
std::string NSProvider::getProviderId() const\r
{\r
return m_providerId;\r
}\r
\r
- NSTopicsList *NSProvider::getTopicList() const\r
+ std::shared_ptr<NSTopicsList> NSProvider::getTopicList() const throw (NSException)\r
{\r
NS_LOG(DEBUG, "getTopicList - IN");\r
- return m_topicList;\r
+ if (!isValid())\r
+ {\r
+ throw NSException("Invalid Operation on provider. Provider is already Stopped.");\r
+ }\r
+ std::shared_ptr<NSTopicsList> topicList = std::make_shared<NSTopicsList>();\r
+ for (auto it : m_topicList->getTopicsList())\r
+ {\r
+ topicList->addTopic(it.getTopicName(), it.getState());\r
+ }\r
+ topicList->unsetModifiability();\r
+ return topicList;\r
}\r
\r
- NSResult NSProvider::updateTopicList(NSTopicsList *topicList)\r
+ NSResult NSProvider::updateTopicList(std::shared_ptr<NSTopicsList> topicList) throw (NSException)\r
{\r
NS_LOG(DEBUG, "updateTopicList - IN");\r
+ if (!isValid())\r
+ {\r
+ throw NSException("Invalid Operation on provider. Provider is already Stopped.");\r
+ }\r
if (topicList == nullptr)\r
{\r
return NSResult::ERROR;\r
return NSResult::ERROR;\r
}\r
topic->topicName = NULL;\r
- topic->topicName = OICStrdup(it->getTopicName().c_str());\r
- topic->state = (::NSTopicState)it->getState();\r
+ topic->topicName = OICStrdup(it.getTopicName().c_str());\r
+ topic->state = (::NSTopicState)it.getState();\r
topic->next = NULL;\r
if (topicLL == NULL)\r
{\r
iter = iter->next;\r
}\r
}\r
- NS_LOG_V(DEBUG, "calling Lower layer UpdateTopicList for Provider Id : %s",\r
+ NS_LOG_V(INFO_PRIVATE, "calling Lower layer UpdateTopicList for Provider Id : %s",\r
getProviderId().c_str());\r
NSResult result = (NSResult) NSConsumerUpdateTopicList(getProviderId().c_str(), topicLL);\r
\r
NSProviderState NSProvider::getProviderState() const\r
{\r
NS_LOG_V(DEBUG, "getProviderState state : %d", (int)m_state);\r
+ if (!isValid())\r
+ {\r
+ return NSProviderState::STOPPED;\r
+ }\r
return m_state;\r
}\r
\r
- NSProviderSubscribedState NSProvider::getProviderSubscribedState() const\r
+ NSProviderSubscribedState NSProvider::getProviderSubscribedState() const throw (NSException)\r
{\r
NS_LOG_V(DEBUG, "getProviderSubscribedState state : %d", (int)m_subscribedState);\r
+ if (!isValid())\r
+ {\r
+ throw NSException("Invalid Operation on provider. Provider is already Stopped.");\r
+ }\r
return m_subscribedState;\r
}\r
\r
- void NSProvider::subscribe()\r
+ NSResult NSProvider::subscribe() throw (NSException)\r
{\r
NS_LOG(DEBUG, "Subscribe - IN");\r
- NSSubscribe(getProviderId().c_str());\r
+ if (!isValid())\r
+ {\r
+ throw NSException("Invalid Operation on provider. Provider is already Stopped.");\r
+ }\r
+ NSResult result = (NSResult) NSSubscribe(getProviderId().c_str());\r
NS_LOG(DEBUG, "Subscribe - OUT");\r
+ return result;\r
}\r
\r
- bool NSProvider::isSubscribed()\r
+ NSResult NSProvider::unsubscribe() throw (NSException)\r
+ {\r
+ NS_LOG(DEBUG, "unsubscribe - IN");\r
+ if (!isValid())\r
+ {\r
+ throw NSException("Invalid Operation on provider. Provider is already Stopped.");\r
+ }\r
+ NSResult result = (NSResult) NSUnsubscribe(getProviderId().c_str());\r
+ NS_LOG(DEBUG, "unsubscribe - OUT");\r
+ return result;\r
+ }\r
+\r
+ bool NSProvider::isSubscribed() throw (NSException)\r
{\r
NS_LOG(DEBUG, "isSubscribed - IN");\r
+ if (!isValid())\r
+ {\r
+ throw NSException("Invalid Operation on provider. Provider is already Stopped.");\r
+ }\r
NS_LOG_V(DEBUG, "Subscribed state : %d", (int)getProviderSubscribedState());\r
if (getProviderSubscribedState() == NSProviderSubscribedState::SUBSCRIBED)\r
{\r
return false;\r
}\r
\r
- void NSProvider::sendSyncInfo(uint64_t messageId, NSSyncInfo::NSSyncType type)\r
+ NSResult NSProvider::sendSyncInfo(uint64_t messageId, NSSyncInfo::NSSyncType type) throw (NSException)\r
{\r
NS_LOG(DEBUG, "SendSyncInfo - IN");\r
- NSConsumerSendSyncInfo(m_providerId.c_str(), messageId, (::NSSyncType)type);\r
+ if (!isValid())\r
+ {\r
+ throw NSException("Invalid Operation on provider. Provider is already Stopped.");\r
+ }\r
+ NSResult result = (NSResult) NSConsumerSendSyncInfo(getProviderId().c_str(), messageId,\r
+ (::NSSyncType)type);\r
NS_LOG(DEBUG, "SendSyncInfo - OUT");\r
- return;\r
+ return result;\r
}\r
\r
void NSProvider::setListener(NSProvider::ProviderStateCallback stateHandle,\r
return m_syncInfoCb;\r
}\r
\r
- void NSProvider::setTopicList(NSTopicsList *topicsList)\r
+ void NSProvider::setTopicList(std::shared_ptr<NSTopicsList> topicsList)\r
{\r
- if (m_topicList != nullptr)\r
- {\r
- delete m_topicList;\r
- }\r
m_topicList = topicsList;\r
}\r
\r
{\r
m_subscribedState = subscribedState;\r
}\r
+\r
+ bool NSProvider::isValid() const\r
+ {\r
+ if (!NSConsumerService::getInstance()->getAcceptedProviders()->isAccepted(getProviderId()))\r
+ {\r
+ NS_LOG(DEBUG, "Invalid Operation with stale reference of Provider. Provider ID doesnot exist");\r
+ return false;\r
+ }\r
+ return true;\r
+ }\r
}\r
}\r