Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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;
        }
Exemplo n.º 3
0
        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");
                }
            }
        }
Exemplo n.º 4
0
        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);
        }