Remove logs with non-LOGGING build option.
[platform/upstream/iotivity.git] / service / notification / cpp-wrapper / provider / src / NSProviderService.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 \r
22 #include "NSProviderService.h"\r
23 #include <cstring>\r
24 #include "NSCommon.h"\r
25 #include "NSProviderInterface.h"\r
26 #include "NSConsumer.h"\r
27 #include "NSSyncInfo.h"\r
28 #include "NSConstants.h"\r
29 #include "oic_string.h"\r
30 #include "oic_malloc.h"\r
31 \r
32 namespace OIC\r
33 {\r
34     namespace Service\r
35     {\r
36         void onConsumerSubscribedCallback(::NSConsumer *consumer)\r
37         {\r
38             NS_LOG(DEBUG, "onConsumerSubscribedCallback - IN");\r
39             NSConsumer *nsConsumer = new NSConsumer(consumer);\r
40             NSProviderService::getInstance()->getAcceptedConsumers().push_back(nsConsumer);\r
41             if (NSProviderService::getInstance()->getProviderConfig().m_subscribeRequestCb != NULL)\r
42             {\r
43                 NS_LOG(DEBUG, "initiating the callback for consumer subscribed");\r
44                 NSProviderService::getInstance()->getProviderConfig().m_subscribeRequestCb(nsConsumer);\r
45             }\r
46             NS_LOG(DEBUG, "onConsumerSubscribedCallback - OUT");\r
47         }\r
48 \r
49         void onMessageSynchronizedCallback(::NSSyncInfo *syncInfo)\r
50         {\r
51             NS_LOG(DEBUG, "onMessageSynchronizedCallback - IN");\r
52             NSSyncInfo *nsSyncInfo = new NSSyncInfo(syncInfo);\r
53             if (NSProviderService::getInstance()->getProviderConfig().m_syncInfoCb != NULL)\r
54             {\r
55                 NS_LOG(DEBUG, "initiating the callback for synchronized");\r
56                 NSProviderService::getInstance()->getProviderConfig().m_syncInfoCb(nsSyncInfo);\r
57             }\r
58             delete nsSyncInfo;\r
59             NS_LOG(DEBUG, "onMessageSynchronizedCallback - OUT");\r
60         }\r
61 \r
62         ::NSMessage *NSProviderService::getNSMessage(NSMessage *msg)\r
63         {\r
64             ::NSMessage *nsMsg = new ::NSMessage;\r
65             nsMsg->messageId = msg->getMessageId();\r
66             OICStrcpy(nsMsg->providerId, NS_UTILS_UUID_STRING_SIZE, msg->getProviderId().c_str());\r
67             nsMsg->sourceName = OICStrdup(msg->getSourceName().c_str());\r
68             nsMsg->type = (::NSMessageType) msg->getType();\r
69             nsMsg->dateTime = OICStrdup(msg->getTime().c_str());\r
70             nsMsg->ttl = msg->getTTL();\r
71             nsMsg->title = OICStrdup(msg->getTitle().c_str());\r
72             nsMsg->contentText = OICStrdup(msg->getContentText().c_str());\r
73             nsMsg->topic = OICStrdup(msg->getTopic().c_str());\r
74 \r
75             nsMsg->mediaContents = new ::NSMediaContents;\r
76             if (msg->getMediaContents() != nullptr)\r
77                 nsMsg->mediaContents->iconImage = OICStrdup(msg->getMediaContents()->getIconImage().c_str());\r
78             else\r
79                 nsMsg->mediaContents->iconImage = nullptr;\r
80             return nsMsg;\r
81         }\r
82 \r
83         NSProviderService::~NSProviderService()\r
84         {\r
85             for (auto it : getAcceptedConsumers())\r
86             {\r
87                 delete it;\r
88             }\r
89             getAcceptedConsumers().clear();\r
90         }\r
91 \r
92         NSProviderService *NSProviderService::getInstance()\r
93         {\r
94             static NSProviderService s_instance;\r
95             return &s_instance;\r
96         }\r
97 \r
98         NSResult NSProviderService::start(NSProviderService::ProviderConfig config)\r
99         {\r
100             NS_LOG(DEBUG, "start - IN");\r
101 \r
102             m_config = config;\r
103             NSProviderConfig nsConfig;\r
104             nsConfig.subRequestCallback = onConsumerSubscribedCallback;\r
105             nsConfig.syncInfoCallback = onMessageSynchronizedCallback;\r
106             nsConfig.subControllability = config.subControllability;\r
107             nsConfig.userInfo = OICStrdup(config.userInfo.c_str());\r
108 \r
109             NSResult result = (NSResult) NSStartProvider(nsConfig);\r
110             NS_LOG(DEBUG, "start - OUT");\r
111             return result;\r
112         }\r
113 \r
114         NSResult NSProviderService::stop()\r
115         {\r
116             NS_LOG(DEBUG, "stop - IN");\r
117             NSResult result = (NSResult) NSStopProvider();\r
118             NS_LOG(DEBUG, "stop - OUT");\r
119             return result;\r
120         }\r
121 \r
122         NSResult NSProviderService::enableRemoteService(const std::string &serverAddress)\r
123         {\r
124             NS_LOG(DEBUG, "enableRemoteService - IN");\r
125             NS_LOG_V(DEBUG, "Server Address : %s", serverAddress.c_str());\r
126             NSResult result = NSResult::ERROR;\r
127 #ifdef WITH_CLOUD\r
128             result = (NSResult) NSProviderEnableRemoteService(OICStrdup(serverAddress.c_str()));\r
129 #else\r
130             (void) serverAddress;\r
131             NS_LOG(ERROR, "Remote Services feature is not enabled in the Build");\r
132 #endif\r
133             NS_LOG(DEBUG, "enableRemoteService - OUT");\r
134             return result;\r
135         }\r
136 \r
137         NSResult NSProviderService::disableRemoteService(const std::string &serverAddress)\r
138         {\r
139             NS_LOG(DEBUG, "disableRemoteService - IN");\r
140             NS_LOG_V(DEBUG, "Server Address : %s", serverAddress.c_str());\r
141             NSResult result = NSResult::ERROR;\r
142 #ifdef WITH_CLOUD\r
143             result = (NSResult) NSProviderDisableRemoteService(OICStrdup(serverAddress.c_str()));\r
144 #else\r
145             (void) serverAddress;\r
146             NS_LOG(ERROR, "Remote Services feature is not enabled in the Build");\r
147 #endif\r
148             NS_LOG(DEBUG, "disableRemoteService - OUT");\r
149             return result;\r
150         }\r
151 \r
152         NSResult NSProviderService::sendMessage(NSMessage *msg)\r
153         {\r
154             NS_LOG(DEBUG, "sendMessage - IN");\r
155             NSResult result = NSResult::ERROR;\r
156             if (msg != nullptr)\r
157             {\r
158                 ::NSMessage *nsMsg = getNSMessage(msg);\r
159 \r
160                 NS_LOG_V(DEBUG, "nsMsg->providerId : %s", nsMsg->providerId);\r
161                 result = (NSResult) NSSendMessage(nsMsg);\r
162                 delete nsMsg->mediaContents;\r
163                 delete nsMsg;\r
164             }\r
165             else\r
166             {\r
167                 NS_LOG(DEBUG, "Empty Message");\r
168             }\r
169             NS_LOG(DEBUG, "sendMessage - OUT");\r
170             return result;\r
171         }\r
172 \r
173         void NSProviderService::sendSyncInfo(uint64_t messageId,\r
174                                              NSSyncInfo::NSSyncType type)\r
175         {\r
176             NS_LOG(DEBUG, "sendSyncInfo - IN");\r
177             NSProviderSendSyncInfo(messageId, (NSSyncType)type);\r
178             NS_LOG(DEBUG, "sendSyncInfo - OUT");\r
179             return;\r
180         }\r
181 \r
182         NSMessage *NSProviderService::createMessage()\r
183         {\r
184             NS_LOG(DEBUG, "createMessage - IN");\r
185 \r
186             ::NSMessage *message = NSCreateMessage();\r
187             NSMessage *nsMessage = new NSMessage(message);\r
188 \r
189             NS_LOG_V(DEBUG, "Message ID : %lld", (long long int) nsMessage->getMessageId());\r
190             NS_LOG_V(DEBUG, "Provider ID : %s", nsMessage->getProviderId().c_str());\r
191             NS_LOG(DEBUG, "createMessage - OUT");\r
192 \r
193             return nsMessage;\r
194         }\r
195 \r
196         NSResult NSProviderService::registerTopic(const std::string &topicName)\r
197         {\r
198             NS_LOG(DEBUG, "registerTopic - IN");\r
199             NSResult result = (NSResult) NSProviderRegisterTopic(topicName.c_str());\r
200             NS_LOG(DEBUG, "registerTopic - OUT");\r
201             return result;\r
202         }\r
203 \r
204         NSResult NSProviderService::unregisterTopic(const std::string &topicName)\r
205         {\r
206             NS_LOG(DEBUG, "unregisterTopic - IN");\r
207             NSResult result = (NSResult) NSProviderUnregisterTopic(topicName.c_str());\r
208             NS_LOG(DEBUG, "unregisterTopic - OUT");\r
209             return result;\r
210         }\r
211 \r
212         NSTopicsList *NSProviderService::getRegisteredTopicList()\r
213         {\r
214             NS_LOG(DEBUG, "getRegisteredTopicList - IN");\r
215             ::NSTopicLL *topics = NSProviderGetTopics();\r
216 \r
217             NSTopicsList *nsTopics = new NSTopicsList(topics);\r
218             NS_LOG(DEBUG, "getRegisteredTopicList - OUT");\r
219             return nsTopics;\r
220         }\r
221 \r
222         NSProviderService::ProviderConfig NSProviderService::getProviderConfig()\r
223         {\r
224             return m_config;\r
225         }\r
226 \r
227         NSConsumer *NSProviderService::getConsumer(const std::string &id)\r
228         {\r
229             for (auto it : getAcceptedConsumers())\r
230             {\r
231                 if (it->getConsumerId() == id)\r
232                 {\r
233                     NS_LOG(DEBUG, "getConsumer : Found Consumer with given ID");\r
234                     return it;\r
235                 }\r
236             }\r
237             NS_LOG(DEBUG, "getConsumer : Not Found Consumer with given ID");\r
238             return NULL;\r
239         }\r
240 \r
241         std::list<NSConsumer *> &NSProviderService::getAcceptedConsumers()\r
242         {\r
243             return m_acceptedConsumers;\r
244         }\r
245     }\r
246 }\r