Merge branch 'master' into extended-easysetup
[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 ESWiFiRsrcCallback(ESResult esResult, ESWiFiProvData *eventData)
48 {
49     OIC_LOG_V(DEBUG, ES_ENROLLEE_TAG, "ESWiFiRsrcCallback IN");
50
51     if(esResult != ES_OK)
52     {
53         OIC_LOG_V(ERROR, ES_ENROLLEE_TAG, "ESWiFiRsrcCallback Error Occured");
54         return;
55     }
56
57     // deliver data to ESProvisioningCallbacks
58     if(gESProvisioningCb.WiFiProvCb != NULL)
59     {
60         gESProvisioningCb.WiFiProvCb(eventData);
61     }
62     else
63     {
64         OIC_LOG_V(ERROR, ES_ENROLLEE_TAG, "WiFiProvCb is NULL");
65         return;
66     }
67 }
68
69 void ESCloudRsrcCallback(ESResult esResult, ESCloudProvData *eventData)
70 {
71     OIC_LOG_V(DEBUG, ES_ENROLLEE_TAG, "ESCloudRsrcCallback IN");
72
73     if(esResult != ES_OK)
74     {
75         OIC_LOG_V(ERROR, ES_ENROLLEE_TAG, "ESCloudRsrcCallback Error Occured");
76         return;
77     }
78
79     if(gESProvisioningCb.CloudDataProvCb != NULL)
80     {
81         gESProvisioningCb.CloudDataProvCb(eventData);
82     }
83     else
84     {
85         OIC_LOG_V(ERROR, ES_ENROLLEE_TAG, "CloudDataProvCb is NULL");
86         return;
87     }
88 }
89
90 void ESDevconfRsrcallback(ESResult esResult, ESDevConfProvData *eventData)
91 {
92     OIC_LOG_V(DEBUG, ES_ENROLLEE_TAG, "ESDevconfRsrcallback IN");
93
94     if(esResult != ES_OK)
95     {
96         OIC_LOG_V(ERROR, ES_ENROLLEE_TAG, "ESDevconfRsrcallback Error Occured");
97         return;
98     }
99
100     if(gESProvisioningCb.DevConfProvCb != NULL)
101     {
102         gESProvisioningCb.DevConfProvCb(eventData);
103     }
104     else
105     {
106         OIC_LOG_V(ERROR, ES_ENROLLEE_TAG, "DevConfProvCb is NULL");
107         return;
108     }
109 }
110
111 ESResult ESInitEnrollee(bool isSecured, ESResourceMask resourceMask, ESProvisioningCallbacks callbacks)
112 {
113     OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESInitEnrollee IN");
114
115     gIsSecured = isSecured;
116
117     if((resourceMask & ES_WIFI_RESOURCE) == ES_WIFI_RESOURCE)
118     {
119         if(callbacks.WiFiProvCb != NULL)
120         {
121             gESProvisioningCb.WiFiProvCb = callbacks.WiFiProvCb;
122             RegisterWifiRsrcEventCallBack(ESWiFiRsrcCallback);
123         }
124         else
125         {
126             OIC_LOG(ERROR, ES_ENROLLEE_TAG, "WiFiProvCb NULL");
127             return ES_ERROR;
128         }
129     }
130     if((resourceMask & ES_DEVCONF_RESOURCE) == ES_DEVCONF_RESOURCE)
131     {
132         if(callbacks.DevConfProvCb != NULL)
133         {
134             gESProvisioningCb.DevConfProvCb = callbacks.DevConfProvCb;
135             RegisterDevConfRsrcEventCallBack(ESDevconfRsrcallback);
136         }
137         else
138         {
139             OIC_LOG(ERROR, ES_ENROLLEE_TAG, "DevConfProvCb NULL");
140             return ES_ERROR;
141         }
142     }
143     if((resourceMask & ES_CLOUD_RESOURCE) == ES_CLOUD_RESOURCE)
144     {
145         if(callbacks.CloudDataProvCb != NULL)
146         {
147             gESProvisioningCb.CloudDataProvCb = callbacks.CloudDataProvCb;
148             RegisterCloudRsrcEventCallBack(ESCloudRsrcCallback);
149         }
150         else
151         {
152             OIC_LOG(ERROR, ES_ENROLLEE_TAG, "CloudDataProvCb NULL");
153             return ES_ERROR;
154         }
155     }
156
157     if(CreateEasySetupResources(gIsSecured, resourceMask) != OC_STACK_OK)
158     {
159         UnRegisterResourceEventCallBack();
160
161         if (DeleteEasySetupResources() != OC_STACK_OK)
162         {
163             OIC_LOG(ERROR, ES_ENROLLEE_TAG, "Deleting prov resource error!!");
164         }
165
166         return ES_ERROR;
167     }
168
169
170     OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESInitEnrollee OUT");
171     return ES_OK;
172 }
173
174 ESResult ESSetDeviceProperty(ESDeviceProperty *deviceProperty)
175 {
176     OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESSetDeviceProperty IN");
177
178     if(SetDeviceProperty(deviceProperty) != OC_STACK_OK)
179     {
180         OIC_LOG(ERROR, ES_ENROLLEE_TAG, "ESSetDeviceProperty Error");
181         return ES_ERROR;
182     }
183
184     int modeIdx = 0;
185     while((deviceProperty->WiFi).mode[modeIdx] != WiFi_EOF)
186     {
187         (gESDeviceProperty.WiFi).mode[modeIdx] = (deviceProperty->WiFi).mode[modeIdx];
188         OIC_LOG_V(INFO, ES_ENROLLEE_TAG, "WiFi Mode : %d", (gESDeviceProperty.WiFi).mode[modeIdx]);
189         modeIdx ++;
190     }
191     (gESDeviceProperty.WiFi).freq = (deviceProperty->WiFi).freq;
192     OIC_LOG_V(INFO, ES_ENROLLEE_TAG, "WiFi Freq : %d", (gESDeviceProperty.WiFi).freq);
193
194     OICStrcpy((gESDeviceProperty.DevConf).deviceName, MAX_DEVICELEN, (deviceProperty->DevConf).deviceName);
195     OIC_LOG_V(INFO, ES_ENROLLEE_TAG, "Device Name : %s", (gESDeviceProperty.DevConf).deviceName);
196
197     OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESSetDeviceProperty OUT");
198     return ES_OK;
199 }
200
201 ESResult ESSetState(ESEnrolleeState esState)
202 {
203     OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESSetState IN");
204
205     if(esState < ES_STATE_INIT || esState > ES_STATE_REGISTRRED_FAIL_TO_CLOUD)
206     {
207         OIC_LOG_V(ERROR, ES_ENROLLEE_TAG, "Invalid ESEnrolleeState : %d", esState);
208         return ES_ERROR;
209     }
210
211     if(SetEnrolleeState(esState) != OC_STACK_OK)
212     {
213         OIC_LOG(ERROR, ES_ENROLLEE_TAG, "ESSetState ES_ERROR");
214         return ES_ERROR;
215     }
216
217     OIC_LOG_V(INFO, ES_ENROLLEE_TAG, "Set ESState succesfully : %d", esState);
218     OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESSetState OUT");
219     return ES_OK;
220 }
221
222 ESResult ESSetErrorCode(ESErrorCode esErrCode)
223 {
224     OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESSetErrorCode IN");
225
226     if(esErrCode < ES_ERRCODE_NO_ERROR || esErrCode > ES_ERRCODE_UNKNOWN)
227     {
228         OIC_LOG_V(ERROR, ES_ENROLLEE_TAG, "Invalid ESSetErrorCode : %d", esErrCode);
229             return ES_ERROR;
230     }
231
232     if(SetEnrolleeErrCode(esErrCode) != OC_STACK_OK)
233     {
234         OIC_LOG(ERROR, ES_ENROLLEE_TAG, "ESSetErrorCode ES_ERROR");
235         return ES_ERROR;
236     }
237
238     OIC_LOG_V(DEBUG, ES_ENROLLEE_TAG, "Set ESErrorCode succesfully : %d", esErrCode);
239     OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESSetErrorCode OUT");
240     return ES_OK;
241 }
242
243 ESResult ESTerminateEnrollee()
244 {
245     OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESTerminateEnrollee IN");
246
247     UnRegisterResourceEventCallBack();
248
249     //Delete Prov resource
250     if (DeleteEasySetupResources() != OC_STACK_OK)
251     {
252         OIC_LOG(ERROR, ES_ENROLLEE_TAG, "Deleting prov resource error!!");
253         return ES_ERROR;
254     }
255
256     OIC_LOG(ERROR, ES_ENROLLEE_TAG, "ESTerminateEnrollee success");
257     return ES_OK;
258 }
259
260 ESResult ESSetCallbackForUserdata(ESReadUserdataCb readCb, ESWriteUserdataCb writeCb)
261 {
262     if(!readCb && !writeCb)
263     {
264         OIC_LOG(INFO, ES_ENROLLEE_TAG, "Both of callbacks for user data are null");
265         return ES_ERROR;
266     }
267
268     SetCallbackForUserData(readCb, writeCb);
269     return ES_OK;
270 }