1 //******************************************************************
\r
3 // Copyright 2016 Samsung Electronics All Rights Reserved.
\r
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
\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
11 // http://www.apache.org/licenses/LICENSE-2.0
\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
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
\r
21 #include "NSConsumerService.h"
\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
33 void onNSProviderDiscovered(::NSProvider *provider)
\r
35 NS_LOG(DEBUG, "onNSProviderDiscovered - IN");
\r
36 NSProvider *nsProvider = new NSProvider(provider);
\r
37 if (NSConsumerService::getInstance()->getConsumerConfig().m_discoverCb != NULL)
\r
39 NS_LOG(DEBUG, "initiating the callback");
\r
40 NSConsumerService::getInstance()->getConsumerConfig().m_discoverCb(nsProvider);
\r
43 NS_LOG(DEBUG, "onNSProviderDiscovered - OUT");
\r
46 void onNSProviderChanged(::NSProvider *provider, ::NSResponse response)
\r
48 NS_LOG(DEBUG, "onNSProviderChanged - IN");
\r
49 NS_LOG_V(DEBUG, "provider Id : %s", provider->providerId);
\r
50 NS_LOG_V(DEBUG, "response : %d", (int)response);
\r
52 NSProvider *nsProvider = new NSProvider(provider);
\r
53 auto changeCallback = NSConsumerService::getInstance()->getConsumerConfig().m_changedCb;
\r
54 if (response == NS_ALLOW)
\r
56 NSConsumerService::getInstance()->getAcceptedProviders().push_back(nsProvider);
\r
57 if (changeCallback != NULL)
\r
59 NS_LOG(DEBUG, "initiating the callback for Response : ALLOW");
\r
60 changeCallback(nsProvider, (NSResponse) response);
\r
63 else if (response == NS_DENY)
\r
65 NSConsumerService::getInstance()->getAcceptedProviders().remove(nsProvider);
\r
66 if (changeCallback != NULL)
\r
68 NS_LOG(DEBUG, "initiating the callback for Response : NS_DENY");
\r
69 changeCallback(nsProvider, (NSResponse) response);
\r
73 else if (response == NS_TOPIC)
\r
75 NSProvider *oldProvider = NSConsumerService::getInstance()->getProvider(
\r
76 nsProvider->getProviderId());
\r
77 if (oldProvider != nullptr)
\r
79 NS_LOG(DEBUG, "Provider with same Id exists. updating the Topics data");
\r
80 nsProvider->setListener(oldProvider->getMessageReceivedCb(), oldProvider->getSyncInfoReceivedCb());
\r
81 NSConsumerService::getInstance()->getAcceptedProviders().remove(oldProvider);
\r
82 NSConsumerService::getInstance()->getAcceptedProviders().push_back(nsProvider);
\r
83 if (changeCallback != NULL)
\r
85 NS_LOG(DEBUG, "initiating the callback for Response : NS_TOPIC");
\r
86 changeCallback(nsProvider, (NSResponse) response);
\r
91 NS_LOG(DEBUG, "onNSProviderChanged - OUT");
\r
94 void onNSMessageReceived(::NSMessage *message)
\r
96 NS_LOG(DEBUG, "onNSMessageReceived - IN");
\r
97 NSMessage *nsMessage = new NSMessage(message);
\r
98 for (auto it : NSConsumerService::getInstance()->getAcceptedProviders())
\r
100 if (it->getProviderId() == nsMessage->getProviderId())
\r
102 NS_LOG(DEBUG, "Found Provider with given ID");
\r
103 auto callback = it->getMessageReceivedCb();
\r
104 if (callback != NULL)
\r
106 NS_LOG(DEBUG, "initiating the callback for messageReceived");
\r
107 callback(nsMessage);
\r
113 NS_LOG(DEBUG, "onNSMessageReceived - OUT");
\r
116 void onNSSyncInfoReceived(::NSSyncInfo *syncInfo)
\r
118 NS_LOG(DEBUG, "onNSSyncInfoReceived - IN");
\r
119 NSSyncInfo *nsSyncInfo = new NSSyncInfo(syncInfo);
\r
120 for (auto it : NSConsumerService::getInstance()->getAcceptedProviders())
\r
122 if (it->getProviderId() == nsSyncInfo->getProviderId())
\r
124 NS_LOG(DEBUG, "Found Provider with given ID");
\r
125 auto callback = it->getSyncInfoReceivedCb();
\r
126 if (callback != NULL)
\r
128 NS_LOG(DEBUG, "initiating the callback for SyncInfoReceived");
\r
129 callback(nsSyncInfo);
\r
135 NS_LOG(DEBUG, "onNSSyncInfoReceived - OUT");
\r
138 NSConsumerService::NSConsumerService()
\r
140 m_config.m_discoverCb = NULL;
\r
141 m_config.m_changedCb = NULL;
\r
144 NSConsumerService::~NSConsumerService()
\r
146 for (auto it : getAcceptedProviders())
\r
150 getAcceptedProviders().clear();
\r
152 NSConsumerService *NSConsumerService::getInstance()
\r
154 static NSConsumerService s_instance;
\r
155 return &s_instance;
\r
158 void NSConsumerService::Start(NSConsumerService::ConsumerConfig config)
\r
160 NS_LOG(DEBUG, "Start - IN");
\r
162 NSConsumerConfig nsConfig;
\r
163 nsConfig.discoverCb = onNSProviderDiscovered;
\r
164 nsConfig.changedCb = onNSProviderChanged;
\r
165 nsConfig.messageCb = onNSMessageReceived;
\r
166 nsConfig.syncInfoCb = onNSSyncInfoReceived;
\r
168 NSStartConsumer(nsConfig);
\r
169 NS_LOG(DEBUG, "Start - OUT");
\r
173 void NSConsumerService::Stop()
\r
175 NS_LOG(DEBUG, "Stop - IN");
\r
177 NS_LOG(DEBUG, "Stop - OUT");
\r
181 NSResult NSConsumerService::EnableRemoteService(const std::string &serverAddress)
\r
183 NS_LOG(DEBUG, "EnableRemoteService - IN");
\r
184 NSResult result = NSResult::ERROR;
\r
186 result = (NSResult) NSConsumerEnableRemoteService(OICStrdup(serverAddress.c_str()));
\r
188 NS_LOG(ERROR, "Remote Services feature is not enabled in the Build");
\r
190 NS_LOG(DEBUG, "EnableRemoteService - OUT");
\r
194 void NSConsumerService::RescanProvider()
\r
196 NS_LOG(DEBUG, "RescanProvider - IN");
\r
197 NSRescanProvider();
\r
198 NS_LOG(DEBUG, "RescanProvider - OUT");
\r
202 NSProvider *NSConsumerService::getProvider(const std::string &id)
\r
204 for (auto it : getAcceptedProviders())
\r
206 if (it->getProviderId() == id)
\r
208 NS_LOG(DEBUG, "getProvider : Found Provider with given ID");
\r
212 NS_LOG(DEBUG, "getProvider : Not Found Provider with given ID");
\r
216 NSMessage *NSConsumerService::getMessage(uint64_t messageId)
\r
218 NS_LOG(DEBUG, "getMessage - IN");
\r
219 ::NSMessage *message = NSConsumerGetMessage(messageId);
\r
220 NSMessage *nsMessage = new NSMessage(message);
\r
222 delete message->mediaContents;
\r
224 NS_LOG(DEBUG, "getMessage - OUT");
\r
228 NSConsumerService::ConsumerConfig NSConsumerService::getConsumerConfig()
\r
233 std::list<NSProvider *>& NSConsumerService::getAcceptedProviders()
\r
235 return m_acceptedProviders;
\r