void CloudResource::onCloudProvResponse(const HeaderOptions& /*headerOptions*/, const OCRepresentation& /*rep*/, const int eCode) { OIC_LOG_V(DEBUG, ES_CLOUD_RES_TAG, "onCloudProvResponse : eCode = %d", eCode); if (eCode > OCStackResult::OC_STACK_RESOURCE_CHANGED) { ESResult result = ESResult::ES_ERROR; OIC_LOG(DEBUG, ES_CLOUD_RES_TAG,"onCloudProvResponse : onCloudProvResponse is failed "); if(eCode == OCStackResult::OC_STACK_COMM_ERROR) { OIC_LOG(DEBUG, ES_CLOUD_RES_TAG, "can't receive any response from Enrollee by a timeout threshold."); result = ESResult::ES_COMMUNICATION_ERROR; } std::shared_ptr< CloudPropProvisioningStatus > provStatus = std::make_shared< CloudPropProvisioningStatus >(result); m_cloudPropProvStatusCb(provStatus); } else { OIC_LOG(DEBUG, ES_CLOUD_RES_TAG,"onCloudProvResponse : onCloudProvResponse is success "); std::shared_ptr< CloudPropProvisioningStatus > provStatus = std::make_shared<CloudPropProvisioningStatus >(ESResult::ES_OK); m_cloudPropProvStatusCb(provStatus); } }
void RemoteEnrollee::cloudPropProvisioningStatusHandler ( const std::shared_ptr< CloudPropProvisioningStatus > status) const { OIC_LOG(DEBUG,ES_REMOTE_ENROLLEE_TAG,"Entering cloudPropProvisioningStatusHandler"); OIC_LOG_V(DEBUG,ES_REMOTE_ENROLLEE_TAG,"CloudProvStatus = %d", status->getESCloudState()); m_cloudPropProvStatusCb(status); return; }
void RemoteEnrollee::initCloudResource() { ESResult result = ES_ERROR; if (m_cloudResource != nullptr) { throw ESBadRequestException ("Already created"); } result = discoverResource(); if (result == ES_ERROR) { OIC_LOG(ERROR,ES_REMOTE_ENROLLEE_TAG, "Failed to create resource object using discoverResource"); throw ESBadRequestException ("Resource object not created"); } else { if(m_ocResource != nullptr) { m_cloudResource = std::make_shared<CloudResource>(m_ocResource); std::shared_ptr< CloudPropProvisioningStatus > provStatus = std::make_shared< CloudPropProvisioningStatus >(ESResult::ES_OK, ESCloudProvState::ES_CLOUD_ENROLLEE_FOUND); m_cloudPropProvStatusCb(provStatus); } else { throw ESBadGetException ("Resource handle is invalid"); } } }
void RemoteEnrollee::provisionCloudProperties(const CloudProp& cloudProp, const CloudPropProvStatusCb callback) { OIC_LOG(DEBUG,ES_REMOTE_ENROLLEE_TAG,"Enter provisionCloudProperties"); if(!callback) { throw ESInvalidParameterException("Callback is empty"); } m_cloudPropProvStatusCb = callback; if(cloudProp.getAuthCode().empty() || cloudProp.getAuthProvider().empty() || cloudProp.getCiServer().empty()) { throw ESBadRequestException ("Invalid Cloud Provisiong Info."); } try { initCloudResource(); } catch (const std::exception& e) { OIC_LOG_V(ERROR, ES_REMOTE_ENROLLEE_TAG, "Exception caught in provisionCloudProperties = %s", e.what()); std::shared_ptr< CloudPropProvisioningStatus > provStatus = std::make_shared< CloudPropProvisioningStatus >(ESResult::ES_ERROR, ESCloudProvState::ES_CLOUD_ENROLLEE_NOT_FOUND); m_cloudPropProvStatusCb(provStatus); return; } #ifdef __WITH_DTLS__ try { ESResult res = ES_OK; m_enrolleeSecurity = std::make_shared <EnrolleeSecurity> (m_ocResource, ""); if(cloudProp.getCloudID().empty()) { throw ESBadRequestException("Invalid Cloud Server UUID."); } res = m_enrolleeSecurity->performACLProvisioningForCloudServer(cloudProp.getCloudID()); if(res == ESResult::ES_ERROR) { throw ESBadRequestException("Error in provisioning operation!"); } } catch (const std::exception& e) { OIC_LOG_V(ERROR, ES_REMOTE_ENROLLEE_TAG, "Exception caught in provisionCloudProperties = %s", e.what()); m_cloudResource = nullptr; std::shared_ptr< CloudPropProvisioningStatus > provStatus = std::make_shared< CloudPropProvisioningStatus >(ESResult::ES_ERROR, ESCloudProvState::ES_CLOUD_PROVISIONING_ERROR); m_cloudPropProvStatusCb(provStatus); return; } #endif if (m_cloudResource == nullptr) { throw ESBadRequestException ("Cloud Resource not created"); } CloudPropProvStatusCb cloudPropProvStatusCb = std::bind( &RemoteEnrollee::cloudPropProvisioningStatusHandler, this, std::placeholders::_1); m_cloudResource->registerCloudPropProvisioningStatusCallback(cloudPropProvStatusCb); m_cloudResource->provisionEnrollee(cloudProp); }