#include "OCPlatform.h"
#include "OCApi.h"
#include "OCProvisioningManager.hpp"
+#include "securevirtualresourcetypes.h"
#include "EasySetup.hpp"
#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.dat"
+#define JSON_DB_PATH "./oic_svr_db_subclient.dat"
using namespace OC;
using namespace OIC::Service;
{
assert(min <= max);
- int input;
+ int input = 0;
std::cin >> input;
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
- if (!std::cin.fail() && 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<std::streamsize>::max(), '\n');
throw std::runtime_error("Invalid Input, please try again");
}
-void printConfiguration(EnrolleeConf conf)
+void printConfiguration(const EnrolleeConf& conf)
{
cout << "===========================================" << endl;
cout << "\tDevice Name : " << conf.getDeviceName() << endl;
- cout << "\tModel Number : " << conf.getModelNumber() << endl;
for(auto it : conf.getWiFiModes())
{
cout << "===========================================" << endl;
}
-void printStatus(EnrolleeStatus status)
+void printStatus(const EnrolleeStatus& status)
{
cout << "===========================================" << endl;
cout << "\tProvStatus : " << status.getProvStatus() << endl;
cout << "===========================================" << endl;
}
-void provisionSecurityStatusCallback(std::shared_ptr<SecProvisioningStatus> secProvisioningStatus)
+ESOwnershipTransferData provisionSecurityStatusCallback(std::shared_ptr<SecProvisioningStatus> secProvisioningStatus)
{
- if(secProvisioningStatus->getESResult() != ES_OK)
+ cout << "provisionSecurityStatusCallback IN" << endl;
+ cout << "ESResult : " << secProvisioningStatus->getESResult() << std::endl;
+ cout << "Device ID : " << secProvisioningStatus->getDeviceUUID() << std::endl;
+
+ if(secProvisioningStatus->getESResult() == ES_SECURE_RESOURCE_IS_DISCOVERED)
{
- cout << "provisionSecurity is failed." << endl;
- return;
+#ifdef __WITH_DTLS__
+ cout << "Owned Status : " << secProvisioningStatus->isOwnedDevice() << std::endl;
+ cout << "OT Method : " << secProvisioningStatus->getSelectedOTMethod() << std::endl;
+#ifdef MULTIPLE_OWNER
+ cout << "MOT Enabled : " << secProvisioningStatus->isMOTEnabled() << std::endl;
+
+ // TEST
+ ESOwnershipTransferData OTData;
+ OTData.setMOTMethod(OIC_PRECONFIG_PIN, "12345678");
+
+ cout << "Enter!" << std::endl;
+ getchar();
+
+ return OTData;
+#endif
+#endif
+
+ }
+ else if(secProvisioningStatus->getESResult() == ES_OK)
+ {
+ cout << "provisionSecurity is success." << std::endl;
}
else
{
- cout << "provisionSecurity is success." << endl;
- cout << "uuid : " << secProvisioningStatus->getDeviceUUID()<< endl;
+ cout << "provisionSecurity is failed." << endl;
}
+
+ return {};
}
void provisionSecurity()
try
{
- remoteEnrollee->provisionSecurity(provisionSecurityStatusCallback);
+ remoteEnrollee->provisionSecurity((SecurityProvStatusCbWithOption)provisionSecurityStatusCallback);
}
catch (OCException &e)
{
DeviceProp devProp;
devProp.setWiFiProp("Iotivity_SSID", "Iotivity_PWD", WPA2_PSK, TKIP_AES);
- devProp.setDevConfProp("korean", "Korea", "Location");
try
{
}
}
+void connectRequestStatusCallback(std::shared_ptr< ConnectRequestStatus > requestStatus)
+{
+ if(requestStatus->getESResult() != ES_OK)
+ {
+ cout << "Request to connection is failed." << endl;
+ return;
+ }
+ else
+ {
+ cout << "Request to connection is success." << endl;
+ }
+}
+
+void requestToConnect()
+{
+ if(!remoteEnrollee)
+ {
+ std::cout << "RemoteEnrollee is null, retry Discovery EnrolleeResource." << endl;
+ return;
+ }
+
+ try
+ {
+ std::vector<ES_CONNECT_TYPE> types;
+ types.push_back(ES_CONNECT_WIFI);
+ types.push_back(ES_CONNECT_COAPCLOUD);
+ remoteEnrollee->requestToConnect(types, connectRequestStatusCallback);
+ }
+ catch (OCException &e)
+ {
+ std::cout << "Exception during provisionDeviceProperties call" << e.reason();
+ return;
+ }
+}
+
void cloudProvisioningStatusCallback(std::shared_ptr< CloudPropProvisioningStatus > provStatus)
{
switch (provStatus->getESResult())
// Do some operations with resource object.
if(resource &&
!curResource &&
- resource->getResourceTypes().at(0) == OC_RSRVD_ES_RES_TYPE_PROV)
+ resource->getResourceTypes().at(0) == OC_RSRVD_ES_RES_TYPE_EASYSETUP)
{
std::cout<<"DISCOVERED Resource:"<<std::endl;
// Get the resource URI
void discoveryEnrolleeResource()
{
- try
- {
- std::ostringstream requestURI;
- requestURI << OC_RSRVD_WELL_KNOWN_URI << "?rt=" << OC_RSRVD_ES_RES_TYPE_PROV;
+ try
+ {
+ std::ostringstream requestURI;
+ requestURI << OC_RSRVD_WELL_KNOWN_URI << "?rt=" << OC_RSRVD_ES_RES_TYPE_EASYSETUP;
OCPlatform::findResource("", requestURI.str(), CT_DEFAULT, &foundResource);
std::cout<< "Finding Resource... " <<std::endl;
std::unique_lock<std::mutex> lck(g_discoverymtx);
g_cond.wait_for(lck, std::chrono::seconds(5));
- }
- catch (OCException& e)
- {
- std::cout << "Exception in discoveryEnrolleeResource: "<<e.what();
- }
+ }
+ catch (OCException& e)
+ {
+ std::cout << "Exception in discoveryEnrolleeResource: "<<e.what();
+ }
}
void DisplayMenu()
{
- constexpr int DISCOVERY_ENROLLEE = 1;
+ constexpr int DISCOVERY_ENROLLEE = 1;
constexpr int PROVISION_SECURITY = 2;
constexpr int GET_STATUS = 3;
constexpr int GET_CONFIGURATION = 4;
constexpr int PROVISION_DEVICE_PROPERTY = 5;
- constexpr int PROVISION_CLOUD_PROPERTY = 6;
+ constexpr int REQUEST_TO_CONNECT = 6;
+ constexpr int PROVISION_CLOUD_PROPERTY = 7;
std::cout << "========================================================\n";
std::cout << DISCOVERY_ENROLLEE << ". Discovery Enrollee Resource \n";
std::cout << GET_STATUS << ". Get Status from Enrollee \n";
std::cout << GET_CONFIGURATION << ". Get Configuration from Enrollee \n";
std::cout << PROVISION_DEVICE_PROPERTY << ". Provision Device Property\n";
+ std::cout << REQUEST_TO_CONNECT << ". Request to Connect \n";
std::cout << PROVISION_CLOUD_PROPERTY << ". Provision Cloud Property \n";
std::cout << "========================================================\n";
case PROVISION_DEVICE_PROPERTY:
provisionDeviceProperty();
break;
+ case REQUEST_TO_CONNECT:
+ requestToConnect();
+ break;
case PROVISION_CLOUD_PROPERTY:
provisionCloudProperty();
break;
{
#ifdef __WITH_DTLS__
//Initializing the provisioning client stack using the db path provided by the application.
- OCStackResult result = OCSecure::provisionInit("");
+ OCStackResult result = OCSecure::provisionInit("PDM_sub.db");
if (result != OC_STACK_OK)
{
return -1;
}
#endif
- }catch(OCException& e)
+ }catch (...)
{
- std::cout << "Exception in main: "<<e.what();
+ std::cout << "Exception in main: " << std::endl;
}
while (true)
{
DisplayMenu();
}
- catch (const std::exception& e)
+ catch (...)
{
- std::cout << "Exception caught in main " << e.what() << std::endl;
+ std::cout << "Exception caught in main " << std::endl;
}
}