1 //******************************************************************
3 // Copyright 2014 Intel Mobile Communications GmbH All Rights Reserved.
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7 // Licensed under the Apache License, Version 2.0 (the "License");
8 // you may not use this file except in compliance with the License.
9 // You may obtain a copy of the License at
11 // http://www.apache.org/licenses/LICENSE-2.0
13 // Unless required by applicable law or agreed to in writing, software
14 // distributed under the License is distributed on an "AS IS" BASIS,
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 // See the License for the specific language governing permissions and
17 // limitations under the License.
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
21 #ifndef OC_IN_PROC_CLIENT_WRAPPER_H_
22 #define OC_IN_PROC_CLIENT_WRAPPER_H_
30 #include <IClientWrapper.h>
31 #include <InitializeException.h>
32 #include <ResourceInitException.h>
33 #ifdef WITH_PROCESS_EVENT
39 namespace ClientCallbackContext
44 GetContext(GetCallback cb) : callback(cb){}
50 SetContext(PutCallback cb) : callback(cb){}
55 FindCallback callback;
56 std::weak_ptr<IClientWrapper> clientWrapper;
58 ListenContext(FindCallback cb, std::weak_ptr<IClientWrapper> cw)
59 : callback(cb), clientWrapper(cw){}
62 struct ListenErrorContext
64 FindCallback callback;
65 FindErrorCallback errorCallback;
66 std::weak_ptr<IClientWrapper> clientWrapper;
68 ListenErrorContext(FindCallback cb1, FindErrorCallback cb2,
69 std::weak_ptr<IClientWrapper> cw)
70 : callback(cb1), errorCallback(cb2), clientWrapper(cw){}
73 struct ListenResListContext
75 FindResListCallback callback;
76 std::weak_ptr<IClientWrapper> clientWrapper;
78 ListenResListContext(FindResListCallback cb, std::weak_ptr<IClientWrapper> cw)
79 : callback(cb), clientWrapper(cw){}
82 struct ListenResListWithErrorContext
84 FindResListCallback callback;
85 FindErrorCallback errorCallback;
86 std::weak_ptr<IClientWrapper> clientWrapper;
88 ListenResListWithErrorContext(FindResListCallback cb1, FindErrorCallback cb2,
89 std::weak_ptr<IClientWrapper> cw)
90 : callback(cb1), errorCallback(cb2), clientWrapper(cw){}
93 struct DeviceListenContext
95 FindDeviceCallback callback;
96 IClientWrapper::Ptr clientWrapper;
97 DeviceListenContext(FindDeviceCallback cb, IClientWrapper::Ptr cw)
98 : callback(cb), clientWrapper(cw){}
101 struct SubscribePresenceContext
103 SubscribeCallback callback;
104 SubscribePresenceContext(SubscribeCallback cb) : callback(cb){}
109 DeleteCallback callback;
110 DeleteContext(DeleteCallback cb) : callback(cb){}
113 struct ObserveContext
115 ObserveCallback callback;
116 ObserveContext(ObserveCallback cb) : callback(cb){}
119 struct DirectPairingContext
121 DirectPairingCallback callback;
122 DirectPairingContext(DirectPairingCallback cb) : callback(cb){}
126 struct KeepAliveContext
128 KeepAliveCallback callback;
129 KeepAliveContext(KeepAliveCallback cb) : callback(cb){}
134 struct MQTopicContext
136 MQTopicCallback callback;
137 std::weak_ptr<IClientWrapper> clientWrapper;
138 MQTopicContext(MQTopicCallback cb, std::weak_ptr<IClientWrapper> cw)
139 : callback(cb), clientWrapper(cw){}
144 class InProcClientWrapper : public IClientWrapper
149 InProcClientWrapper(std::weak_ptr<std::recursive_mutex> csdkLock,
151 virtual ~InProcClientWrapper();
153 virtual OCStackResult ListenForResource(const std::string& serviceUrl,
154 const std::string& resourceType, OCConnectivityType transportFlags,
155 FindCallback& callback, QualityOfService QoS);
157 virtual OCStackResult ListenForResourceList(const std::string& serviceUrl,
158 const std::string& resourceType, OCConnectivityType transportFlags,
159 FindResListCallback& callback, QualityOfService QoS);
161 virtual OCStackResult ListenForResourceListWithError(const std::string& serviceUrl,
162 const std::string& resourceType, OCConnectivityType connectivityType,
163 FindResListCallback& callback, FindErrorCallback& errorCallback,
164 QualityOfService QoS);
166 virtual OCStackResult ListenErrorForResource(const std::string& serviceUrl,
167 const std::string& resourceType, OCConnectivityType transportFlags,
168 FindCallback& callback, FindErrorCallback& errorCallback, QualityOfService QoS);
170 virtual OCStackResult ListenForDevice(const std::string& serviceUrl,
171 const std::string& deviceURI, OCConnectivityType transportFlags,
172 FindDeviceCallback& callback, QualityOfService QoS);
174 virtual OCStackResult GetResourceRepresentation(
175 const OCDevAddr& devAddr,
176 const std::string& uri,
177 const QueryParamsMap& queryParams, const HeaderOptions& headerOptions,
178 OCConnectivityType connectivityType,
179 GetCallback& callback, QualityOfService QoS);
181 virtual OCStackResult PutResourceRepresentation(
182 const OCDevAddr& devAddr,
183 const std::string& uri,
184 const OCRepresentation& attributes, const QueryParamsMap& queryParams,
185 const HeaderOptions& headerOptions, PutCallback& callback, QualityOfService QoS);
187 virtual OCStackResult PostResourceRepresentation(
188 const OCDevAddr& devAddr,
189 const std::string& uri,
190 const OCRepresentation& attributes, const QueryParamsMap& queryParams,
191 const HeaderOptions& headerOptions, OCConnectivityType connectivityType,
192 PostCallback& callback, QualityOfService QoS);
194 virtual OCStackResult DeleteResource(
195 const OCDevAddr& devAddr,
196 const std::string& uri,
197 const HeaderOptions& headerOptions,
198 OCConnectivityType connectivityType,
199 DeleteCallback& callback, QualityOfService QoS);
201 virtual OCStackResult ObserveResource(
202 ObserveType observeType, OCDoHandle* handle,
203 const OCDevAddr& devAddr,
204 const std::string& uri,
205 const QueryParamsMap& queryParams, const HeaderOptions& headerOptions,
206 ObserveCallback& callback, QualityOfService QoS);
208 virtual OCStackResult CancelObserveResource(
210 const std::string& host,
211 const std::string& uri,
212 const HeaderOptions& headerOptions, QualityOfService QoS);
214 virtual OCStackResult SubscribePresence(
216 const std::string& host,
217 const std::string& resourceType,
218 OCConnectivityType transportFlags,
219 SubscribeCallback& presenceHandler);
221 virtual OCStackResult UnsubscribePresence(OCDoHandle handle);
224 virtual OCStackResult SubscribeDevicePresence(OCDoHandle* handle,
225 const std::string& host,
226 const std::vector<std::string>& di,
227 OCConnectivityType connectivityType,
228 ObserveCallback& callback);
231 OCStackResult GetDefaultQos(QualityOfService& QoS);
233 virtual OCStackResult FindDirectPairingDevices(unsigned short waittime,
234 GetDirectPairedCallback& callback);
236 virtual OCStackResult GetDirectPairedDevices(GetDirectPairedCallback& callback);
238 virtual OCStackResult DoDirectPairing(std::shared_ptr<OCDirectPairing> peer, const OCPrm_t& pmSel,
239 const std::string& pinNumber, DirectPairingCallback& resultCallback);
242 virtual OCStackResult ListenForMQTopic(
243 const OCDevAddr& devAddr,
244 const std::string& resourceUri,
245 const QueryParamsMap& queryParams, const HeaderOptions& headerOptions,
246 MQTopicCallback& callback, QualityOfService QoS);
248 virtual OCStackResult PutMQTopicRepresentation(
249 const OCDevAddr& devAddr,
250 const std::string& uri,
251 const OCRepresentation& rep,
252 const QueryParamsMap& queryParams, const HeaderOptions& headerOptions,
253 MQTopicCallback& callback, QualityOfService QoS);
256 virtual OCStackResult stop();
257 virtual OCStackResult start();
260 virtual OCStackResult findKeepAliveResource(std::string host,
261 KeepAliveCallback resultCallback);
262 virtual OCStackResult sendKeepAliveRequest(std::string host, const OCRepresentation& rep,
263 KeepAliveCallback resultCallback);
267 void listeningFunc();
268 std::string assembleSetResourceUri(std::string uri, const QueryParamsMap& queryParams);
269 std::string assembleSetResourceUri(std::string uri, const QueryParamsList& queryParams);
270 OCPayload* assembleSetResourcePayload(const OCRepresentation& attributes);
271 OCHeaderOption* assembleHeaderOptions(const HeaderOptions& headerOptions);
272 void convert(const OCDPDev_t *list, PairedDevices& dpList);
273 std::thread m_listeningThread;
275 std::weak_ptr<std::recursive_mutex> m_csdkLock;
278 PlatformConfig m_cfg;
279 #ifdef WITH_PROCESS_EVENT
280 oc_event m_processEvent;