X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=service%2Feasy-setup%2Fenrollee%2Fsrc%2Feasysetup.c;h=d77f096218dcfb20af1d126129c2348219daf284;hb=refs%2Ftags%2Fsubmit%2Ftizen%2F20180118.072546;hp=dcb35a8af4aae3be6a887eb837687fa058469780;hpb=1fea5e151116d9876939c8cd71ba6969ba4b967f;p=platform%2Fupstream%2Fiotivity.git diff --git a/service/easy-setup/enrollee/src/easysetup.c b/service/easy-setup/enrollee/src/easysetup.c old mode 100644 new mode 100755 index dcb35a8..d77f096 --- a/service/easy-setup/enrollee/src/easysetup.c +++ b/service/easy-setup/enrollee/src/easysetup.c @@ -25,11 +25,9 @@ */ #include "easysetup.h" -#include "softap.h" -#include "onboarding.h" #include "logger.h" #include "resourcehandler.h" -#include "easysetupcallbacks.h" +#include "oic_string.h" /** * @var ES_ENROLLEE_TAG @@ -41,158 +39,267 @@ // Private variables //----------------------------------------------------------------------------- -/** - * @var gTargetSsid - * @brief Target SSID of the Soft Access point to which the device has to connect - */ -static char gTargetSsid[MAXSSIDLEN]; +static bool gIsSecured = false; -/** - * @var gTargetPass - * @brief Password of the target access point to which the device has to connect - */ -static char gTargetPass[MAXNETCREDLEN]; +static ESProvisioningCallbacks gESProvisioningCb; +static ESDeviceProperty gESDeviceProperty; -/** - * @var gEnrolleeStatusCb - * @brief Fucntion pointer holding the callback for intimation of EasySetup Enrollee status callback - */ -static EventCallback gEnrolleeStatusCb = NULL; +void ESConnectRequestCallback(ESResult esResult, ESConnectRequest *eventData) +{ + OIC_LOG_V(INFO, ES_ENROLLEE_TAG, "ESConnectRequestCallback IN"); -/** - * @var gIsSecured - * @brief Variable to check if secure mode is enabled or not. - */ -static bool gIsSecured = false; + if(esResult != ES_OK) + { + OIC_LOG_V(ERROR, ES_ENROLLEE_TAG, "ESConnectRequestCallback Error Occured"); + return; + } -void OnboardingCallback(ESResult esResult) -{ - OIC_LOG_V(DEBUG, ES_ENROLLEE_TAG, "OnboardingCallback with result = %d", esResult); - if(esResult == ES_OK) - { - gEnrolleeStatusCb(esResult, ES_ON_BOARDED_STATE); - } - else - { - OIC_LOG_V(DEBUG, ES_ENROLLEE_TAG, - "Onboarding is failed callback result is = %d", esResult); - gEnrolleeStatusCb(esResult, ES_INIT_STATE); - } + if(gESProvisioningCb.ConnectRequestCb != NULL) + { + gESProvisioningCb.ConnectRequestCb(eventData); + } + else + { + OIC_LOG_V(ERROR, ES_ENROLLEE_TAG, "ConnectRequestCb is NULL"); + return; + } + + OIC_LOG_V(INFO, ES_ENROLLEE_TAG, "ESConnectRequestCallback OUT"); } -void ProvisioningCallback(ESResult esResult) +void ESWiFiConfRsrcCallback(ESResult esResult, ESWiFiConfData *eventData) { - OIC_LOG_V(DEBUG, ES_ENROLLEE_TAG, "ProvisioningCallback with result = %d", esResult); + OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESWiFiConfRsrcCallback IN"); - if (esResult == ES_RECVTRIGGEROFPROVRES) + if(esResult != ES_OK) { - GetTargetNetworkInfoFromProvResource(gTargetSsid, gTargetPass); - gEnrolleeStatusCb(ES_OK, ES_PROVISIONED_STATE); - OIC_LOG(DEBUG, ES_ENROLLEE_TAG, "Connecting with target network"); + OIC_LOG(ERROR, ES_ENROLLEE_TAG, "ESWiFiConfRsrcCallback Error Occured"); + return; + } - // Connecting/onboarding to target network - ConnectToWiFiNetwork(gTargetSsid, gTargetPass, OnboardingCallbackTargetNet); + // deliver data to ESProvisioningCallbacks + if(gESProvisioningCb.WiFiConfProvCb != NULL) + { + gESProvisioningCb.WiFiConfProvCb(eventData); } else { - OIC_LOG_V(DEBUG, ES_ENROLLEE_TAG, "Provisioning is failed callback result is = %d", esResult); - // Resetting Enrollee to ONBOARDED_STATE as Enrollee is alreday onboarded in previous step - gEnrolleeStatusCb(ES_OK, ES_ON_BOARDED_STATE); + OIC_LOG(ERROR, ES_ENROLLEE_TAG, "WiFiConfProvCb is NULL"); + return; } + OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESWiFiConfRsrcCallback OUT"); } -void OnboardingCallbackTargetNet(ESResult esResult) +void ESCoapCloudConfRsrcCallback(ESResult esResult, ESCoapCloudConfData *eventData) { - OIC_LOG_V(DEBUG, ES_ENROLLEE_TAG, "OnboardingCallback on target network with result = %d", - esResult); - if(esResult == ES_OK) + OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESCoapCloudConfRsrcCallback IN"); + + if(esResult != ES_OK) + { + OIC_LOG(ERROR, ES_ENROLLEE_TAG, "ESCoapCloudConfRsrcCallback Error Occured"); + return; + } + + if(gESProvisioningCb.CoapCloudConfProvCb != NULL) { - gEnrolleeStatusCb(esResult, ES_ON_BOARDED_TARGET_NETWORK_STATE); + gESProvisioningCb.CoapCloudConfProvCb(eventData); } else { - OIC_LOG_V(DEBUG, ES_ENROLLEE_TAG, - "Onboarding is failed on target network and callback result is = %d", esResult); - // Resetting Enrollee state to the ES_PROVISIONED_STATE - // as device is already being provisioned with target network creds. - gEnrolleeStatusCb(esResult, ES_PROVISIONED_STATE); + OIC_LOG(ERROR, ES_ENROLLEE_TAG, "CoapCloudConfProvCb is NULL"); + return; } + OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESCoapCloudConfRsrcCallback OUT"); } -ESResult InitEasySetup(OCConnectivityType networkType, const char *ssid, const char *passwd, - bool isSecured, - EventCallback cb) +void ESDevConfRsrcallback(ESResult esResult, ESDevConfData *eventData) { - OIC_LOG(INFO, ES_ENROLLEE_TAG, "InitEasySetup IN"); - if(!ValidateParam(networkType,ssid,passwd,cb)) + OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESDevConfRsrcallback IN"); + + if(esResult != ES_OK) { - OIC_LOG(ERROR, ES_ENROLLEE_TAG, - "InitEasySetup::Stopping Easy setup due to invalid parameters"); - return ES_ERROR; + OIC_LOG(ERROR, ES_ENROLLEE_TAG, "ESDevConfRsrcallback Error Occured"); + return; + } + + if(gESProvisioningCb.DevConfProvCb != NULL) + { + gESProvisioningCb.DevConfProvCb(eventData); } + else + { + OIC_LOG(ERROR, ES_ENROLLEE_TAG, "DevConfProvCb is NULL"); + return; + } + OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESDevConfRsrcallback OUT"); +} - //Init callback - gEnrolleeStatusCb = cb; +ESResult ESInitEnrollee(bool isSecured, ESResourceMask resourceMask, ESProvisioningCallbacks callbacks) +{ + OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESInitEnrollee IN"); gIsSecured = isSecured; - // TODO : This onboarding state has to be set by lower layer, as they better - // knows when actually on-boarding started. - cb(ES_ERROR,ES_ON_BOARDING_STATE); + if((resourceMask & ES_WIFICONF_RESOURCE) == ES_WIFICONF_RESOURCE) + { + if(callbacks.WiFiConfProvCb != NULL) + { + gESProvisioningCb.WiFiConfProvCb = callbacks.WiFiConfProvCb; + RegisterWifiRsrcEventCallBack(ESWiFiConfRsrcCallback); + } + else + { + OIC_LOG(ERROR, ES_ENROLLEE_TAG, "WiFiConfProvCb NULL"); + return ES_ERROR; + } + } + if((resourceMask & ES_DEVCONF_RESOURCE) == ES_DEVCONF_RESOURCE) + { + if(callbacks.DevConfProvCb != NULL) + { + gESProvisioningCb.DevConfProvCb = callbacks.DevConfProvCb; + RegisterDevConfRsrcEventCallBack(ESDevConfRsrcallback); + } + else + { + OIC_LOG(ERROR, ES_ENROLLEE_TAG, "DevConfProvCb NULL"); + return ES_ERROR; + } + } + if((resourceMask & ES_COAPCLOUDCONF_RESOURCE) == ES_COAPCLOUDCONF_RESOURCE) + { + if(callbacks.CoapCloudConfProvCb != NULL) + { + gESProvisioningCb.CoapCloudConfProvCb = callbacks.CoapCloudConfProvCb; + RegisterCloudRsrcEventCallBack(ESCoapCloudConfRsrcCallback); + } + else + { + OIC_LOG(ERROR, ES_ENROLLEE_TAG, "CoapCloudConfProvCb NULL"); + return ES_ERROR; + } + } - OIC_LOG(INFO, ES_ENROLLEE_TAG, "received callback"); - OIC_LOG(INFO, ES_ENROLLEE_TAG, "onboarding now.."); + // TODO: if EasySetupProvCb is NULL, we should return an error at this moment. + if(callbacks.ConnectRequestCb != NULL) + { + gESProvisioningCb.ConnectRequestCb = callbacks.ConnectRequestCb; + RegisterConnectRequestEventCallBack(ESConnectRequestCallback); + } - if(!ESOnboard(ssid, passwd, OnboardingCallback)) + if(CreateEasySetupResources(gIsSecured, resourceMask) != OC_STACK_OK) { - OIC_LOG(ERROR, ES_ENROLLEE_TAG, "InitEasySetup::On-boarding failed"); - cb(ES_ERROR, ES_INIT_STATE); + UnRegisterResourceEventCallBack(); + + if (DeleteEasySetupResources() != OC_STACK_OK) + { + OIC_LOG(ERROR, ES_ENROLLEE_TAG, "Deleting prov resource error!!"); + } + return ES_ERROR; } - OIC_LOG(INFO, ES_ENROLLEE_TAG, "InitEasySetup OUT"); + OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESInitEnrollee OUT"); return ES_OK; } -ESResult TerminateEasySetup() +ESResult ESSetDeviceProperty(ESDeviceProperty *deviceProperty) { - UnRegisterResourceEventCallBack(); + OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESSetDeviceProperty IN"); - //Delete Prov resource - if (DeleteProvisioningResource() != OC_STACK_OK) + if(SetDeviceProperty(deviceProperty) != OC_STACK_OK) { - OIC_LOG(ERROR, ES_ENROLLEE_TAG, "Deleting prov resource error!!"); + OIC_LOG(ERROR, ES_ENROLLEE_TAG, "ESSetDeviceProperty Error"); return ES_ERROR; } - OIC_LOG(ERROR, ES_ENROLLEE_TAG, "TerminateEasySetup success"); + int modeIdx = 0; + while((deviceProperty->WiFi).mode[modeIdx] != WiFi_EOF) + { + (gESDeviceProperty.WiFi).mode[modeIdx] = (deviceProperty->WiFi).mode[modeIdx]; + OIC_LOG_V(INFO_PRIVATE, ES_ENROLLEE_TAG, "WiFi Mode : %d", (gESDeviceProperty.WiFi).mode[modeIdx]); + modeIdx ++; + } + (gESDeviceProperty.WiFi).freq = (deviceProperty->WiFi).freq; + OIC_LOG_V(INFO_PRIVATE, ES_ENROLLEE_TAG, "WiFi Freq : %d", (gESDeviceProperty.WiFi).freq); + + OICStrcpy((gESDeviceProperty.DevConf).deviceName, OIC_STRING_MAX_VALUE, (deviceProperty->DevConf).deviceName); + OIC_LOG_V(INFO_PRIVATE, ES_ENROLLEE_TAG, "Device Name : %s", (gESDeviceProperty.DevConf).deviceName); + + OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESSetDeviceProperty OUT"); return ES_OK; } -ESResult InitProvisioning() +ESResult ESSetState(ESEnrolleeState esState) { - OIC_LOG(INFO, ES_ENROLLEE_TAG, "InitProvisioning <>"); + OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESSetState IN"); - if (CreateProvisioningResource(gIsSecured) != OC_STACK_OK) + if(esState < ES_STATE_INIT || esState >= ES_STATE_EOF) { - OIC_LOG(ERROR, ES_ENROLLEE_TAG, "CreateProvisioningResource error"); + OIC_LOG_V(ERROR, ES_ENROLLEE_TAG, "Invalid ESEnrolleeState : %d", esState); return ES_ERROR; } - RegisterResourceEventCallBack(ProvisioningCallback); + if(SetEnrolleeState(esState) != OC_STACK_OK) + { + OIC_LOG(ERROR, ES_ENROLLEE_TAG, "ESSetState ES_ERROR"); + return ES_ERROR; + } - OIC_LOG(INFO, ES_ENROLLEE_TAG, "InitProvisioning OUT"); - return ES_RESOURCECREATED; + OIC_LOG_V(INFO, ES_ENROLLEE_TAG, "Set ESState succesfully : %d", esState); + OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESSetState OUT"); + return ES_OK; } -static bool ValidateParam(OCConnectivityType networkType, const char *ssid, const char *passwd, - EventCallback cb) +ESResult ESSetErrorCode(ESErrorCode esErrCode) { - if (!ssid || !passwd || !cb) + OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESSetErrorCode IN"); + + if(esErrCode < ES_ERRCODE_NO_ERROR || esErrCode > ES_ERRCODE_UNKNOWN) { - OIC_LOG(ERROR, ES_ENROLLEE_TAG, "ValidateParam - Invalid parameters"); - return false; + OIC_LOG_V(ERROR, ES_ENROLLEE_TAG, "Invalid ESSetErrorCode : %d", esErrCode); + return ES_ERROR; } - return true; + + if(SetEnrolleeErrCode(esErrCode) != OC_STACK_OK) + { + OIC_LOG(ERROR, ES_ENROLLEE_TAG, "ESSetErrorCode ES_ERROR"); + return ES_ERROR; + } + + OIC_LOG_V(INFO, ES_ENROLLEE_TAG, "Set ESErrorCode succesfully : %d", esErrCode); + OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESSetErrorCode OUT"); + return ES_OK; +} + +ESResult ESTerminateEnrollee() +{ + OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESTerminateEnrollee IN"); + + UnRegisterResourceEventCallBack(); + + //Delete Prov resource + if (DeleteEasySetupResources() != OC_STACK_OK) + { + OIC_LOG(ERROR, ES_ENROLLEE_TAG, "Deleting prov resource error!!"); + return ES_ERROR; + } + + OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESTerminateEnrollee success"); + return ES_OK; } +ESResult ESSetCallbackForUserdata(ESReadUserdataCb readCb, ESWriteUserdataCb writeCb) +{ + OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESSetCallbackForUserdata IN"); + + if(!readCb && !writeCb) + { + OIC_LOG(INFO, ES_ENROLLEE_TAG, "Both of callbacks for user data are null"); + return ES_ERROR; + } + + SetCallbackForUserData(readCb, writeCb); + OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESSetCallbackForUserdata OUT"); + return ES_OK; +}