X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=service%2Feasy-setup%2Fmediator%2Frichsdk%2Finc%2FESRichCommon.h;h=48584d155bbf8e10ed3baf8ef99c70e910576864;hb=refs%2Ftags%2Fsubmit%2Ftizen_4.0%2F20171010.021147;hp=41fc10cacacaf8e95d4ed595341c00da03326798;hpb=edcfc3d2329da7b914771c0dcff5f42c9b74fd93;p=platform%2Fupstream%2Fiotivity.git diff --git a/service/easy-setup/mediator/richsdk/inc/ESRichCommon.h b/service/easy-setup/mediator/richsdk/inc/ESRichCommon.h index 41fc10c..48584d1 100755 --- a/service/easy-setup/mediator/richsdk/inc/ESRichCommon.h +++ b/service/easy-setup/mediator/richsdk/inc/ESRichCommon.h @@ -31,6 +31,11 @@ #include "OCPlatform.h" #include "ocstack.h" #include "octypes.h" +#ifdef __WITH_DTLS__ +#include "securevirtualresourcetypes.h" +#include "OCProvisioningManager.hpp" +#include "ocrandom.h" +#endif #include "escommon.h" @@ -43,7 +48,7 @@ namespace OIC namespace Service { /** - * @brief Properties of provisioning resource. It includes a provisioning status and last + * @brief Properties of easysetup resource. It includes a provisioning status and last * error code. */ class EnrolleeStatus @@ -73,7 +78,7 @@ namespace OIC * * @return a provisioning status property of Enrollee */ - ProvStatus getProvStatus() + ProvStatus getProvStatus() const { if(m_rep.hasAttribute(OC_RSRVD_ES_PROVSTATUS)) { @@ -88,7 +93,7 @@ namespace OIC * * @return a last error code property of Enrollee. */ - ESErrorCode getLastErrCode() + ESErrorCode getLastErrCode() const { if(m_rep.hasAttribute(OC_RSRVD_ES_LAST_ERRORCODE)) { @@ -112,7 +117,7 @@ namespace OIC }; /** - * @brief Data class stored for Cloud server property provisioning + * @brief Data class stored for provisioning of coap cloud server properties */ class CloudProp { @@ -152,7 +157,7 @@ namespace OIC } /** - * Set CloudServer resource properties to be delivered to Enrollee + * Set CoapCloudConf resource properties to be delivered to Enrollee * * @param authCode Auth code issued by OAuth2.0-compatible account server * @param authProvider Auth provider ID @@ -166,6 +171,26 @@ namespace OIC } /** + * Set CoapCloudConf resource properties with Access token to be delivered to Enrollee + * + * @param accessToken Access token which is given in a return of auth code issued by + * OAuth2.0-compatible account server + * @param tokenType Access token type, i.e. "bearer" + * @param authProvider Auth provider ID + * @param ciServer Cloud interface server URL which an Enrollee is going to registered + * + * @see OAUTH_TOKENTYPE + */ + void setCloudPropWithAccessToken(string accessToken, OAUTH_TOKENTYPE tokenType, + string authProvider, string ciServer) + { + m_rep.setValue(OC_RSRVD_ES_ACCESSTOKEN, accessToken); + m_rep.setValue(OC_RSRVD_ES_ACCESSTOKEN_TYPE, tokenType); + m_rep.setValue(OC_RSRVD_ES_AUTHPROVIDER, authProvider); + m_rep.setValue(OC_RSRVD_ES_CISERVER, ciServer); + } + + /** * Set CloudServer's UUID * * @param cloudID Cloud Interface server's UUID @@ -248,6 +273,36 @@ namespace OIC } /** + * Get an access token to be delivered. + * + * @return an access token to be delivered. + */ + std::string getAccessToken() const + { + if(m_rep.hasAttribute(OC_RSRVD_ES_ACCESSTOKEN)) + { + return m_rep.getValue(OC_RSRVD_ES_ACCESSTOKEN); + } + return std::string(""); + } + + /** + * Get an access token type to be delivered. + * + * @return an access token type to be delivered. + */ + OAUTH_TOKENTYPE getAccessTokenType() const + { + + if(m_rep.hasAttribute(OC_RSRVD_ES_ACCESSTOKEN_TYPE)) + { + return static_cast( + m_rep.getValue(OC_RSRVD_ES_ACCESSTOKEN_TYPE)); + } + return NONE_OAUTH_TOKENTYPE; + } + + /** * Get OCRepresentation object * * @return OCRepresentation object @@ -263,8 +318,8 @@ namespace OIC }; /** - * @brief Data class stored for Device property provisioning which includes a WiFi - * and device configuration provisioning + * @brief Data class stored for provisioning of Device properties which includes + * properties of WiFiConf resource and DevConf resource */ class DeviceProp { @@ -296,7 +351,7 @@ namespace OIC } /** - * Set WiFi resource properties to be delivered to Enrollee + * Set WiFiConf resource properties to be delivered to Enrollee * * @param ssid Ssid of the Enroller * @param pwd Pwd of the Enrolle @@ -315,19 +370,6 @@ namespace OIC } /** - * Set DevConf resource properties to be delivered to Enrollee - * - * @param language IETF language tag using ISO 639X - * @param country ISO Country Code (ISO 3166-1 Alpha-2) - */ - void setDevConfProp(string language, string country, string location) - { - m_rep.setValue(OC_RSRVD_ES_LANGUAGE, language); - m_rep.setValue(OC_RSRVD_ES_COUNTRY, country); - m_rep.setValue(OC_RSRVD_ES_LOCATION, location); - } - - /** * Get a SSID of Enroller * * @return a SSID of enroller @@ -388,50 +430,6 @@ namespace OIC } /** - * Get a language to be set. A language is expressed in IETF language tag - * using ISO 639X. - * - * @return a language to be set - */ - std::string getLanguage() const - { - if(m_rep.hasAttribute(OC_RSRVD_ES_LANGUAGE)) - { - return m_rep.getValue(OC_RSRVD_ES_LANGUAGE); - } - return std::string(""); - } - - /** - * Get a country to be set. A country is expressed in ISO Country Code - * (ISO 3166-1 Alpha-2) - * - * @return a country to be set - */ - std::string getCountry() const - { - if(m_rep.hasAttribute(OC_RSRVD_ES_COUNTRY)) - { - return m_rep.getValue(OC_RSRVD_ES_COUNTRY); - } - return std::string(""); - } - - /** - * Get a location to be set. A location is GPS information - * - * @return a country to be set - */ - std::string getLocation() const - { - if(m_rep.hasAttribute(OC_RSRVD_ES_LOCATION)) - { - return m_rep.getValue(OC_RSRVD_ES_LOCATION); - } - return std::string(""); - } - - /** * Get OCRepresentation object * * @return OCRepresentation object @@ -454,13 +452,70 @@ namespace OIC SecProvisioningStatus(string deviceUUID, ESResult result) : m_devUUID(deviceUUID), m_result(result) { +#ifdef __WITH_DTLS__ + m_selectedOTMethod = OIC_JUST_WORKS; + m_isMOTEnabled = false; + m_isOwned = false; + m_ownerID = {}; +#endif + } +#ifdef __WITH_DTLS__ + SecProvisioningStatus(std::shared_ptr resource, ESResult result) : + m_result(result) + { + m_isMOTEnabled = false; + if(resource.get() != nullptr) + { + m_devUUID = resource->getDeviceID(); + m_isOwned = resource->getOwnedStatus(); +#ifdef MULTIPLE_OWNER + m_isMOTEnabled = resource->isMOTEnabled(); +#endif + + if( OC_STACK_OK != resource->getOTMethod(&m_selectedOTMethod) ) + { + m_selectedOTMethod = OIC_OXM_COUNT; // Out-of-range + } + + if(resource->getOwnedStatus()) + { + char uuidString[UUID_STRING_SIZE] = {}; + if(RAND_UUID_OK == OCConvertUuidToString(resource->getDevPtr()->doxm->owner.id, uuidString)) + { + m_ownerID = uuidString; + } + else + { + m_ownerID = {}; + } + } + } + } + + OicSecOxm_t getSelectedOTMethod() const + { + return m_selectedOTMethod; } - const string getDeviceUUID() + bool isMOTEnabled() const { - return m_devUUID; + return m_isMOTEnabled; } + bool isOwnedDevice() const + { + return m_isOwned; + } + + const std::string getOwnerID() + { + return m_ownerID; + } +#endif + const std::string getDeviceUUID() + { + return m_devUUID; + } /** * Get a result for about security provisioning is success or not. * @@ -477,6 +532,12 @@ namespace OIC private: string m_devUUID; ESResult m_result; +#ifdef __WITH_DTLS__ + OicSecOxm_t m_selectedOTMethod; + bool m_isMOTEnabled; + bool m_isOwned; + std::string m_ownerID; +#endif }; /** @@ -491,21 +552,21 @@ namespace OIC /** * Constructor * The expected OCRepresentation is one for collection resource and has several child - * OCRepresentation object corresponding to WiFi, DevConf, and CloudServer resource's - * representation. + * OCRepresentation object corresponding to WiFiConf, DevConf, and CoapCloudConf + * resources' representations. */ EnrolleeConf(const OCRepresentation& rep) : - m_ProvRep(rep) + m_EasySetupRep(rep) { } EnrolleeConf(const EnrolleeConf& enrolleeConf) : - m_ProvRep(enrolleeConf.getProvResRep()) + m_EasySetupRep(enrolleeConf.getEasySetupRep()) { } EnrolleeConf(const EnrolleeConf&& enrolleeConf) : - m_ProvRep(std::move(enrolleeConf.getProvResRep())) + m_EasySetupRep(std::move(enrolleeConf.getEasySetupRep())) { } @@ -517,7 +578,7 @@ namespace OIC */ std::string getDeviceName() const { - std::vector children = m_ProvRep.getChildren(); + std::vector children = m_EasySetupRep.getChildren(); for(auto child = children.begin(); child != children.end(); ++child) { if(child->getUri().find(OC_RSRVD_ES_URI_DEVCONF) != std::string::npos) @@ -542,37 +603,6 @@ namespace OIC } /** - * Get a model number of Enrollee. - * - * @return a model number of Enrollee - */ - std::string getModelNumber() const - { - std::vector children = m_ProvRep.getChildren(); - for(auto child = children.begin(); child != children.end(); ++child) - { - if(child->getUri().find(OC_RSRVD_ES_URI_DEVCONF) != std::string::npos) - { - OCRepresentation rep; - if(child->hasAttribute(OC_RSRVD_REPRESENTATION)) - { - rep = child->getValue(OC_RSRVD_REPRESENTATION); - } - else - { - return std::string(""); - } - - if(rep.hasAttribute(OC_RSRVD_ES_MODELNUMBER)) - { - return rep.getValue(OC_RSRVD_ES_MODELNUMBER); - } - } - } - return std::string(""); - } - - /** * Get a set of WiFi supported modes of Enrollee * * @return a set of WiFi supported modes of Enrollee @@ -584,10 +614,10 @@ namespace OIC vector modes; modes.clear(); - std::vector children = m_ProvRep.getChildren(); + std::vector children = m_EasySetupRep.getChildren(); for(auto child = children.begin(); child != children.end(); ++child) { - if(child->getUri().find(OC_RSRVD_ES_URI_WIFI) != std::string::npos) + if(child->getUri().find(OC_RSRVD_ES_URI_WIFICONF) != std::string::npos) { OCRepresentation rep; if(child->hasAttribute(OC_RSRVD_REPRESENTATION)) @@ -621,10 +651,10 @@ namespace OIC */ WIFI_FREQ getWiFiFreq() const { - std::vector children = m_ProvRep.getChildren(); + std::vector children = m_EasySetupRep.getChildren(); for(auto child = children.begin(); child != children.end(); ++child) { - if(child->getUri().find(OC_RSRVD_ES_URI_WIFI) != std::string::npos) + if(child->getUri().find(OC_RSRVD_ES_URI_WIFICONF) != std::string::npos) { OCRepresentation rep; if(child->hasAttribute(OC_RSRVD_REPRESENTATION)) @@ -647,18 +677,68 @@ namespace OIC } /** + * Get a provisioning status property of Enrollee. + * + * @return a provisioning status property of Enrollee + */ + ProvStatus getProvStatus() const + { + OCRepresentation rep; + if(m_EasySetupRep.hasAttribute(OC_RSRVD_REPRESENTATION)) + { + rep = m_EasySetupRep.getValue(OC_RSRVD_REPRESENTATION); + } + else + { + return ES_STATE_INIT; + } + + if(rep.hasAttribute(OC_RSRVD_ES_PROVSTATUS)) + { + return static_cast( + rep.getValue(OC_RSRVD_ES_PROVSTATUS)); + } + return ES_STATE_INIT; + } + + /** + * Get a last error code property of Enrollee. + * + * @return a last error code property of Enrollee. + */ + ESErrorCode getLastErrCode() const + { + OCRepresentation rep; + if(m_EasySetupRep.hasAttribute(OC_RSRVD_REPRESENTATION)) + { + rep = m_EasySetupRep.getValue(OC_RSRVD_REPRESENTATION); + } + else + { + return ES_ERRCODE_NO_ERROR; + } + + if(rep.hasAttribute(OC_RSRVD_ES_LAST_ERRORCODE)) + { + return static_cast( + rep.getValue(OC_RSRVD_ES_LAST_ERRORCODE)); + } + return ES_ERRCODE_NO_ERROR; + } + + /** * Get an accessibility to cloud server of an Enrollee * * @return an accessibility to cloud server of an Enrollee */ bool isCloudAccessible() const { - std::vector children = m_ProvRep.getChildren(); + std::vector children = m_EasySetupRep.getChildren(); for(auto child = children.begin(); child != children.end(); ++child) { for(auto rt : child->getResourceTypes()) { - if(0 == rt.compare(OC_RSRVD_ES_RES_TYPE_CLOUDSERVER)) + if(0 == rt.compare(OC_RSRVD_ES_RES_TYPE_COAPCLOUDCONF)) { return true; } @@ -672,13 +752,13 @@ namespace OIC * * @return OCRepresentation object */ - const OCRepresentation& getProvResRep() const + const OCRepresentation& getEasySetupRep() const { - return m_ProvRep; + return m_EasySetupRep; } protected: - OCRepresentation m_ProvRep; + OCRepresentation m_EasySetupRep; }; /** @@ -855,6 +935,106 @@ namespace OIC }; /** + * Status object for connect API. This object is given to application + * when a response for 'Connect' request from Enrollee is arrived. + */ + class ConnectRequestStatus + { + public: + /** + * Constructor + */ + ConnectRequestStatus(ESResult result) : + m_result(result) + { + } + + /** + * Get a result of Connect request + * + * @return ::ES_OK\n + * ::ES_COMMUNICATION_ERROR\n + * ::ES_ERROR\n + * + * @see ESResult + */ + ESResult getESResult() + { + return m_result; + } + + private: + ESResult m_result; + }; + + class ESOwnershipTransferData + { + public: +#ifdef __WITH_DTLS__ + ESOwnershipTransferData() : + m_MOTMethod(OIC_OXM_COUNT), m_preconfiguredPin("") + { + } + + ESOwnershipTransferData(const ESOwnershipTransferData& data) : + m_MOTMethod(data.getMOTMethod()), + m_preconfiguredPin(data.getPreConfiguredPin()) + { + } + + ESResult setMOTMethod(OicSecOxm_t method) + { +#ifdef MULTIPLE_OWNER + if(OIC_RANDOM_DEVICE_PIN != method) + { + return ES_ERROR; + } + + m_MOTMethod = method; + return ES_OK; +#else + (void) method; + + return ES_ERROR; +#endif + } + + ESResult setMOTMethod(OicSecOxm_t method, const std::string& pin) + { +#ifdef MULTIPLE_OWNER + if(OIC_PRECONFIG_PIN != method || pin.empty()) + { + return ES_ERROR; + } + + m_preconfiguredPin = pin; + m_MOTMethod = method; + return ES_OK; +#else + (void) method; + (void) pin; + + return ES_ERROR; +#endif + } + + OicSecOxm_t getMOTMethod() const + { + return m_MOTMethod; + } + + std::string getPreConfiguredPin() const + { + return m_preconfiguredPin; + } + + private: + OicSecOxm_t m_MOTMethod; + std::string m_preconfiguredPin; +#endif + }; + + /** * Callback function definition for providing Enrollee status */ typedef function< void(shared_ptr< GetEnrolleeStatus >) > GetStatusCb; @@ -875,11 +1055,25 @@ namespace OIC typedef function< void(shared_ptr< CloudPropProvisioningStatus >) > CloudPropProvStatusCb; /** + * Callback function definition for providing 'Connect' request status + */ + typedef function< void(shared_ptr< ConnectRequestStatus >) > ConnectRequestStatusCb; + + + /** * Callback function definition for providing Enrollee security provisioning status */ typedef function< void(shared_ptr) > SecurityProvStatusCb; /** + * Callback function definition for providing Enrollee security provisioning status. + * This callback is an overloaded version of SecurityProvStatusCb, which has + * ESOwnershipTransferData as a return value. + */ + typedef function< ESOwnershipTransferData(shared_ptr) > + SecurityProvStatusCbWithOption; + + /** * Callback definition to be invoked when the security stack expects a pin from application */ typedef function< void(string&) > SecurityPinCb;