X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=service%2Feasy-setup%2Fsampleapp%2Fmediator%2Flinux%2Frichsdk_sample%2Fmediator_cpp.cpp;h=144685dd09bd88c496addbf9ec6ab84a6ab02a4d;hb=6b5e9ff337264c38951bef39fd4980ab697f14ac;hp=ff41ecc09c8f1f7ec2d3bed4920ee693fca46f8b;hpb=c8e38ab66cbbb5dbbcd4aa7b702751fce5804338;p=platform%2Fupstream%2Fiotivity.git diff --git a/service/easy-setup/sampleapp/mediator/linux/richsdk_sample/mediator_cpp.cpp b/service/easy-setup/sampleapp/mediator/linux/richsdk_sample/mediator_cpp.cpp index ff41ecc..144685d 100755 --- a/service/easy-setup/sampleapp/mediator/linux/richsdk_sample/mediator_cpp.cpp +++ b/service/easy-setup/sampleapp/mediator/linux/richsdk_sample/mediator_cpp.cpp @@ -19,51 +19,44 @@ //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= #include -#include +#include -#include "oic_string.h" -#include "EasySetup.h" #include "OCPlatform.h" -#include "logger.h" +#include "OCApi.h" #include "OCProvisioningManager.h" +#include "EasySetup.h" +#include "ESRichCommon.h" #define ES_SAMPLE_APP_TAG "ES_SAMPLE_APP_TAG" #define DECLARE_MENU(FUNC, ...) { #FUNC, FUNC } -#define JSON_DB_PATH "./oic_svr_db_client.json" +#define JSON_DB_PATH "./oic_svr_db_client.dat" using namespace OC; using namespace OIC::Service; -static EasySetup *easySetupIntance = nullptr; -static ProvConfig netInfo; -static WiFiOnboadingConnection onboardingConn; -static RemoteEnrollee::shared_ptr remoteEnrollee = nullptr; +static std::shared_ptr remoteEnrollee = nullptr; +static std::shared_ptr curResource = nullptr; -static std::string ipaddress, ssid, pwd; - -struct CloseApp -{ -}; +static std::mutex g_discoverymtx; +static std::condition_variable g_cond; typedef void (*Runner)(); Runner g_currentRun; -int processUserInput(int min, int max) +int processUserInput(int min = std::numeric_limits::min(), + int max = std::numeric_limits::max()) { assert(min <= max); int input; std::cin >> input; + std::cin.ignore(std::numeric_limits::max(), '\n'); - if (!std::cin.fail()) - { - if(input == max + 1) throw CloseApp(); - if(min <= input && input <= max) return input; - } + if (!std::cin.fail() && min <= input && input <= max) return input; std::cin.clear(); std::cin.ignore(std::numeric_limits::max(), '\n'); @@ -71,84 +64,326 @@ int processUserInput(int min, int max) throw std::runtime_error("Invalid Input, please try again"); } -void easySetupStatusCallback (std::shared_ptr< EasySetupStatus > easySetupStatus) +void printConfiguration(EnrolleeConf conf) +{ + cout << "===========================================" << endl; + cout << "\tDevice Name : " << conf.getDeviceName() << endl; + cout << "\tModel Number : " << conf.getModelNumber() << endl; + + for(auto it : conf.getWiFiModes()) + { + cout << "\tSupported WiFi modes : " << it << endl; + } + + cout << "\tSupported WiFi freq : " << static_cast(conf.getWiFiFreq()) << endl; + cout << "\tCloud accessibility: " << conf.isCloudAccessible() << endl; + cout << "===========================================" << endl; +} + +void printStatus(EnrolleeStatus status) +{ + cout << "===========================================" << endl; + cout << "\tProvStatus : " << status.getProvStatus() << endl; + cout << "\tLastErrCode : " << status.getLastErrCode() << endl; + cout << "===========================================" << endl; +} + +void provisionSecurityStatusCallback(std::shared_ptr secProvisioningStatus) +{ + if(secProvisioningStatus->getESResult() != ES_OK) + { + cout << "provisionSecurity is failed." << endl; + return; + } + else + { + cout << "provisionSecurity is success." << endl; + cout << "uuid : " << secProvisioningStatus->getDeviceUUID()<< endl; + } +} + +void provisionSecurity() { - OIC_LOG_V(DEBUG, ES_SAMPLE_APP_TAG, "easySetupStatusCallback status is Status = %d", - easySetupStatus->getEasySetupState()); + if(!remoteEnrollee) + { + std::cout << "RemoteEnrollee is null, retry Discovery EnrolleeResource." << endl; + return; + } + try + { + remoteEnrollee->provisionSecurity(provisionSecurityStatusCallback); + } + catch (OCException &e) + { + std::cout << "Exception during provisionSecurity call" << e.reason(); + return; + } +} + +void getStatusCallback(std::shared_ptr< GetEnrolleeStatus > getEnrolleeStatus) +{ + if(getEnrolleeStatus->getESResult() != ES_OK) + { + cout << "getStatus is failed." << endl; + return; + } + else + { + cout << "getStatus is success." << endl; + printStatus(getEnrolleeStatus->getEnrolleeStatus()); + } +} + + +void getStatus() +{ + if(!remoteEnrollee) + { + std::cout << "RemoteEnrollee is null, retry Discovery EnrolleeResource." << endl; + return; + } + + try + { + remoteEnrollee->getStatus(getStatusCallback); + } + catch (OCException &e) + { + std::cout << "Exception during getConfiguration call" << e.reason(); + return; + } +} + +void getConfigurationCallback(std::shared_ptr< GetConfigurationStatus > getConfigurationStatus) +{ + if(getConfigurationStatus->getESResult() != ES_OK) + { + cout << "GetConfigurationStatus is failed." << endl; + return; + } + else + { + cout << "GetConfigurationStatus is success." << endl; + printConfiguration(getConfigurationStatus->getEnrolleeConf()); + } } -void startProvisioning() +void getConfiguration() { + if(!remoteEnrollee) + { + std::cout << "RemoteEnrollee is null, retry Discovery EnrolleeResource." << endl; + return; + } + try { - remoteEnrollee->startProvisioning(); + remoteEnrollee->getConfiguration(getConfigurationCallback); } - catch(OCException &exception) + catch (OCException &e) { - std::cout << "Exception : " << exception.reason(); + std::cout << "Exception during getConfiguration call" << e.reason(); + return; } } -void initEasySetup() +void deviceProvisioningStatusCallback(std::shared_ptr< DevicePropProvisioningStatus > provStatus) { + if(provStatus->getESResult() != ES_OK) + { + cout << "Device Provisioning is failed." << endl; + return; + } + else + { + cout << "Device Provisioning is success." << endl; + } +} - easySetupIntance = EasySetup::getInstance(); +void provisionDeviceProperty() +{ + if(!remoteEnrollee) + { + std::cout << "RemoteEnrollee is null, retry Discovery EnrolleeResource." << endl; + return; + } - ipaddress = "192.168.1.104"; - ssid = "hub2.4G"; - pwd = "22221111"; + DeviceProp devProp; + devProp.setWiFiProp("Iotivity_SSID", "Iotivity_PWD", WPA2_PSK, TKIP_AES); + devProp.setDevConfProp("korean", "Korea", "Location"); - netInfo.connType = CT_ADAPTER_IP; + try + { + remoteEnrollee->provisionDeviceProperties(devProp, deviceProvisioningStatusCallback); + } + catch (OCException &e) + { + std::cout << "Exception during provisionDeviceProperties call" << e.reason(); + return; + } +} - OICStrcpy(netInfo.provData.WIFI.ssid, NET_WIFI_SSID_SIZE - 1, ssid.c_str()); - OICStrcpy(netInfo.provData.WIFI.pwd, NET_WIFI_PWD_SIZE - 1, pwd.c_str()); +void cloudProvisioningStatusCallback(std::shared_ptr< CloudPropProvisioningStatus > provStatus) +{ + switch (provStatus->getESResult()) + { + case ES_OK: + cout << "Cloud Provisioning is success." << endl; + break; + case ES_SECURE_RESOURCE_DISCOVERY_FAILURE: + cout << "Enrollee is not found in a given network." << endl; + break; + case ES_ACL_PROVISIONING_FAILURE: + cout << "ACL provisioning is failed." << endl; + break; + case ES_CERT_PROVISIONING_FAILURE: + cout << "CERT provisioning is failed." << endl; + break; + default: + cout << "Cloud Provisioning is failed." << endl; + break; + } +} + +void provisionCloudProperty() +{ + if(!remoteEnrollee) + { + std::cout << "RemoteEnrollee is null, retry Discovery EnrolleeResource." << endl; + return; + } - onboardingConn.isSecured = false; - OICStrcpy(onboardingConn.ipAddress, IPV4_ADDR_SIZE - 1, ipaddress.c_str()); + CloudProp cloudProp; + cloudProp.setCloudProp("authCode", "authProvider", "ciServer"); + cloudProp.setCloudID("f002ae8b-c42c-40d3-8b8d-1927c17bd1b3"); + cloudProp.setCredID(1); try { - remoteEnrollee = easySetupIntance->createEnrolleeDevice(netInfo,onboardingConn); + remoteEnrollee->provisionCloudProperties(cloudProp, cloudProvisioningStatusCallback); } catch (OCException &e) { - std::cout << "Exception during createEnrolleeDevice call" << e.reason(); + std::cout << "Exception during provisionCloudProperties call" << e.reason(); return; } +} - remoteEnrollee->registerEasySetupStatusHandler(&easySetupStatusCallback); +// Callback to found resources +void foundResource(std::shared_ptr resource) +{ + std::string resourceURI; + std::string hostAddress; + try + { + // Do some operations with resource object. + if(resource && + !curResource && + resource->getResourceTypes().at(0) == OC_RSRVD_ES_RES_TYPE_PROV) + { + std::cout<<"DISCOVERED Resource:"<uri(); + std::cout << "\tURI of the resource: " << resourceURI << std::endl; + + // Get the resource host address + hostAddress = resource->host(); + std::cout << "\tHost address of the resource: " << hostAddress << std::endl; + + // Get the resource types + std::cout << "\tList of resource types: " << std::endl; + for(auto &resourceTypes : resource->getResourceTypes()) + { + std::cout << "\t\t" << resourceTypes << std::endl; + } + + // Get the resource interfaces + std::cout << "\tList of resource interfaces: " << std::endl; + for(auto &resourceInterfaces : resource->getResourceInterfaces()) + { + std::cout << "\t\t" << resourceInterfaces << std::endl; + } + + if(curResource == nullptr) + { + remoteEnrollee = EasySetup::getInstance()->createRemoteEnrollee(resource); + if(!remoteEnrollee) + { + std::cout << "RemoteEnrollee object is failed for some reasons!" << std::endl; + } + else + { + curResource = resource; + std::cout << "RemoteEnrollee object is successfully created!" << std::endl; + g_cond.notify_all(); + } + } + } + } + catch(std::exception& e) + { + std::cerr << "Exception in foundResource: "<< e.what() << std::endl; + } } -void runEasySetupMenu() + +void discoveryEnrolleeResource() { - constexpr int EASY_SETUP_INIT = 1; - constexpr int START_PROVISIONING = 2; - constexpr int STOP_PROVISIONING = 3; - constexpr int STOP_EASY_SETUP = 4; + try + { + std::ostringstream requestURI; + requestURI << OC_RSRVD_WELL_KNOWN_URI << "?rt=" << OC_RSRVD_ES_RES_TYPE_PROV; + OCPlatform::findResource("", requestURI.str(), CT_DEFAULT, &foundResource); + std::cout<< "Finding Resource... " < lck(g_discoverymtx); + g_cond.wait_for(lck, std::chrono::seconds(5)); + } + catch (OCException& e) + { + std::cout << "Exception in discoveryEnrolleeResource: "<