Updated JAVA and JNI API's for Topic Resource
[platform/upstream/iotivity.git] / service / notification / cpp-wrapper / consumer / src / NSConsumerService.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 "NSConsumerService.h"\r
22 #include <cstring>\r
23 #include "NSConsumerInterface.h"\r
24 #include "NSMessage.h"\r
25 #include "NSCommon.h"\r
26 #include "NSConstants.h"\r
27 #include "oic_string.h"\r
28 \r
29 namespace OIC\r
30 {\r
31     namespace Service\r
32     {\r
33         void onNSProviderDiscovered(::NSProvider *provider)\r
34         {\r
35             NS_LOG(DEBUG, "onNSProviderDiscovered - IN");\r
36             NSProvider *nsProvider = new NSProvider(provider);\r
37             if (NSConsumerService::getInstance()->getConsumerConfig().m_discoverCb != NULL)\r
38                 NSConsumerService::getInstance()->getConsumerConfig().m_discoverCb(nsProvider);\r
39             delete nsProvider;\r
40             NS_LOG(DEBUG, "onNSProviderDiscovered - OUT");\r
41         }\r
42 \r
43         void onNSProviderChanged(::NSProvider *provider, ::NSResponse response)\r
44         {\r
45             NS_LOG(DEBUG, "onNSProviderChanged - IN");\r
46             NS_LOG_V(DEBUG, "provider Id : %s", provider->providerId);\r
47             NS_LOG_V(DEBUG, "response : %d", (int)response);\r
48 \r
49             NSProvider *nsProvider = new NSProvider(provider);\r
50             auto changeCallback = NSConsumerService::getInstance()->getConsumerConfig().m_changedCb;\r
51             if (response == NS_ALLOW)\r
52             {\r
53                 NSConsumerService::getInstance()->getAcceptedProviders().push_back(nsProvider);\r
54                 if (changeCallback != NULL)\r
55                     changeCallback(nsProvider, (NSResponse) response);\r
56             }\r
57             else if (response == NS_DENY)\r
58             {\r
59                 NSConsumerService::getInstance()->getAcceptedProviders().remove(nsProvider);\r
60                 if (changeCallback != NULL)\r
61                     changeCallback(nsProvider, (NSResponse) response);\r
62                 delete nsProvider;\r
63             }\r
64             else if (response == NS_TOPIC)\r
65             {\r
66                 NSProvider *oldProvider = NSConsumerService::getInstance()->getProvider(\r
67                                               nsProvider->getProviderId());\r
68                 if (oldProvider != nullptr)\r
69                 {\r
70                     NSConsumerService::getInstance()->getAcceptedProviders().remove(oldProvider);\r
71                     NSConsumerService::getInstance()->getAcceptedProviders().push_back(nsProvider);\r
72                     delete oldProvider;\r
73                 }\r
74             }\r
75             NS_LOG(DEBUG, "onNSProviderChanged - OUT");\r
76         }\r
77 \r
78         void onNSMessageReceived(::NSMessage *message)\r
79         {\r
80             NS_LOG(DEBUG, "onNSMessageReceived - IN");\r
81             NSMessage *nsMessage = new NSMessage(message);\r
82             for (auto it : NSConsumerService::getInstance()->getAcceptedProviders())\r
83             {\r
84                 if (it->getProviderId() == nsMessage->getProviderId())\r
85                 {\r
86                     auto callback = it->getMessageReceivedCb();\r
87                     if (callback != NULL)\r
88                     {\r
89                         callback(nsMessage);\r
90                     }\r
91                     break;\r
92                 }\r
93             }\r
94             delete nsMessage;\r
95             NS_LOG(DEBUG, "onNSMessageReceived - OUT");\r
96         }\r
97 \r
98         void onNSSyncInfoReceived(::NSSyncInfo *syncInfo)\r
99         {\r
100             NS_LOG(DEBUG, "onNSSyncInfoReceived - IN");\r
101             NSSyncInfo *nsSyncInfo = new NSSyncInfo(syncInfo);\r
102             for (auto it : NSConsumerService::getInstance()->getAcceptedProviders())\r
103             {\r
104                 if (it->getProviderId() == nsSyncInfo->getProviderId())\r
105                 {\r
106                     auto callback = it->getSyncInfoReceivedCb();\r
107                     if (callback != NULL)\r
108                     {\r
109                         callback(nsSyncInfo);\r
110                     }\r
111                     break;\r
112                 }\r
113             }\r
114             delete nsSyncInfo;\r
115             NS_LOG(DEBUG, "onNSSyncInfoReceived - OUT");\r
116         }\r
117 \r
118         NSConsumerService::NSConsumerService()\r
119         {\r
120             m_config.m_discoverCb = NULL;\r
121             m_config.m_changedCb = NULL;\r
122         }\r
123 \r
124         NSConsumerService::~NSConsumerService()\r
125         {\r
126             for (auto it : getAcceptedProviders())\r
127             {\r
128                 delete it;\r
129             }\r
130             getAcceptedProviders().clear();\r
131         }\r
132         NSConsumerService *NSConsumerService::getInstance()\r
133         {\r
134             static  NSConsumerService s_instance;\r
135             return &s_instance;\r
136         }\r
137 \r
138         void NSConsumerService::Start(NSConsumerService::ConsumerConfig config)\r
139         {\r
140             NS_LOG(DEBUG, "Start - IN");\r
141             m_config = config;\r
142             NSConsumerConfig nsConfig;\r
143             nsConfig.discoverCb = onNSProviderDiscovered;\r
144             nsConfig.changedCb = onNSProviderChanged;\r
145             nsConfig.messageCb = onNSMessageReceived;\r
146             nsConfig.syncInfoCb = onNSSyncInfoReceived;\r
147 \r
148             NSStartConsumer(nsConfig);\r
149             NS_LOG(DEBUG, "Start - OUT");\r
150             return;\r
151         }\r
152 \r
153         void NSConsumerService::Stop()\r
154         {\r
155             NS_LOG(DEBUG, "Stop - IN");\r
156             NSStopConsumer();\r
157             NS_LOG(DEBUG, "Stop - OUT");\r
158             return;\r
159         }\r
160 \r
161         NSResult NSConsumerService::EnableRemoteService(const std::string &serverAddress)\r
162         {\r
163             NS_LOG(DEBUG, "EnableRemoteService - IN");\r
164             NSResult result = NSResult::ERROR;\r
165 #ifdef WITH_CLOUD\r
166             result = (NSResult) NSConsumerEnableRemoteService(OICStrdup(serverAddress.c_str()));\r
167 #else\r
168             NS_LOG(ERROR, "Remote Services feature is not enabled in the Build");\r
169 #endif\r
170             NS_LOG(DEBUG, "EnableRemoteService - OUT");\r
171             return result;\r
172         }\r
173 \r
174         void NSConsumerService::RescanProvider()\r
175         {\r
176             NS_LOG(DEBUG, "RescanProvider - IN");\r
177             NSRescanProvider();\r
178             NS_LOG(DEBUG, "RescanProvider - OUT");\r
179             return;\r
180         }\r
181 \r
182         NSProvider *NSConsumerService::getProvider(const std::string &id)\r
183         {\r
184             for (auto it : getAcceptedProviders())\r
185             {\r
186                 if (it->getProviderId() == id)\r
187                     return it;\r
188             }\r
189             return NULL;\r
190         }\r
191 \r
192         NSMessage *NSConsumerService::getMessage(uint64_t messageId)\r
193         {\r
194             NS_LOG(DEBUG, "getMessage - IN");\r
195             ::NSMessage *message = NSConsumerGetMessage(messageId);\r
196             NSMessage *nsMessage = new NSMessage(message);\r
197 \r
198             delete message->mediaContents;\r
199             delete message;\r
200             NS_LOG(DEBUG, "getMessage - OUT");\r
201             return nsMessage;\r
202         }\r
203 \r
204         NSConsumerService::ConsumerConfig NSConsumerService::getConsumerConfig()\r
205         {\r
206             return m_config;\r
207         }\r
208 \r
209         std::list<NSProvider *> NSConsumerService::getAcceptedProviders()\r
210         {\r
211             return m_acceptedProviders;\r
212         }\r
213     }\r
214 }\r