Merge branch 'master' into notification-service
[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 "oic_string.h"\r
27 #include "NSConsumer.h"\r
28 #include "NSSyncInfo.h"\r
29 #include "NSConstants.h"\r
30 \r
31 namespace OIC\r
32 {\r
33     namespace Service\r
34     {\r
35         void onConsumerSubscribedCallback(::NSConsumer *consumer)\r
36         {\r
37             NS_LOG(DEBUG, "onConsumerSubscribedCallback - IN");\r
38             NSConsumer *nsConsumer = new NSConsumer(consumer);\r
39             if (NSProviderService::getInstance()->getProviderConfig().m_subscribeRequestCb != NULL)\r
40                 NSProviderService::getInstance()->getProviderConfig().m_subscribeRequestCb(nsConsumer);\r
41             delete nsConsumer;\r
42             NS_LOG(DEBUG, "onConsumerSubscribedCallback - OUT");\r
43         }\r
44 \r
45         void onMessageSynchronizedCallback(::NSSyncInfo *syncInfo)\r
46         {\r
47             NS_LOG(DEBUG, "onMessageSynchronizedCallback - IN");\r
48             NSSyncInfo *nsSyncInfo = new NSSyncInfo(syncInfo);\r
49             if (NSProviderService::getInstance()->getProviderConfig().m_syncInfoCb != NULL)\r
50                 NSProviderService::getInstance()->getProviderConfig().m_syncInfoCb(nsSyncInfo);\r
51             delete nsSyncInfo;\r
52             NS_LOG(DEBUG, "onMessageSynchronizedCallback - OUT");\r
53         }\r
54 \r
55         ::NSMessage *NSProviderService::getNSMessage(NSMessage *msg)\r
56         {\r
57             ::NSMessage *nsMsg = new ::NSMessage;\r
58             nsMsg->messageId = msg->getMessageId();\r
59             OICStrcpy(nsMsg->providerId, msg->getProviderId().length(), msg->getProviderId().c_str());\r
60             nsMsg->sourceName = OICStrdup(msg->getSourceName().c_str());\r
61             nsMsg->type = (::NSMessageType) msg->getType();\r
62             nsMsg->dateTime = OICStrdup(msg->getTime().c_str());\r
63             nsMsg->ttl = msg->getTTL();\r
64             nsMsg->title = OICStrdup(msg->getTitle().c_str());\r
65             nsMsg->contentText = OICStrdup(msg->getContentText().c_str());\r
66 \r
67             nsMsg->mediaContents = new ::NSMediaContents;\r
68             if (msg->getMediaContents() != nullptr)\r
69                 nsMsg->mediaContents->iconImage = OICStrdup(msg->getMediaContents()->getIconImage().c_str());\r
70             else\r
71                 nsMsg->mediaContents->iconImage = nullptr;\r
72             return nsMsg;\r
73         }\r
74 \r
75         NSProviderService *NSProviderService::getInstance()\r
76         {\r
77             static NSProviderService s_instance;\r
78             return &s_instance;\r
79         }\r
80 \r
81         NSResult NSProviderService::Start(NSProviderService::ProviderConfig config)\r
82         {\r
83             NS_LOG(DEBUG, "Start - IN");\r
84 \r
85             m_config = config;\r
86             NSProviderConfig nsConfig;\r
87             nsConfig.subRequestCallback = onConsumerSubscribedCallback;\r
88             nsConfig.syncInfoCallback = onMessageSynchronizedCallback;\r
89             nsConfig.policy = config.policy;\r
90             nsConfig.userInfo = OICStrdup(config.userInfo.c_str());\r
91 \r
92             NSResult result = (NSResult) NSStartProvider(nsConfig);\r
93             NS_LOG(DEBUG, "Start - OUT");\r
94             return result;\r
95         }\r
96 \r
97         NSResult NSProviderService::Stop()\r
98         {\r
99             NS_LOG(DEBUG, "Stop - IN");\r
100             NSResult result = (NSResult) NSStopProvider();\r
101             NS_LOG(DEBUG, "Stop - OUT");\r
102             return result;\r
103         }\r
104 \r
105         NSResult NSProviderService::EnableRemoteService(const std::string &serverAddress)\r
106         {\r
107             NS_LOG(DEBUG, "EnableRemoteService - IN");\r
108             NSResult result = NSResult::ERROR;\r
109 #ifdef WITH_CLOUD\r
110             result = (NSResult) NSProviderEnableRemoteService(OICStrdup(serverAddress.c_str()));\r
111 #else\r
112             NS_LOG(ERROR, "Remote Services feature is not enabled in the Build");\r
113 #endif\r
114             NS_LOG(DEBUG, "EnableRemoteService - OUT");\r
115             return result;\r
116         }\r
117 \r
118         NSResult NSProviderService::DisableRemoteService(const std::string &serverAddress)\r
119         {\r
120             NS_LOG(DEBUG, "DisableRemoteService - IN");\r
121             NSResult result = NSResult::ERROR;\r
122 #ifdef WITH_CLOUD\r
123             result = (NSResult) NSProviderDisableRemoteService(OICStrdup(serverAddress.c_str()));\r
124 #else\r
125             NS_LOG(ERROR, "Remote Services feature is not enabled in the Build");\r
126 #endif\r
127             NS_LOG(DEBUG, "DisableRemoteService - OUT");\r
128             return result;\r
129         }\r
130 \r
131         NSResult NSProviderService::SendMessage(NSMessage *msg)\r
132         {\r
133             NS_LOG(DEBUG, "SendMessage - IN");\r
134             NSResult result = NSResult::ERROR;\r
135             if (msg != nullptr)\r
136             {\r
137                 ::NSMessage * nsMsg = getNSMessage(msg);\r
138                 result = (NSResult) NSSendMessage(nsMsg);\r
139                 delete nsMsg->mediaContents;\r
140                 delete nsMsg;\r
141             }\r
142             else\r
143                 NS_LOG(DEBUG, "Empty Message");\r
144             NS_LOG(DEBUG, "SendMessage - OUT");\r
145             return result;\r
146         }\r
147 \r
148         void NSProviderService::SendSyncInfo(uint64_t messageId,\r
149                                              NSSyncInfo::NSSyncType type)\r
150         {\r
151             NS_LOG(DEBUG, "SendSyncInfo - IN");\r
152             NSProviderSendSyncInfo(messageId, (NSSyncType)type);\r
153             NS_LOG(DEBUG, "SendSyncInfo - OUT");\r
154             return;\r
155         }\r
156 \r
157         NSMessage *NSProviderService::CreateMessage()\r
158         {\r
159             NS_LOG(DEBUG, "CreateMessage - IN");\r
160 \r
161             ::NSMessage *message = NSCreateMessage();\r
162             NSMessage *nsMessage = new NSMessage(message);\r
163 \r
164             NS_LOG_V(DEBUG, "Message ID : %lld", nsMessage->getMessageId());\r
165             NS_LOG_V(DEBUG, "Provider ID : %s", nsMessage->getProviderId().c_str());\r
166             NS_LOG(DEBUG, "CreateMessage - OUT");\r
167 \r
168             return nsMessage;\r
169         }\r
170 \r
171         NSProviderService::ProviderConfig NSProviderService::getProviderConfig()\r
172         {\r
173             return m_config;\r
174         }\r
175     }\r
176 }\r