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(DEBUG, 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");
68 void ESWiFiConfRsrcCallback(ESResult esResult, ESWiFiConfData *eventData)
70 OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESWiFiConfRsrcCallback IN");
74 OIC_LOG(ERROR, ES_ENROLLEE_TAG, "ESWiFiConfRsrcCallback Error Occured");
78 // deliver data to ESProvisioningCallbacks
79 if(gESProvisioningCb.WiFiConfProvCb != NULL)
81 gESProvisioningCb.WiFiConfProvCb(eventData);
85 OIC_LOG(ERROR, ES_ENROLLEE_TAG, "WiFiConfProvCb is NULL");
90 void ESCoapCloudConfRsrcCallback(ESResult esResult, ESCoapCloudConfData *eventData)
92 OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESCoapCloudConfRsrcCallback IN");
96 OIC_LOG(ERROR, ES_ENROLLEE_TAG, "ESCoapCloudConfRsrcCallback Error Occured");
100 if(gESProvisioningCb.CoapCloudConfProvCb != NULL)
102 gESProvisioningCb.CoapCloudConfProvCb(eventData);
106 OIC_LOG(ERROR, ES_ENROLLEE_TAG, "CoapCloudConfProvCb is NULL");
111 void ESDevConfRsrcallback(ESResult esResult, ESDevConfData *eventData)
113 OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESDevConfRsrcallback IN");
115 if(esResult != ES_OK)
117 OIC_LOG(ERROR, ES_ENROLLEE_TAG, "ESDevConfRsrcallback Error Occured");
121 if(gESProvisioningCb.DevConfProvCb != NULL)
123 gESProvisioningCb.DevConfProvCb(eventData);
127 OIC_LOG(ERROR, ES_ENROLLEE_TAG, "DevConfProvCb is NULL");
132 ESResult ESInitEnrollee(bool isSecured, ESResourceMask resourceMask, ESProvisioningCallbacks callbacks)
134 OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESInitEnrollee IN");
136 gIsSecured = isSecured;
138 if((resourceMask & ES_WIFICONF_RESOURCE) == ES_WIFICONF_RESOURCE)
140 if(callbacks.WiFiConfProvCb != NULL)
142 gESProvisioningCb.WiFiConfProvCb = callbacks.WiFiConfProvCb;
143 RegisterWifiRsrcEventCallBack(ESWiFiConfRsrcCallback);
147 OIC_LOG(ERROR, ES_ENROLLEE_TAG, "WiFiConfProvCb NULL");
151 if((resourceMask & ES_DEVCONF_RESOURCE) == ES_DEVCONF_RESOURCE)
153 if(callbacks.DevConfProvCb != NULL)
155 gESProvisioningCb.DevConfProvCb = callbacks.DevConfProvCb;
156 RegisterDevConfRsrcEventCallBack(ESDevConfRsrcallback);
160 OIC_LOG(ERROR, ES_ENROLLEE_TAG, "DevConfProvCb NULL");
164 if((resourceMask & ES_COAPCLOUDCONF_RESOURCE) == ES_COAPCLOUDCONF_RESOURCE)
166 if(callbacks.CoapCloudConfProvCb != NULL)
168 gESProvisioningCb.CoapCloudConfProvCb = callbacks.CoapCloudConfProvCb;
169 RegisterCloudRsrcEventCallBack(ESCoapCloudConfRsrcCallback);
173 OIC_LOG(ERROR, ES_ENROLLEE_TAG, "CoapCloudConfProvCb NULL");
178 // TODO: if EasySetupProvCb is NULL, we should return an error at this moment.
179 if(callbacks.ConnectRequestCb != NULL)
181 gESProvisioningCb.ConnectRequestCb = callbacks.ConnectRequestCb;
182 RegisterConnectRequestEventCallBack(ESConnectRequestCallback);
185 if(CreateEasySetupResources(gIsSecured, resourceMask) != OC_STACK_OK)
187 UnRegisterResourceEventCallBack();
189 if (DeleteEasySetupResources() != OC_STACK_OK)
191 OIC_LOG(ERROR, ES_ENROLLEE_TAG, "Deleting prov resource error!!");
197 OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESInitEnrollee OUT");
201 ESResult ESSetDeviceProperty(ESDeviceProperty *deviceProperty)
203 OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESSetDeviceProperty IN");
205 if(SetDeviceProperty(deviceProperty) != OC_STACK_OK)
207 OIC_LOG(ERROR, ES_ENROLLEE_TAG, "ESSetDeviceProperty Error");
212 while((deviceProperty->WiFi).mode[modeIdx] != WiFi_EOF)
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]);
218 (gESDeviceProperty.WiFi).freq = (deviceProperty->WiFi).freq;
219 OIC_LOG_V(INFO_PRIVATE, ES_ENROLLEE_TAG, "WiFi Freq : %d", (gESDeviceProperty.WiFi).freq);
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);
224 OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESSetDeviceProperty OUT");
228 ESResult ESSetState(ESEnrolleeState esState)
230 OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESSetState IN");
232 if(esState < ES_STATE_INIT || esState >= ES_STATE_EOF)
234 OIC_LOG_V(ERROR, ES_ENROLLEE_TAG, "Invalid ESEnrolleeState : %d", esState);
238 if(SetEnrolleeState(esState) != OC_STACK_OK)
240 OIC_LOG(ERROR, ES_ENROLLEE_TAG, "ESSetState ES_ERROR");
244 OIC_LOG_V(INFO, ES_ENROLLEE_TAG, "Set ESState succesfully : %d", esState);
245 OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESSetState OUT");
249 ESResult ESSetErrorCode(ESErrorCode esErrCode)
251 OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESSetErrorCode IN");
253 if(esErrCode < ES_ERRCODE_NO_ERROR || esErrCode > ES_ERRCODE_UNKNOWN)
255 OIC_LOG_V(ERROR, ES_ENROLLEE_TAG, "Invalid ESSetErrorCode : %d", esErrCode);
259 if(SetEnrolleeErrCode(esErrCode) != OC_STACK_OK)
261 OIC_LOG(ERROR, ES_ENROLLEE_TAG, "ESSetErrorCode ES_ERROR");
265 OIC_LOG_V(INFO, ES_ENROLLEE_TAG, "Set ESErrorCode succesfully : %d", esErrCode);
266 OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESSetErrorCode OUT");
270 ESResult ESTerminateEnrollee()
272 OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESTerminateEnrollee IN");
274 UnRegisterResourceEventCallBack();
276 //Delete Prov resource
277 if (DeleteEasySetupResources() != OC_STACK_OK)
279 OIC_LOG(ERROR, ES_ENROLLEE_TAG, "Deleting prov resource error!!");
283 OIC_LOG(ERROR, ES_ENROLLEE_TAG, "ESTerminateEnrollee success");
287 ESResult ESSetCallbackForUserdata(ESReadUserdataCb readCb, ESWriteUserdataCb writeCb)
289 OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESSetCallbackForUserdata IN");
291 if(!readCb && !writeCb)
293 OIC_LOG(INFO, ES_ENROLLEE_TAG, "Both of callbacks for user data are null");
297 SetCallbackForUserData(readCb, writeCb);