648f9c659236c838c29a7e712df11ee65895c801
[platform/upstream/iotivity.git] / service / notification / cpp-wrapper / consumer / src / NSProvider.cpp
1 //******************************************************************\r
2 //\r
3 // Copyright 2016 Samsung Electronics All Rights Reserved.\r
4 //\r
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
6 //\r
7 // Licensed under the Apache License, Version 2.0 (the "License");\r
8 // you may not use this file except in compliance with the License.\r
9 // You may obtain a copy of the License at\r
10 //\r
11 //      http://www.apache.org/licenses/LICENSE-2.0\r
12 //\r
13 // Unless required by applicable law or agreed to in writing, software\r
14 // distributed under the License is distributed on an "AS IS" BASIS,\r
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
16 // See the License for the specific language governing permissions and\r
17 // limitations under the License.\r
18 //\r
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
20 \r
21 #include "NSProvider.h"\r
22 #include <cstring>\r
23 #include "NSConsumerInterface.h"\r
24 #include "NSConstants.h"\r
25 #include "NSCommon.h"\r
26 #include "oic_string.h"\r
27 #include "oic_malloc.h"\r
28 \r
29 namespace OIC\r
30 {\r
31     namespace Service\r
32     {\r
33         ::NSProvider *NSProvider::getNSProvider()\r
34         {\r
35             ::NSProvider *provider = new ::NSProvider;\r
36             OICStrcpy(provider->providerId, NS_UTILS_UUID_STRING_SIZE, m_providerId.c_str());\r
37             return provider;\r
38         }\r
39 \r
40         NSProvider::NSProvider(::NSProvider *provider)\r
41         {\r
42             m_stateCb = NULL;\r
43             m_messageCb = NULL;\r
44             m_syncInfoCb = NULL;\r
45             m_state = NSProviderState::DENY;\r
46             m_subscribedState = NSProviderSubscribedState::DENY;\r
47 \r
48             m_topicList = new NSTopicsList();\r
49 \r
50             if (provider != nullptr)\r
51             {\r
52                 m_providerId.assign(provider->providerId, NS_UTILS_UUID_STRING_SIZE - 1);\r
53             }\r
54         }\r
55 \r
56         NSProvider::NSProvider(const NSProvider &provider)\r
57         {\r
58             m_providerId = provider.getProviderId();\r
59             m_topicList = new NSTopicsList();\r
60             auto topicsList = provider.getTopicList();\r
61             if (topicsList != nullptr)\r
62             {\r
63                 for (auto it : topicsList->getTopicsList())\r
64                 {\r
65                     getTopicList()->addTopic(it->getTopicName(), it->getState());\r
66                 }\r
67             }\r
68             setListener(provider.getProviderStateReceivedCb(), provider.getMessageReceivedCb(),\r
69                         provider.getSyncInfoReceivedCb());\r
70             setProviderState(provider.getProviderState());\r
71             setProviderSubscribedState(provider.getProviderSubscribedState());\r
72         }\r
73 \r
74         NSProvider &NSProvider::operator=(const NSProvider &provider)\r
75         {\r
76             this->m_providerId = provider.getProviderId();\r
77             this->m_topicList = new NSTopicsList();\r
78             auto topicsList = provider.getTopicList();\r
79             if (topicsList != nullptr)\r
80             {\r
81                 for (auto it : topicsList->getTopicsList())\r
82                 {\r
83                     this->getTopicList()->addTopic(it->getTopicName(), it->getState());\r
84                 }\r
85             }\r
86             this->setListener(provider.getProviderStateReceivedCb(), provider.getMessageReceivedCb(),\r
87                               provider.getSyncInfoReceivedCb());\r
88             this->setProviderState(provider.getProviderState());\r
89             this->setProviderSubscribedState(provider.getProviderSubscribedState());\r
90             return *this;\r
91         }\r
92 \r
93         NSProvider::~NSProvider()\r
94         {\r
95             if (m_topicList != nullptr)\r
96                 delete m_topicList;\r
97         }\r
98 \r
99         std::string NSProvider::getProviderId() const\r
100         {\r
101             return m_providerId;\r
102         }\r
103 \r
104         NSTopicsList *NSProvider::getTopicList() const\r
105         {\r
106             NS_LOG(DEBUG, "getTopicList - IN");\r
107             return m_topicList;\r
108         }\r
109 \r
110         NSResult NSProvider::updateTopicList(NSTopicsList *topicList)\r
111         {\r
112             NS_LOG(DEBUG, "updateTopicList - IN");\r
113             if (topicList == nullptr)\r
114                 return NSResult::ERROR;\r
115 //            for (auto it : topicList->getTopicsList())\r
116 //            {\r
117 //                NS_LOG_V(DEBUG, "Topic Name : %s", it->getTopicName().c_str());\r
118 //                NS_LOG_V(DEBUG, "Topic State : %d", (int) it->getState());\r
119 //            }\r
120             NS_LOG(DEBUG, "Creating TopicLL from TopicList");\r
121             NSTopicLL *topicLL = NULL;\r
122             for (auto it : topicList->getTopicsList())\r
123             {\r
124                 NSTopicLL *topic = (NSTopicLL *) OICMalloc(sizeof(NSTopicLL));\r
125                 if (topic == nullptr)\r
126                 {\r
127                     NS_LOG(ERROR, "new NSTopicLL failed");\r
128                     return NSResult::ERROR;\r
129                 }\r
130                 topic->topicName = NULL;\r
131                 topic->topicName = OICStrdup(it->getTopicName().c_str());\r
132                 topic->state = (::NSTopicState)it->getState();\r
133                 topic->next = NULL;\r
134                 if (topicLL == NULL)\r
135                 {\r
136                     topicLL = topic;\r
137                 }\r
138                 else\r
139                 {\r
140                     NSTopicLL *iter = topicLL;\r
141                     NSTopicLL *prev = NULL;\r
142                     while (iter)\r
143                     {\r
144                         prev = iter;\r
145                         iter = (NSTopicLL *) iter->next;\r
146                     }\r
147                     prev->next = topic;\r
148                     topic->next = NULL;\r
149                 }\r
150             }\r
151             if (topicLL)\r
152             {\r
153                 NSTopicLL *iter = topicLL;\r
154                 while (iter)\r
155                 {\r
156                     NS_LOG_V(DEBUG, "Topic Name : %s", iter->topicName);\r
157                     NS_LOG_V(DEBUG, "Topic State : %d", (int) iter->state);\r
158                     iter = iter->next;\r
159                 }\r
160             }\r
161             NS_LOG_V(DEBUG, "calling Lower layer UpdateTopicList for Provider Id : %s",\r
162                      getProviderId().c_str());\r
163             NSResult result = (NSResult) NSConsumerUpdateTopicList(getProviderId().c_str(), topicLL);\r
164             NS_LOG(DEBUG, "updateTopicList - OUT");\r
165             return result;\r
166         }\r
167 \r
168         NSProviderState NSProvider::getProviderState() const\r
169         {\r
170             NS_LOG_V(DEBUG, "getProviderState  state : %d", (int)m_state);\r
171             return m_state;\r
172         }\r
173 \r
174         NSProviderSubscribedState NSProvider::getProviderSubscribedState() const\r
175         {\r
176             NS_LOG_V(DEBUG, "getProviderSubscribedState  state : %d", (int)m_subscribedState);\r
177             return m_subscribedState;\r
178         }\r
179 \r
180         void NSProvider::subscribe()\r
181         {\r
182             NS_LOG(DEBUG, "Subscribe - IN");\r
183             NSSubscribe(getProviderId().c_str());\r
184             NS_LOG(DEBUG, "Subscribe - OUT");\r
185         }\r
186 \r
187         bool NSProvider::isSubscribed()\r
188         {\r
189             NS_LOG(DEBUG, "isSubscribed - IN");\r
190             NS_LOG_V(DEBUG, "Subscribed state : %d", (int)getProviderSubscribedState());\r
191             if (getProviderSubscribedState() == NSProviderSubscribedState::SUBSCRIBED)\r
192                 return true;\r
193             return false;\r
194         }\r
195 \r
196         void NSProvider::sendSyncInfo(uint64_t messageId, NSSyncInfo::NSSyncType type)\r
197         {\r
198             NS_LOG(DEBUG, "SendSyncInfo - IN");\r
199             NSConsumerSendSyncInfo(m_providerId.c_str(), messageId, (::NSSyncType)type);\r
200             NS_LOG(DEBUG, "SendSyncInfo - OUT");\r
201             return;\r
202         }\r
203 \r
204         void NSProvider::setListener(NSProvider::ProviderStateCallback stateHandle,\r
205                                      NSProvider::MessageReceivedCallback messageHandle,\r
206                                      NSProvider::SyncInfoReceivedCallback syncHandle)\r
207         {\r
208             NS_LOG(DEBUG, "setListener - IN");\r
209             m_stateCb = stateHandle;\r
210             m_messageCb = messageHandle;\r
211             m_syncInfoCb = syncHandle;\r
212             NS_LOG(DEBUG, "setListener - OUT");\r
213         }\r
214 \r
215         NSProvider::ProviderStateCallback NSProvider::getProviderStateReceivedCb() const\r
216         {\r
217             return m_stateCb;\r
218         }\r
219 \r
220         NSProvider::MessageReceivedCallback NSProvider::getMessageReceivedCb() const\r
221         {\r
222             return m_messageCb;\r
223         }\r
224 \r
225         NSProvider::SyncInfoReceivedCallback NSProvider::getSyncInfoReceivedCb() const\r
226         {\r
227             return m_syncInfoCb;\r
228         }\r
229 \r
230         void NSProvider::setTopicList(NSTopicsList *topicsList)\r
231         {\r
232             if (m_topicList != nullptr)\r
233                 delete m_topicList;\r
234             m_topicList = topicsList;\r
235         }\r
236 \r
237         void NSProvider::setProviderState(const NSProviderState &providerState)\r
238         {\r
239             m_state = providerState;\r
240         }\r
241 \r
242         void NSProvider::setProviderSubscribedState(const NSProviderSubscribedState &subscribedState)\r
243         {\r
244             m_subscribedState = subscribedState;\r
245         }\r
246     }\r
247 }\r