1 //******************************************************************
3 // Copyright 2015 Samsung Electronics 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 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
24 * This file contains the implementation for EasySetup Enrollee device
27 #include "easysetup.h"
29 #include "resourcehandler.h"
30 #include "oic_string.h"
33 * @var ES_ENROLLEE_TAG
34 * @brief Logging tag for module name.
36 #define ES_ENROLLEE_TAG "ES"
38 //-----------------------------------------------------------------------------
40 //-----------------------------------------------------------------------------
42 static bool gIsSecured = false;
44 static ESProvisioningCallbacks gESProvisioningCb;
45 static ESDeviceProperty gESDeviceProperty;
47 void ESConnectRequestCallback(ESResult esResult, ESConnectRequest *eventData)
49 OIC_LOG_V(INFO, ES_ENROLLEE_TAG, "ESConnectRequestCallback IN");
53 OIC_LOG_V(ERROR, ES_ENROLLEE_TAG, "ESConnectRequestCallback Error Occured");
57 if(gESProvisioningCb.ConnectRequestCb != NULL)
59 gESProvisioningCb.ConnectRequestCb(eventData);
63 OIC_LOG_V(ERROR, ES_ENROLLEE_TAG, "ConnectRequestCb is NULL");
67 OIC_LOG_V(INFO, ES_ENROLLEE_TAG, "ESConnectRequestCallback OUT");
70 void ESWiFiConfRsrcCallback(ESResult esResult, ESWiFiConfData *eventData)
72 OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESWiFiConfRsrcCallback IN");
76 OIC_LOG(ERROR, ES_ENROLLEE_TAG, "ESWiFiConfRsrcCallback Error Occured");
80 // deliver data to ESProvisioningCallbacks
81 if(gESProvisioningCb.WiFiConfProvCb != NULL)
83 gESProvisioningCb.WiFiConfProvCb(eventData);
87 OIC_LOG(ERROR, ES_ENROLLEE_TAG, "WiFiConfProvCb is NULL");
90 OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESWiFiConfRsrcCallback OUT");
93 void ESCoapCloudConfRsrcCallback(ESResult esResult, ESCoapCloudConfData *eventData)
95 OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESCoapCloudConfRsrcCallback IN");
99 OIC_LOG(ERROR, ES_ENROLLEE_TAG, "ESCoapCloudConfRsrcCallback Error Occured");
103 if(gESProvisioningCb.CoapCloudConfProvCb != NULL)
105 gESProvisioningCb.CoapCloudConfProvCb(eventData);
109 OIC_LOG(ERROR, ES_ENROLLEE_TAG, "CoapCloudConfProvCb is NULL");
112 OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESCoapCloudConfRsrcCallback OUT");
115 void ESDevConfRsrcallback(ESResult esResult, ESDevConfData *eventData)
117 OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESDevConfRsrcallback IN");
119 if(esResult != ES_OK)
121 OIC_LOG(ERROR, ES_ENROLLEE_TAG, "ESDevConfRsrcallback Error Occured");
125 if(gESProvisioningCb.DevConfProvCb != NULL)
127 gESProvisioningCb.DevConfProvCb(eventData);
131 OIC_LOG(ERROR, ES_ENROLLEE_TAG, "DevConfProvCb is NULL");
134 OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESDevConfRsrcallback OUT");
137 ESResult ESInitEnrollee(bool isSecured, ESResourceMask resourceMask, ESProvisioningCallbacks callbacks)
139 OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESInitEnrollee IN");
141 gIsSecured = isSecured;
143 if((resourceMask & ES_WIFICONF_RESOURCE) == ES_WIFICONF_RESOURCE)
145 if(callbacks.WiFiConfProvCb != NULL)
147 gESProvisioningCb.WiFiConfProvCb = callbacks.WiFiConfProvCb;
148 RegisterWifiRsrcEventCallBack(ESWiFiConfRsrcCallback);
152 OIC_LOG(ERROR, ES_ENROLLEE_TAG, "WiFiConfProvCb NULL");
156 if((resourceMask & ES_DEVCONF_RESOURCE) == ES_DEVCONF_RESOURCE)
158 if(callbacks.DevConfProvCb != NULL)
160 gESProvisioningCb.DevConfProvCb = callbacks.DevConfProvCb;
161 RegisterDevConfRsrcEventCallBack(ESDevConfRsrcallback);
165 OIC_LOG(ERROR, ES_ENROLLEE_TAG, "DevConfProvCb NULL");
169 if((resourceMask & ES_COAPCLOUDCONF_RESOURCE) == ES_COAPCLOUDCONF_RESOURCE)
171 if(callbacks.CoapCloudConfProvCb != NULL)
173 gESProvisioningCb.CoapCloudConfProvCb = callbacks.CoapCloudConfProvCb;
174 RegisterCloudRsrcEventCallBack(ESCoapCloudConfRsrcCallback);
178 OIC_LOG(ERROR, ES_ENROLLEE_TAG, "CoapCloudConfProvCb NULL");
183 // TODO: if EasySetupProvCb is NULL, we should return an error at this moment.
184 if(callbacks.ConnectRequestCb != NULL)
186 gESProvisioningCb.ConnectRequestCb = callbacks.ConnectRequestCb;
187 RegisterConnectRequestEventCallBack(ESConnectRequestCallback);
190 if(CreateEasySetupResources(gIsSecured, resourceMask) != OC_STACK_OK)
192 UnRegisterResourceEventCallBack();
194 if (DeleteEasySetupResources() != OC_STACK_OK)
196 OIC_LOG(ERROR, ES_ENROLLEE_TAG, "Deleting prov resource error!!");
202 OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESInitEnrollee OUT");
206 ESResult ESSetDeviceProperty(ESDeviceProperty *deviceProperty)
208 OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESSetDeviceProperty IN");
210 if(SetDeviceProperty(deviceProperty) != OC_STACK_OK)
212 OIC_LOG(ERROR, ES_ENROLLEE_TAG, "ESSetDeviceProperty Error");
217 while((deviceProperty->WiFi).mode[modeIdx] != WiFi_EOF)
219 (gESDeviceProperty.WiFi).mode[modeIdx] = (deviceProperty->WiFi).mode[modeIdx];
220 OIC_LOG_V(INFO_PRIVATE, ES_ENROLLEE_TAG, "WiFi Mode : %d", (gESDeviceProperty.WiFi).mode[modeIdx]);
223 (gESDeviceProperty.WiFi).freq = (deviceProperty->WiFi).freq;
224 OIC_LOG_V(INFO_PRIVATE, ES_ENROLLEE_TAG, "WiFi Freq : %d", (gESDeviceProperty.WiFi).freq);
226 OICStrcpy((gESDeviceProperty.DevConf).deviceName, OIC_STRING_MAX_VALUE, (deviceProperty->DevConf).deviceName);
227 OIC_LOG_V(INFO_PRIVATE, ES_ENROLLEE_TAG, "Device Name : %s", (gESDeviceProperty.DevConf).deviceName);
229 OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESSetDeviceProperty OUT");
233 ESResult ESSetState(ESEnrolleeState esState)
235 OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESSetState IN");
237 if(esState < ES_STATE_INIT || esState >= ES_STATE_EOF)
239 OIC_LOG_V(ERROR, ES_ENROLLEE_TAG, "Invalid ESEnrolleeState : %d", esState);
243 if(SetEnrolleeState(esState) != OC_STACK_OK)
245 OIC_LOG(ERROR, ES_ENROLLEE_TAG, "ESSetState ES_ERROR");
249 OIC_LOG_V(INFO, ES_ENROLLEE_TAG, "Set ESState succesfully : %d", esState);
250 OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESSetState OUT");
254 ESResult ESSetErrorCode(ESErrorCode esErrCode)
256 OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESSetErrorCode IN");
258 if(esErrCode < ES_ERRCODE_NO_ERROR || esErrCode > ES_ERRCODE_UNKNOWN)
260 OIC_LOG_V(ERROR, ES_ENROLLEE_TAG, "Invalid ESSetErrorCode : %d", esErrCode);
264 if(SetEnrolleeErrCode(esErrCode) != OC_STACK_OK)
266 OIC_LOG(ERROR, ES_ENROLLEE_TAG, "ESSetErrorCode ES_ERROR");
270 OIC_LOG_V(INFO, ES_ENROLLEE_TAG, "Set ESErrorCode succesfully : %d", esErrCode);
271 OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESSetErrorCode OUT");
275 ESResult ESTerminateEnrollee()
277 OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESTerminateEnrollee IN");
279 UnRegisterResourceEventCallBack();
281 //Delete Prov resource
282 if (DeleteEasySetupResources() != OC_STACK_OK)
284 OIC_LOG(ERROR, ES_ENROLLEE_TAG, "Deleting prov resource error!!");
288 OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESTerminateEnrollee success");
292 ESResult ESSetCallbackForUserdata(ESReadUserdataCb readCb, ESWriteUserdataCb writeCb)
294 OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESSetCallbackForUserdata IN");
296 if(!readCb && !writeCb)
298 OIC_LOG(INFO, ES_ENROLLEE_TAG, "Both of callbacks for user data are null");
302 SetCallbackForUserData(readCb, writeCb);
303 OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESSetCallbackForUserdata OUT");