replace : iotivity -> iotivity-sec
[platform/upstream/iotivity.git] / service / easy-setup / enrollee / src / easysetup.c
1 //******************************************************************
2 //
3 // Copyright 2015 Samsung Electronics 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 /**
22  * @file
23  *
24  * This file contains the implementation for EasySetup Enrollee device
25  */
26
27 #include "easysetup.h"
28 #include "logger.h"
29 #include "resourcehandler.h"
30 #include "oic_string.h"
31
32 /**
33  * @var ES_ENROLLEE_TAG
34  * @brief Logging tag for module name.
35  */
36 #define ES_ENROLLEE_TAG "ES"
37
38 //-----------------------------------------------------------------------------
39 // Private variables
40 //-----------------------------------------------------------------------------
41
42 static bool gIsSecured = false;
43
44 static ESProvisioningCallbacks gESProvisioningCb;
45 static ESDeviceProperty gESDeviceProperty;
46
47 void ESConnectRequestCallback(ESResult esResult, ESConnectRequest *eventData)
48 {
49     OIC_LOG_V(DEBUG, ES_ENROLLEE_TAG, "ESConnectRequestCallback IN");
50
51     if(esResult != ES_OK)
52     {
53         OIC_LOG_V(ERROR, ES_ENROLLEE_TAG, "ESConnectRequestCallback Error Occured");
54         return;
55     }
56
57     if(gESProvisioningCb.ConnectRequestCb != NULL)
58     {
59         gESProvisioningCb.ConnectRequestCb(eventData);
60     }
61     else
62     {
63         OIC_LOG_V(ERROR, ES_ENROLLEE_TAG, "ConnectRequestCb is NULL");
64         return;
65     }
66 }
67
68 void ESWiFiConfRsrcCallback(ESResult esResult, ESWiFiConfData *eventData)
69 {
70     OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESWiFiConfRsrcCallback IN");
71
72     if(esResult != ES_OK)
73     {
74         OIC_LOG(ERROR, ES_ENROLLEE_TAG, "ESWiFiConfRsrcCallback Error Occured");
75         return;
76     }
77
78     // deliver data to ESProvisioningCallbacks
79     if(gESProvisioningCb.WiFiConfProvCb != NULL)
80     {
81         gESProvisioningCb.WiFiConfProvCb(eventData);
82     }
83     else
84     {
85         OIC_LOG(ERROR, ES_ENROLLEE_TAG, "WiFiConfProvCb is NULL");
86         return;
87     }
88 }
89
90 void ESCoapCloudConfRsrcCallback(ESResult esResult, ESCoapCloudConfData *eventData)
91 {
92     OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESCoapCloudConfRsrcCallback IN");
93
94     if(esResult != ES_OK)
95     {
96         OIC_LOG(ERROR, ES_ENROLLEE_TAG, "ESCoapCloudConfRsrcCallback Error Occured");
97         return;
98     }
99
100     if(gESProvisioningCb.CoapCloudConfProvCb != NULL)
101     {
102         gESProvisioningCb.CoapCloudConfProvCb(eventData);
103     }
104     else
105     {
106         OIC_LOG(ERROR, ES_ENROLLEE_TAG, "CoapCloudConfProvCb is NULL");
107         return;
108     }
109 }
110
111 void ESDevConfRsrcallback(ESResult esResult, ESDevConfData *eventData)
112 {
113     OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESDevConfRsrcallback IN");
114
115     if(esResult != ES_OK)
116     {
117         OIC_LOG(ERROR, ES_ENROLLEE_TAG, "ESDevConfRsrcallback Error Occured");
118         return;
119     }
120
121     if(gESProvisioningCb.DevConfProvCb != NULL)
122     {
123         gESProvisioningCb.DevConfProvCb(eventData);
124     }
125     else
126     {
127         OIC_LOG(ERROR, ES_ENROLLEE_TAG, "DevConfProvCb is NULL");
128         return;
129     }
130 }
131
132 ESResult ESInitEnrollee(bool isSecured, ESResourceMask resourceMask, ESProvisioningCallbacks callbacks)
133 {
134     OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESInitEnrollee IN");
135
136     gIsSecured = isSecured;
137
138     if((resourceMask & ES_WIFICONF_RESOURCE) == ES_WIFICONF_RESOURCE)
139     {
140         if(callbacks.WiFiConfProvCb != NULL)
141         {
142             gESProvisioningCb.WiFiConfProvCb = callbacks.WiFiConfProvCb;
143             RegisterWifiRsrcEventCallBack(ESWiFiConfRsrcCallback);
144         }
145         else
146         {
147             OIC_LOG(ERROR, ES_ENROLLEE_TAG, "WiFiConfProvCb NULL");
148             return ES_ERROR;
149         }
150     }
151     if((resourceMask & ES_DEVCONF_RESOURCE) == ES_DEVCONF_RESOURCE)
152     {
153         if(callbacks.DevConfProvCb != NULL)
154         {
155             gESProvisioningCb.DevConfProvCb = callbacks.DevConfProvCb;
156             RegisterDevConfRsrcEventCallBack(ESDevConfRsrcallback);
157         }
158         else
159         {
160             OIC_LOG(ERROR, ES_ENROLLEE_TAG, "DevConfProvCb NULL");
161             return ES_ERROR;
162         }
163     }
164     if((resourceMask & ES_COAPCLOUDCONF_RESOURCE) == ES_COAPCLOUDCONF_RESOURCE)
165     {
166         if(callbacks.CoapCloudConfProvCb != NULL)
167         {
168             gESProvisioningCb.CoapCloudConfProvCb = callbacks.CoapCloudConfProvCb;
169             RegisterCloudRsrcEventCallBack(ESCoapCloudConfRsrcCallback);
170         }
171         else
172         {
173             OIC_LOG(ERROR, ES_ENROLLEE_TAG, "CoapCloudConfProvCb NULL");
174             return ES_ERROR;
175         }
176     }
177
178     // TODO: if EasySetupProvCb is NULL, we should return an error at this moment.
179     if(callbacks.ConnectRequestCb != NULL)
180     {
181         gESProvisioningCb.ConnectRequestCb = callbacks.ConnectRequestCb;
182         RegisterConnectRequestEventCallBack(ESConnectRequestCallback);
183     }
184
185     if(CreateEasySetupResources(gIsSecured, resourceMask) != OC_STACK_OK)
186     {
187         UnRegisterResourceEventCallBack();
188
189         if (DeleteEasySetupResources() != OC_STACK_OK)
190         {
191             OIC_LOG(ERROR, ES_ENROLLEE_TAG, "Deleting prov resource error!!");
192         }
193
194         return ES_ERROR;
195     }
196
197     OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESInitEnrollee OUT");
198     return ES_OK;
199 }
200
201 ESResult ESSetDeviceProperty(ESDeviceProperty *deviceProperty)
202 {
203     OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESSetDeviceProperty IN");
204
205     if(SetDeviceProperty(deviceProperty) != OC_STACK_OK)
206     {
207         OIC_LOG(ERROR, ES_ENROLLEE_TAG, "ESSetDeviceProperty Error");
208         return ES_ERROR;
209     }
210
211     int modeIdx = 0;
212     while((deviceProperty->WiFi).mode[modeIdx] != WiFi_EOF)
213     {
214         (gESDeviceProperty.WiFi).mode[modeIdx] = (deviceProperty->WiFi).mode[modeIdx];
215         OIC_LOG_V(INFO_PRIVATE, ES_ENROLLEE_TAG, "WiFi Mode : %d", (gESDeviceProperty.WiFi).mode[modeIdx]);
216         modeIdx ++;
217     }
218     (gESDeviceProperty.WiFi).freq = (deviceProperty->WiFi).freq;
219     OIC_LOG_V(INFO_PRIVATE, ES_ENROLLEE_TAG, "WiFi Freq : %d", (gESDeviceProperty.WiFi).freq);
220
221     OICStrcpy((gESDeviceProperty.DevConf).deviceName, OIC_STRING_MAX_VALUE, (deviceProperty->DevConf).deviceName);
222     OIC_LOG_V(INFO_PRIVATE, ES_ENROLLEE_TAG, "Device Name : %s", (gESDeviceProperty.DevConf).deviceName);
223
224     OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESSetDeviceProperty OUT");
225     return ES_OK;
226 }
227
228 ESResult ESSetState(ESEnrolleeState esState)
229 {
230     OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESSetState IN");
231
232     if(esState < ES_STATE_INIT || esState >= ES_STATE_EOF)
233     {
234         OIC_LOG_V(ERROR, ES_ENROLLEE_TAG, "Invalid ESEnrolleeState : %d", esState);
235         return ES_ERROR;
236     }
237
238     if(SetEnrolleeState(esState) != OC_STACK_OK)
239     {
240         OIC_LOG(ERROR, ES_ENROLLEE_TAG, "ESSetState ES_ERROR");
241         return ES_ERROR;
242     }
243
244     OIC_LOG_V(INFO, ES_ENROLLEE_TAG, "Set ESState succesfully : %d", esState);
245     OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESSetState OUT");
246     return ES_OK;
247 }
248
249 ESResult ESSetErrorCode(ESErrorCode esErrCode)
250 {
251     OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESSetErrorCode IN");
252
253     if(esErrCode < ES_ERRCODE_NO_ERROR || esErrCode > ES_ERRCODE_UNKNOWN)
254     {
255         OIC_LOG_V(ERROR, ES_ENROLLEE_TAG, "Invalid ESSetErrorCode : %d", esErrCode);
256             return ES_ERROR;
257     }
258
259     if(SetEnrolleeErrCode(esErrCode) != OC_STACK_OK)
260     {
261         OIC_LOG(ERROR, ES_ENROLLEE_TAG, "ESSetErrorCode ES_ERROR");
262         return ES_ERROR;
263     }
264
265     OIC_LOG_V(INFO, ES_ENROLLEE_TAG, "Set ESErrorCode succesfully : %d", esErrCode);
266     OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESSetErrorCode OUT");
267     return ES_OK;
268 }
269
270 ESResult ESTerminateEnrollee()
271 {
272     OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESTerminateEnrollee IN");
273
274     UnRegisterResourceEventCallBack();
275
276     //Delete Prov resource
277     if (DeleteEasySetupResources() != OC_STACK_OK)
278     {
279         OIC_LOG(ERROR, ES_ENROLLEE_TAG, "Deleting prov resource error!!");
280         return ES_ERROR;
281     }
282
283     OIC_LOG(ERROR, ES_ENROLLEE_TAG, "ESTerminateEnrollee success");
284     return ES_OK;
285 }
286
287 ESResult ESSetCallbackForUserdata(ESReadUserdataCb readCb, ESWriteUserdataCb writeCb)
288 {
289     OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESSetCallbackForUserdata IN");
290
291     if(!readCb && !writeCb)
292     {
293         OIC_LOG(INFO, ES_ENROLLEE_TAG, "Both of callbacks for user data are null");
294         return ES_ERROR;
295     }
296
297     SetCallbackForUserData(readCb, writeCb);
298     return ES_OK;
299 }