Modify Callback function in cpp wrapper for Notification Service.
[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             if(response == NS_ALLOW)\r
51             {\r
52                 NSConsumerService::getInstance()->getAcceptedProviders().push_back(nsProvider);\r
53             }\r
54             else if(response == NS_DENY)\r
55             {\r
56                 NSConsumerService::getInstance()->getAcceptedProviders().remove(nsProvider);\r
57             }\r
58             if (NSConsumerService::getInstance()->getConsumerConfig().m_changedCb != NULL)\r
59                 NSConsumerService::getInstance()->getConsumerConfig().m_changedCb(\r
60                                                             nsProvider, (NSResponse) response);\r
61             NS_LOG(DEBUG, "onNSProviderChanged - OUT");\r
62         }\r
63 \r
64         void onNSMessageReceived(::NSMessage *message)\r
65         {\r
66             NS_LOG(DEBUG, "onNSMessageReceived - IN");\r
67             NSMessage *nsMessage = new NSMessage(message);\r
68             for (auto it : NSConsumerService::getInstance()->getAcceptedProviders())\r
69             {\r
70                 if (it->getProviderId() == nsMessage->getProviderId())\r
71                 {\r
72                     auto callback = it->getMessageReceivedCb();\r
73                     if (callback != NULL)\r
74                     {\r
75                         callback(nsMessage);\r
76                     }\r
77                     break;\r
78                 }\r
79             }\r
80             delete nsMessage;\r
81             NS_LOG(DEBUG, "onNSMessageReceived - OUT");\r
82         }\r
83 \r
84         void onNSSyncInfoReceived(::NSSyncInfo *syncInfo)\r
85         {\r
86             NS_LOG(DEBUG, "onNSSyncInfoReceived - IN");\r
87             NSSyncInfo *nsSyncInfo = new NSSyncInfo(syncInfo);\r
88             for (auto it : NSConsumerService::getInstance()->getAcceptedProviders())\r
89             {\r
90                 if (it->getProviderId() == nsSyncInfo->getProviderId())\r
91                 {\r
92                     auto callback = it->getSyncInfoReceivedCb();\r
93                     if (callback != NULL)\r
94                     {\r
95                         callback(nsSyncInfo);\r
96                     }\r
97                     break;\r
98                 }\r
99             }\r
100             delete nsSyncInfo;\r
101             NS_LOG(DEBUG, "onNSSyncInfoReceived - OUT");\r
102         }\r
103 \r
104         NSConsumerService::NSConsumerService()\r
105         {\r
106             m_config.m_discoverCb = NULL;\r
107             m_config.m_changedCb = NULL;\r
108         }\r
109 \r
110         NSConsumerService::~NSConsumerService()\r
111         {\r
112             for (auto it : getAcceptedProviders())\r
113             {\r
114                 delete it;\r
115             }\r
116             getAcceptedProviders().clear();\r
117         }\r
118         NSConsumerService *NSConsumerService::getInstance()\r
119         {\r
120             static  NSConsumerService s_instance;\r
121             return &s_instance;\r
122         }\r
123 \r
124         void NSConsumerService::Start(NSConsumerService::ConsumerConfig config)\r
125         {\r
126             NS_LOG(DEBUG, "Start - IN");\r
127             m_config = config;\r
128             NSConsumerConfig nsConfig;\r
129             nsConfig.discoverCb = onNSProviderDiscovered;\r
130             nsConfig.changedCb= onNSProviderChanged;\r
131             nsConfig.messageCb = onNSMessageReceived;\r
132             nsConfig.syncInfoCb = onNSSyncInfoReceived;\r
133 \r
134             NSStartConsumer(nsConfig);\r
135             NS_LOG(DEBUG, "Start - OUT");\r
136             return;\r
137         }\r
138 \r
139         void NSConsumerService::Stop()\r
140         {\r
141             NS_LOG(DEBUG, "Stop - IN");\r
142             NSStopConsumer();\r
143             NS_LOG(DEBUG, "Stop - OUT");\r
144             return;\r
145         }\r
146 \r
147         NSResult NSConsumerService::EnableRemoteService(const std::string &serverAddress)\r
148         {\r
149             NS_LOG(DEBUG, "EnableRemoteService - IN");\r
150             NSResult result = NSResult::ERROR;\r
151 #ifdef WITH_CLOUD\r
152             result = (NSResult) NSConsumerEnableRemoteService(OICStrdup(serverAddress.c_str()));\r
153 #else\r
154             NS_LOG(ERROR, "Remote Services feature is not enabled in the Build");\r
155 #endif\r
156             NS_LOG(DEBUG, "EnableRemoteService - OUT");\r
157             return result;\r
158         }\r
159 \r
160         void NSConsumerService::RescanProvider()\r
161         {\r
162             NS_LOG(DEBUG, "RescanProvider - IN");\r
163             NSRescanProvider();\r
164             NS_LOG(DEBUG, "RescanProvider - OUT");\r
165             return;\r
166         }\r
167 \r
168         NSProvider *NSConsumerService::getProvider(const std::string &id)\r
169         {\r
170             for (auto it : getAcceptedProviders())\r
171             {\r
172                 if (it->getProviderId() == id)\r
173                     return it;\r
174             }\r
175             return NULL;\r
176         }\r
177 \r
178         NSConsumerService::ConsumerConfig NSConsumerService::getConsumerConfig()\r
179         {\r
180             return m_config;\r
181         }\r
182 \r
183         std::list<NSProvider *> NSConsumerService::getAcceptedProviders()\r
184         {\r
185             return m_acceptedProviders;\r
186         }\r
187     }\r
188 }\r