X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=service%2Feasy-setup%2Fmediator%2Frichsdk%2Fsrc%2FEnrolleeResource.cpp;h=a1e35e9df2645785c93a71c7ebd295b0a3f220b1;hb=7f00f942c39b7bc27c7eeecf213a239c3fe4173c;hp=6ad843e048ca86cc374b0a81c9c89980f5aceae4;hpb=0a9584f9157485845c2b59b567e77b97e59f6c26;p=platform%2Fupstream%2Fiotivity.git diff --git a/service/easy-setup/mediator/richsdk/src/EnrolleeResource.cpp b/service/easy-setup/mediator/richsdk/src/EnrolleeResource.cpp index 6ad843e..a1e35e9 100755 --- a/service/easy-setup/mediator/richsdk/src/EnrolleeResource.cpp +++ b/service/easy-setup/mediator/richsdk/src/EnrolleeResource.cpp @@ -36,27 +36,54 @@ namespace OIC EnrolleeResource::EnrolleeResource(std::shared_ptr< OC::OCResource > resource) { m_ocResource = resource; + m_getStatusCb = nullptr; + m_getConfigurationStatusCb = nullptr; + m_devicePropProvStatusCb = nullptr; + m_connectRequestStatusCb = nullptr; } - void EnrolleeResource::checkProvInformationCb(const HeaderOptions& /*headerOptions*/, - const OCRepresentation& rep, const int eCode) + void EnrolleeResource::onEnrolleeResourceSafetyCB(const HeaderOptions& headerOptions, + const OCRepresentation& rep, + const int eCode, + ESEnrolleeResourceCb cb, + std::weak_ptr this_ptr) { - OIC_LOG_V (DEBUG, ES_REMOTE_ENROLLEE_RES_TAG, "checkProvInformationCb : %s, eCode = %d", - rep.getUri().c_str(), - eCode); + OIC_LOG(DEBUG, ES_REMOTE_ENROLLEE_RES_TAG, "onEnrolleeResourceSafetyCB"); + std::shared_ptr Ptr = this_ptr.lock(); + if(Ptr) + { + cb(headerOptions, rep, eCode); + } + } + + void EnrolleeResource::onProvisioningResponse(const HeaderOptions& /*headerOptions*/, + const OCRepresentation& /*rep*/, const int eCode) + { + OIC_LOG_V(DEBUG, ES_REMOTE_ENROLLEE_RES_TAG, "onProvisioningResponse : eCode = %d", + eCode); if (eCode > OCStackResult::OC_STACK_RESOURCE_CHANGED) { - OIC_LOG_V (DEBUG, ES_REMOTE_ENROLLEE_RES_TAG, - "checkProvInformationCb : Provisioning is failed "); + ESResult result = ESResult::ES_ERROR; + + OIC_LOG(ERROR, ES_REMOTE_ENROLLEE_RES_TAG, + "onProvisioningResponse : Provisioning is failed "); + + if(eCode == OCStackResult::OC_STACK_COMM_ERROR) + { + OIC_LOG(ERROR, ES_REMOTE_ENROLLEE_RES_TAG, + "can't receive any response from Enrollee by a timeout threshold."); + result = ESResult::ES_COMMUNICATION_ERROR; + } + std::shared_ptr< DevicePropProvisioningStatus > provStatus = std::make_shared< - DevicePropProvisioningStatus >(ESResult::ES_ERROR); + DevicePropProvisioningStatus >(result); m_devicePropProvStatusCb(provStatus); return; } - OIC_LOG_V (DEBUG, ES_REMOTE_ENROLLEE_RES_TAG, - "checkProvInformationCb : Provisioning is success. "); + OIC_LOG(DEBUG, ES_REMOTE_ENROLLEE_RES_TAG, + "onProvisioningResponse : Provisioning is success. "); std::shared_ptr< DevicePropProvisioningStatus > provStatus = std::make_shared< DevicePropProvisioningStatus >(ESResult::ES_OK); @@ -66,21 +93,21 @@ namespace OIC void EnrolleeResource::onGetStatusResponse(const HeaderOptions& /*headerOptions*/, const OCRepresentation& rep, const int eCode) { - OIC_LOG_V (DEBUG, ES_REMOTE_ENROLLEE_RES_TAG, "onGetStatusResponse : %s, eCode = %d", - rep.getUri().c_str(), eCode); + OIC_LOG_V(DEBUG, ES_REMOTE_ENROLLEE_RES_TAG, "onGetStatusResponse : eCode = %d", + eCode); if (eCode > OCStackResult::OC_STACK_RESOURCE_CHANGED) { ESResult result = ESResult::ES_ERROR; - OIC_LOG_V (DEBUG, ES_REMOTE_ENROLLEE_RES_TAG, + OIC_LOG(ERROR, ES_REMOTE_ENROLLEE_RES_TAG, "onGetStatusResponse : onGetStatusResponse is failed "); - if (eCode == OCStackResult::OC_STACK_UNAUTHORIZED_REQ) + if(eCode == OCStackResult::OC_STACK_COMM_ERROR) { - OIC_LOG_V (DEBUG, ES_REMOTE_ENROLLEE_RES_TAG, - "Mediator is unauthorized from Enrollee."); - result = ESResult::ES_UNAUTHORIZED; + OIC_LOG(ERROR, ES_REMOTE_ENROLLEE_RES_TAG, + "can't receive any response from Enrollee by a timeout threshold."); + result = ESResult::ES_COMMUNICATION_ERROR; } EnrolleeStatus enrolleeStatus(rep); @@ -102,21 +129,21 @@ namespace OIC void EnrolleeResource::onGetConfigurationResponse(const HeaderOptions& /*headerOptions*/, const OCRepresentation& rep, const int eCode) { - OIC_LOG_V (DEBUG, ES_REMOTE_ENROLLEE_RES_TAG, "onGetConfigurationResponse : %s, eCode = %d", - rep.getUri().c_str(), eCode); + OIC_LOG_V(DEBUG, ES_REMOTE_ENROLLEE_RES_TAG, "onGetConfigurationResponse : eCode = %d", + eCode); if (eCode > OCStackResult::OC_STACK_RESOURCE_CHANGED) { - ESResult result = ESResult::ES_ERROR; + ESResult result = ESResult::ES_ERROR; - OIC_LOG_V (DEBUG, ES_REMOTE_ENROLLEE_RES_TAG, + OIC_LOG(ERROR, ES_REMOTE_ENROLLEE_RES_TAG, "onGetConfigurationResponse : onGetConfigurationResponse is failed "); - if (eCode == OCStackResult::OC_STACK_UNAUTHORIZED_REQ) + if(eCode == OCStackResult::OC_STACK_COMM_ERROR) { - OIC_LOG_V (DEBUG, ES_REMOTE_ENROLLEE_RES_TAG, - "Mediator is unauthorized from Enrollee."); - result = ESResult::ES_UNAUTHORIZED; + OIC_LOG(ERROR, ES_REMOTE_ENROLLEE_RES_TAG, + "can't receive any response from Enrollee by a timeout threshold."); + result = ESResult::ES_COMMUNICATION_ERROR; } EnrolleeConf enrolleeConf(rep); @@ -134,6 +161,41 @@ namespace OIC } } + void EnrolleeResource::onConnectRequestResponse(const HeaderOptions& /*headerOptions*/, + const OCRepresentation& /*rep*/, const int eCode) + { + OIC_LOG_V (DEBUG, ES_REMOTE_ENROLLEE_RES_TAG, "onConnectRequestResponse : eCode = %d", + eCode); + + if (eCode > OCStackResult::OC_STACK_RESOURCE_CHANGED) + { + ESResult result = ESResult::ES_ERROR; + + OIC_LOG_V (DEBUG, ES_REMOTE_ENROLLEE_RES_TAG, + "onConnectRequestResponse : onConnectRequestResponse is failed "); + + if(eCode == OCStackResult::OC_STACK_COMM_ERROR) + { + OIC_LOG_V (DEBUG, ES_REMOTE_ENROLLEE_RES_TAG, + "can't receive any response from Enrollee by a timeout threshold."); + result = ESResult::ES_COMMUNICATION_ERROR; + } + + std::shared_ptr< ConnectRequestStatus > connectRequestStatus = std::make_shared< + ConnectRequestStatus >(result); + m_connectRequestStatusCb(connectRequestStatus); + return; + } + + OIC_LOG_V (DEBUG, ES_REMOTE_ENROLLEE_RES_TAG, + "onConnectRequestResponse : Provisioning is success. "); + + std::shared_ptr< ConnectRequestStatus > connectRequestStatus = std::make_shared< + ConnectRequestStatus >(ESResult::ES_OK); + m_connectRequestStatusCb(connectRequestStatus); + } + + void EnrolleeResource::registerGetStatusCallback( const GetStatusCb callback) { @@ -152,8 +214,16 @@ namespace OIC m_devicePropProvStatusCb = callback; } + void EnrolleeResource::registerConnectRequestStatusCallback( + const ConnectRequestStatusCb callback) + { + m_connectRequestStatusCb = callback; + } + void EnrolleeResource::getStatus() { + OIC_LOG(DEBUG, ES_REMOTE_ENROLLEE_RES_TAG, "getStatus IN"); + if (m_ocResource == nullptr) { throw ESBadRequestException("Resource is not initialized"); @@ -164,12 +234,15 @@ namespace OIC std::function< OCStackResult(void) > getStatus = [&] { - return m_ocResource->get(m_ocResource->getResourceTypes().at(0), - DEFAULT_INTERFACE, query, std::function( + ESEnrolleeResourceCb cb = std::bind(&EnrolleeResource::onEnrolleeResourceSafetyCB, + std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, + static_cast( std::bind(&EnrolleeResource::onGetStatusResponse, this, - std::placeholders::_1, std::placeholders::_2, - std::placeholders::_3))); + std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)), + shared_from_this()); + + return m_ocResource->get(m_ocResource->getResourceTypes().at(0), + DEFAULT_INTERFACE, query, cb, OC::QualityOfService::HighQos); }; OCStackResult result = getStatus(); @@ -184,10 +257,13 @@ namespace OIC return; } + OIC_LOG(DEBUG, ES_REMOTE_ENROLLEE_RES_TAG, "getStatus OUT"); } void EnrolleeResource::getConfiguration() { + OIC_LOG(DEBUG, ES_REMOTE_ENROLLEE_RES_TAG, "getConfiguration IN"); + if (m_ocResource == nullptr) { throw ESBadRequestException("Resource is not initialized"); @@ -198,12 +274,15 @@ namespace OIC std::function< OCStackResult(void) > getConfigurationStatus = [&] { - return m_ocResource->get(m_ocResource->getResourceTypes().at(0), - BATCH_INTERFACE, query, std::function( + ESEnrolleeResourceCb cb = std::bind(&EnrolleeResource::onEnrolleeResourceSafetyCB, + std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, + static_cast( std::bind(&EnrolleeResource::onGetConfigurationResponse, this, - std::placeholders::_1, std::placeholders::_2, - std::placeholders::_3))); + std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)), + shared_from_this()); + + return m_ocResource->get(m_ocResource->getResourceTypes().at(0), + BATCH_INTERFACE, query, cb, OC::QualityOfService::HighQos); }; OCStackResult result = getConfigurationStatus(); @@ -216,10 +295,13 @@ namespace OIC m_getConfigurationStatusCb(getConfigurationStatus); return; } + + OIC_LOG(DEBUG, ES_REMOTE_ENROLLEE_RES_TAG, "getConfiguration OUT"); } - void EnrolleeResource::provisionEnrollee(const DeviceProp& deviceProp) + void EnrolleeResource::provisionProperties(const DeviceProp& deviceProp) { + OIC_LOG(DEBUG, ES_REMOTE_ENROLLEE_RES_TAG, "provisionProperties IN"); if (m_ocResource == nullptr) { throw ESBadRequestException("Resource is not initialized"); @@ -228,14 +310,50 @@ namespace OIC OC::QueryParamsMap query; OC::OCRepresentation provisioningRepresentation = deviceProp.toOCRepresentation(); - m_ocResource->post(OC_RSRVD_ES_RES_TYPE_PROV, BATCH_INTERFACE, - provisioningRepresentation, QueryParamsMap(), - std::function< - void(const HeaderOptions& headerOptions, - const OCRepresentation& rep, const int eCode) >( - std::bind(&EnrolleeResource::checkProvInformationCb, this, - std::placeholders::_1, std::placeholders::_2, - std::placeholders::_3))); + ESEnrolleeResourceCb cb = std::bind(&EnrolleeResource::onEnrolleeResourceSafetyCB, + std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, + static_cast( + std::bind(&EnrolleeResource::onProvisioningResponse, this, + std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)), + shared_from_this()); + + m_ocResource->post(OC_RSRVD_ES_RES_TYPE_EASYSETUP, BATCH_INTERFACE, + provisioningRepresentation, QueryParamsMap(), cb, OC::QualityOfService::HighQos); + + OIC_LOG(DEBUG, ES_REMOTE_ENROLLEE_RES_TAG, "provisionProperties OUT"); + } + + void EnrolleeResource::requestToConnect(const std::vector &connectTypes) + { + OIC_LOG (DEBUG, ES_REMOTE_ENROLLEE_RES_TAG, "requestToConnect IN"); + if (m_ocResource == nullptr) + { + throw ESBadRequestException("Resource is not initialized"); + } + + OC::QueryParamsMap query; + OC::OCRepresentation requestRepresentation; + std::vector connectTypes_int; + connectTypes_int.clear(); + + for(auto it : connectTypes) + { + connectTypes_int.push_back(static_cast(it)); + } + + requestRepresentation.setValue>(OC_RSRVD_ES_CONNECT, connectTypes_int); + + ESEnrolleeResourceCb cb = std::bind(&EnrolleeResource::onEnrolleeResourceSafetyCB, + std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, + static_cast( + std::bind(&EnrolleeResource::onConnectRequestResponse, this, + std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)), + shared_from_this()); + + m_ocResource->post(OC_RSRVD_ES_RES_TYPE_EASYSETUP, OC_RSRVD_INTERFACE_DEFAULT, + requestRepresentation, QueryParamsMap(), cb, OC::QualityOfService::HighQos); + + OIC_LOG (DEBUG, ES_REMOTE_ENROLLEE_RES_TAG, "requestToConnect OUT"); } } }