bbf6a38c83b153957b3a3f2e984574792171ff78
[platform/upstream/iotivity.git] / resource / include / InProcClientWrapper.h
1 //******************************************************************
2 //
3 // Copyright 2014 Intel Mobile Communications GmbH All Rights Reserved.
4 //
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6 //
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
10 //
11 //      http://www.apache.org/licenses/LICENSE-2.0
12 //
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.
18 //
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
20
21 #ifndef OC_IN_PROC_CLIENT_WRAPPER_H_
22 #define OC_IN_PROC_CLIENT_WRAPPER_H_
23
24 #include <thread>
25 #include <mutex>
26 #include <sstream>
27 #include <iostream>
28
29 #include <OCApi.h>
30 #include <IClientWrapper.h>
31 #include <InitializeException.h>
32 #include <ResourceInitException.h>
33
34 namespace OC
35 {
36     namespace ClientCallbackContext
37     {
38         struct GetContext
39         {
40             GetCallback callback;
41             GetContext(GetCallback cb) : callback(cb){}
42         };
43
44         struct SetContext
45         {
46             PutCallback callback;
47             SetContext(PutCallback cb) : callback(cb){}
48         };
49
50         struct ListenContext
51         {
52             FindCallback callback;
53             std::weak_ptr<IClientWrapper> clientWrapper;
54
55             ListenContext(FindCallback cb, std::weak_ptr<IClientWrapper> cw)
56                 : callback(cb), clientWrapper(cw){}
57         };
58
59         struct ListenContext2
60         {
61             FindResListCallback callback;
62             std::weak_ptr<IClientWrapper> clientWrapper;
63
64             ListenContext2(FindResListCallback cb, std::weak_ptr<IClientWrapper> cw)
65                 : callback(cb), clientWrapper(cw){}
66         };
67
68         struct ListenErrorContext
69         {
70             FindCallback callback;
71             FindErrorCallback errorCallback;
72             std::weak_ptr<IClientWrapper> clientWrapper;
73
74             ListenErrorContext(FindCallback cb1, FindErrorCallback cb2,
75                                std::weak_ptr<IClientWrapper> cw)
76                 : callback(cb1), errorCallback(cb2), clientWrapper(cw){}
77         };
78
79         struct DeviceListenContext
80         {
81             FindDeviceCallback callback;
82             IClientWrapper::Ptr clientWrapper;
83             DeviceListenContext(FindDeviceCallback cb, IClientWrapper::Ptr cw)
84                     : callback(cb), clientWrapper(cw){}
85         };
86
87         struct SubscribePresenceContext
88         {
89             SubscribeCallback callback;
90             SubscribePresenceContext(SubscribeCallback cb) : callback(cb){}
91         };
92
93         struct DeleteContext
94         {
95             DeleteCallback callback;
96             DeleteContext(DeleteCallback cb) : callback(cb){}
97         };
98
99         struct ObserveContext
100         {
101             ObserveCallback callback;
102             ObserveContext(ObserveCallback cb) : callback(cb){}
103         };
104
105         struct DirectPairingContext
106         {
107             DirectPairingCallback callback;
108             DirectPairingContext(DirectPairingCallback cb) : callback(cb){}
109
110         };
111
112 #ifdef WITH_MQ
113         struct MQTopicContext
114         {
115             MQTopicCallback callback;
116             std::weak_ptr<IClientWrapper> clientWrapper;
117             MQTopicContext(MQTopicCallback cb, std::weak_ptr<IClientWrapper> cw)
118                 : callback(cb), clientWrapper(cw){}
119         };
120 #endif
121     }
122
123     class InProcClientWrapper : public IClientWrapper
124     {
125
126     public:
127
128         InProcClientWrapper(std::weak_ptr<std::recursive_mutex> csdkLock,
129                             PlatformConfig cfg);
130         virtual ~InProcClientWrapper();
131
132         virtual OCStackResult ListenForResource(const std::string& serviceUrl,
133             const std::string& resourceType, OCConnectivityType transportFlags,
134             FindCallback& callback, QualityOfService QoS);
135
136         virtual OCStackResult ListenForResource2(const std::string& serviceUrl,
137             const std::string& resourceType, OCConnectivityType transportFlags,
138             FindResListCallback& callback, QualityOfService QoS);
139
140         virtual OCStackResult ListenErrorForResource(const std::string& serviceUrl,
141             const std::string& resourceType, OCConnectivityType transportFlags,
142             FindCallback& callback, FindErrorCallback& errorCallback, QualityOfService QoS);
143
144         virtual OCStackResult ListenForDevice(const std::string& serviceUrl,
145             const std::string& deviceURI, OCConnectivityType transportFlags,
146             FindDeviceCallback& callback, QualityOfService QoS);
147
148         virtual OCStackResult GetResourceRepresentation(
149             const OCDevAddr& devAddr,
150             const std::string& uri,
151             const QueryParamsMap& queryParams, const HeaderOptions& headerOptions,
152             OCConnectivityType connectivityType,
153             GetCallback& callback, QualityOfService QoS);
154
155         virtual OCStackResult PutResourceRepresentation(
156             const OCDevAddr& devAddr,
157             const std::string& uri,
158             const OCRepresentation& attributes, const QueryParamsMap& queryParams,
159             const HeaderOptions& headerOptions, PutCallback& callback, QualityOfService QoS);
160
161         virtual OCStackResult PostResourceRepresentation(
162             const OCDevAddr& devAddr,
163             const std::string& uri,
164             const OCRepresentation& attributes, const QueryParamsMap& queryParams,
165             const HeaderOptions& headerOptions, OCConnectivityType connectivityType,
166             PostCallback& callback, QualityOfService QoS);
167
168         virtual OCStackResult DeleteResource(
169             const OCDevAddr& devAddr,
170             const std::string& uri,
171             const HeaderOptions& headerOptions,
172             OCConnectivityType connectivityType,
173             DeleteCallback& callback, QualityOfService QoS);
174
175         virtual OCStackResult ObserveResource(
176             ObserveType observeType, OCDoHandle* handle,
177             const OCDevAddr& devAddr,
178             const std::string& uri,
179             const QueryParamsMap& queryParams, const HeaderOptions& headerOptions,
180             ObserveCallback& callback, QualityOfService QoS);
181
182         virtual OCStackResult CancelObserveResource(
183             OCDoHandle handle,
184             const std::string& host,
185             const std::string& uri,
186             const HeaderOptions& headerOptions, QualityOfService QoS);
187
188         virtual OCStackResult SubscribePresence(
189             OCDoHandle *handle,
190             const std::string& host,
191             const std::string& resourceType,
192             OCConnectivityType transportFlags,
193             SubscribeCallback& presenceHandler);
194
195         virtual OCStackResult UnsubscribePresence(OCDoHandle handle);
196
197 #ifdef WITH_CLOUD
198         virtual OCStackResult SubscribeDevicePresence(OCDoHandle* handle,
199                                                       const std::string& host,
200                                                       const std::vector<std::string>& di,
201                                                       OCConnectivityType connectivityType,
202                                                       ObserveCallback& callback);
203 #endif
204
205         OCStackResult GetDefaultQos(QualityOfService& QoS);
206
207         virtual OCStackResult FindDirectPairingDevices(unsigned short waittime,
208                        GetDirectPairedCallback& callback);
209
210         virtual OCStackResult GetDirectPairedDevices(GetDirectPairedCallback& callback);
211
212         virtual OCStackResult DoDirectPairing(std::shared_ptr<OCDirectPairing> peer, const OCPrm_t& pmSel,
213                 const std::string& pinNumber, DirectPairingCallback& resultCallback);
214
215 #ifdef WITH_MQ
216         virtual OCStackResult ListenForMQTopic(
217             const OCDevAddr& devAddr,
218             const std::string& resourceUri,
219             const QueryParamsMap& queryParams, const HeaderOptions& headerOptions,
220             MQTopicCallback& callback, QualityOfService QoS);
221
222         virtual OCStackResult PutMQTopicRepresentation(
223             const OCDevAddr& devAddr,
224             const std::string& uri,
225             const OCRepresentation& rep,
226             const QueryParamsMap& queryParams, const HeaderOptions& headerOptions,
227             MQTopicCallback& callback, QualityOfService QoS);
228 #endif
229
230     private:
231         void listeningFunc();
232         std::string assembleSetResourceUri(std::string uri, const QueryParamsMap& queryParams);
233         std::string assembleSetResourceUri(std::string uri, const QueryParamsList& queryParams);
234         OCPayload* assembleSetResourcePayload(const OCRepresentation& attributes);
235         OCHeaderOption* assembleHeaderOptions(OCHeaderOption options[],
236            const HeaderOptions& headerOptions);
237         void convert(const OCDPDev_t *list, PairedDevices& dpList);
238         std::thread m_listeningThread;
239         bool m_threadRun;
240         std::weak_ptr<std::recursive_mutex> m_csdkLock;
241
242     private:
243         PlatformConfig  m_cfg;
244     };
245 }
246
247 #endif
248