X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=resource%2Finclude%2FOCResource.h;h=e1f7bc6f1c884d5531c5ae57e2a522651984e212;hb=8229635f6d207516ccbbdf23b13be164e0fc1787;hp=a86badcd7c9df01f6d443753a4749ddbf421801e;hpb=b029953884356f976a4bdf560a6693bc6bcc115a;p=platform%2Fupstream%2Fiotivity.git diff --git a/resource/include/OCResource.h b/resource/include/OCResource.h index a86badc..e1f7bc6 100644 --- a/resource/include/OCResource.h +++ b/resource/include/OCResource.h @@ -25,8 +25,8 @@ * Resource. */ -#ifndef __OCRESOURCE_H -#define __OCRESOURCE_H +#ifndef OC_RESOURCE_H_ +#define OC_RESOURCE_H_ #include #include @@ -60,7 +60,15 @@ namespace OC OCResourceIdentifier(const OCResourceIdentifier&) = default; +#if defined(_MSC_VER) && (_MSC_VER < 1900) + OCResourceIdentifier(OCResourceIdentifier&& o): + m_resourceUri(std::move(o.m_resourceUri)), + m_representation(o.m_representation) + { + } +#else OCResourceIdentifier(OCResourceIdentifier&&) = default; +#endif OCResourceIdentifier& operator=(const OCResourceIdentifier&) = delete; @@ -103,8 +111,33 @@ namespace OC public: typedef std::shared_ptr Ptr; +#if defined(_MSC_VER) && (_MSC_VER < 1900) + OCResource(OCResource&& o): + m_clientWrapper(std::move(o.m_clientWrapper)), + m_uri(std::move(o.m_uri)), + m_resourceId(std::move(o.m_resourceId)), + m_devAddr(std::move(o.m_devAddr)), + m_deviceName(std::move(o.m_deviceName)), + m_useHostString(o.m_useHostString), + m_property(o.m_property), + m_isCollection(o.m_isCollection), + m_resourceTypes(std::move(o.m_resourceTypes)), + m_interfaces(std::move(o.m_interfaces)), + m_children(std::move(m_children)), + m_observeHandle(std::move(m_observeHandle)), + m_headerOptions(std::move(m_headerOptions)) + { + } +#else OCResource(OCResource&&) = default; - OCResource& operator=(OCResource&&) = default; +#endif + // Explicitly delete the copy ctor since VS2013 would try to generate one, and + // the standard says that defaulting the move ctor should delete the copy ctor. + OCResource(const OCResource&) = delete; + + // We cannot support copy/move assigns since OCResourceIdentifier doesn't. + OCResource& operator=(OCResource&&) = delete; + OCResource& operator=(const OCResource&) = delete; /** * Virtual destructor @@ -118,8 +151,8 @@ namespace OC * The callback function will be invoked with a map of attribute name and values. * The callback function will also have the result from this Get operation * This will have error codes - * @return OCStackResult return value of this API. Returns OC_STACK_OK if success. - * NOTE: OCStackResult is defined in ocstack.h. + * @return Returns ::OC_STACK_OK on success, some other value upon failure. + * @note OCStackResult is defined in ocstack.h. */ OCStackResult get(const QueryParamsMap& queryParametersMap, GetCallback attributeHandler); /** @@ -130,8 +163,8 @@ namespace OC * The callback function will also have the result from this Get operation * This will have error codes * @param QoS the quality of communication - * @return OCStackResult return value of this API. Returns OC_STACK_OK if success. - * NOTE: OCStackResult is defined in ocstack.h. + * @return Returns ::OC_STACK_OK on success, some other value upon failure. + * @note OCStackResult is defined in ocstack.h. */ OCStackResult get(const QueryParamsMap& queryParametersMap, GetCallback attributeHandler, QualityOfService QoS); @@ -148,23 +181,25 @@ namespace OC * resource container (list will be empty if not a container) * The callback function will also have the result from this Get operation. This will * have error codes - * @return OCStackResult return value of this API. Returns OC_STACK_OK if success.
- * NOTE: OCStackResult is defined in ocstack.h.
- * Example:
+ * @return Returns ::OC_STACK_OK on success, some other value upon failure. + * @note OCStackResult is defined in ocstack.h. + * @par Example: * Consider resource "a/home" (with link interface and resource type as home) contains links * to "a/kitchen" and "a/room". - * Step 1: get("home", Link_Interface, &onGet)
+ * -# get("home", Link_Interface, &onGet) + * @par * Callback onGet will receive a) Empty attribute map because there are no attributes for * a/home b) list with * full URI of "a/kitchen" and "a/room" resources and their properties c) error code for GET - * operation
- * NOTE: A resource may contain single or multiple resource types. Also, a resource may - * contain single or multiple interfaces.
+ * operation + * @note A resource may contain single or multiple resource types. Also, a resource may + * contain single or multiple interfaces. * Currently, single GET request is allowed to do operate on single resource type or resource - * interface. In future, a single GET
- * can operate on multiple resource types and interfaces.
- * NOTE: A client can traverse a tree or graph by doing successive GETs on the returned - * resources at a node.
+ * interface. In future, a single GET + * can operate on multiple resource types and interfaces. + * @note A client can traverse a tree or graph by doing successive GETs on the returned + * resources at a node. + * */ OCStackResult get(const std::string& resourceType, const std::string& resourceInterface, const QueryParamsMap& queryParametersMap, GetCallback attributeHandler); @@ -181,23 +216,25 @@ namespace OC * The callback function will also have the result from this Get operation. This will * have error codes * @param QoS the quality of communication - * @return OCStackResult return value of this API. Returns OC_STACK_OK if success.
- * NOTE: OCStackResult is defined in ocstack.h.
- * Example:
+ * @return Returns ::OC_STACK_OK on success, some other value upon failure. + * note OCStackResult is defined in ocstack.h. + * @par Example: * Consider resource "a/home" (with link interface and resource type as home) contains links * to "a/kitchen" and "a/room". - * Step 1: get("home", Link_Interface, &onGet)
+ * -# get("home", Link_Interface, &onGet) + * @par * Callback onGet will receive a) Empty attribute map because there are no attributes for * a/home b) list with * full URI of "a/kitchen" and "a/room" resources and their properties c) error code for GET - * operation
- * NOTE: A resource may contain single or multiple resource types. Also, a resource may - * contain single or multiple interfaces.
+ * operation + * @note A resource may contain single or multiple resource types. Also, a resource may + * contain single or multiple interfaces. * Currently, single GET request is allowed to do operate on single resource type or resource - * interface. In future, a single GET
- * can operate on multiple resource types and interfaces.
- * NOTE: A client can traverse a tree or graph by doing successive GETs on the returned - * resources at a node.
+ * interface. In future, a single GET + * can operate on multiple resource types and interfaces. + * @note A client can traverse a tree or graph by doing successive GETs on the returned + * resources at a node. + * */ OCStackResult get(const std::string& resourceType, const std::string& resourceInterface, const QueryParamsMap& queryParametersMap, GetCallback attributeHandler, @@ -205,6 +242,7 @@ namespace OC /** * Function to set the representation of a resource (via PUT) + * * @param representation which can either have all the attribute names and values (which will represent entire state of the resource) or a * set of attribute names and values which needs to be modified @@ -213,13 +251,15 @@ namespace OC * This will have error codes * @param queryParametersMap map which can have the query parameter name and value * @param attributeHandler attribute handler - * @return OCStackResult return value of this API. Returns OC_STACK_OK if success. - * NOTE: OCStackResult is defined in ocstack.h. + * @return Returns ::OC_STACK_OK on success, some other value upon failure. + * @note OCStackResult is defined in ocstack.h. + * */ OCStackResult put(const OCRepresentation& representation, const QueryParamsMap& queryParametersMap, PutCallback attributeHandler); /** * Function to set the representation of a resource (via PUT) + * * @param representation which can either have all the attribute names and values (which will represent entire state of the resource) or a * set of attribute names and values which needs to be modified @@ -229,8 +269,9 @@ namespace OC * @param queryParametersMap map which can have the query parameter name and value * @param attributeHandler attribute handler * @param QoS the quality of communication - * @return OCStackResult return value of this API. Returns OC_STACK_OK if success. - * NOTE: OCStackResult is defined in ocstack.h. + * @return Returns ::OC_STACK_OK on success, some other value upon failure. + * @note OCStackResult is defined in ocstack.h. + * */ OCStackResult put(const OCRepresentation& representation, const QueryParamsMap& queryParametersMap, PutCallback attributeHandler, @@ -238,6 +279,7 @@ namespace OC /** * Function to set the attributes of a resource (via PUT) + * * @param resourceType resource type of the resource to operate on * @param resourceInterface interface type of the resource to operate on * @param representation representation of the resource @@ -250,8 +292,9 @@ namespace OC * and values * (which will represent entire state of the resource) or a * set of attribute names and values which needs to be modified - * @return OCStackResult return value of this API. Returns OC_STACK_OK if success.
- * NOTE: OCStackResult is defined in ocstack.h.
+ * @return Returns ::OC_STACK_OK on success, some other value upon failure. + * @note OCStackResult is defined in ocstack.h. + * */ OCStackResult put(const std::string& resourceType, const std::string& resourceInterface, const OCRepresentation& representation, const QueryParamsMap& queryParametersMap, @@ -271,8 +314,9 @@ namespace OC * (which will represent entire state of the resource) or a * set of attribute names and values which needs to be modified * @param QoS the quality of communication - * @return OCStackResult return value of this API. Returns OC_STACK_OK if success.
- * NOTE: OCStackResult is defined in ocstack.h.
+ * @return Returns ::OC_STACK_OK on success, some other value upon failure. + * @note OCStackResult is defined in ocstack.h. + * */ OCStackResult put(const std::string& resourceType, const std::string& resourceInterface, const OCRepresentation& representation, const QueryParamsMap& queryParametersMap, @@ -280,6 +324,7 @@ namespace OC /** * Function to post on a resource + * * @param representation which can either have all the attribute names and values * (which will represent entire state of the resource) or a * set of attribute names and values which needs to be modified @@ -288,13 +333,14 @@ namespace OC * This will have error codes * @param queryParametersMap map which can have the query parameter name and value * @param attributeHandler attribute handler - * @return OCStackResult return value of this API. Returns OC_STACK_OK if success. - * NOTE: OCStackResult is defined in ocstack.h. + * @return Returns ::OC_STACK_OK on success, some other value upon failure. + * @note OCStackResult is defined in ocstack.h. */ OCStackResult post(const OCRepresentation& representation, const QueryParamsMap& queryParametersMap, PostCallback attributeHandler); /** * Function to post on a resource + * * @param representation which can either have all the attribute names and values * (which will represent entire state of the resource) or a * set of attribute names and values which needs to be modified @@ -304,8 +350,8 @@ namespace OC * @param queryParametersMap map which can have the query parameter name and value * @param attributeHandler attribute handler * @param QoS the quality of communication - * @return OCStackResult return value of this API. Returns OC_STACK_OK if success. - * NOTE: OCStackResult is defined in ocstack.h. + * @return Returns ::OC_STACK_OK on success, some other value upon failure. + * @note OCStackResult is defined in ocstack.h. */ OCStackResult post(const OCRepresentation& representation, const QueryParamsMap& queryParametersMap, PostCallback attributeHandler, @@ -313,6 +359,7 @@ namespace OC /** * Function to post on a resource + * * @param resourceType resource type of the resource to operate on * @param resourceInterface interface type of the resource to operate on * @param representation representation of the resource @@ -325,14 +372,16 @@ namespace OC * and values * (which will represent entire state of the resource) or a * set of attribute names and values which needs to be modified - * @return OCStackResult return value of this API. Returns OC_STACK_OK if success.
- * NOTE: OCStackResult is defined in ocstack.h.
+ * @return Returns ::OC_STACK_OK on success, some other value upon failure. + * @note OCStackResult is defined in ocstack.h. + * */ OCStackResult post(const std::string& resourceType, const std::string& resourceInterface, const OCRepresentation& representation, const QueryParamsMap& queryParametersMap, PostCallback attributeHandler); /** * Function to post on a resource + * * @param resourceType resource type of the resource to operate on * @param resourceInterface interface type of the resource to operate on * @param representation representation of the resource @@ -346,8 +395,9 @@ namespace OC * (which will represent entire state of the resource) or a * set of attribute names and values which needs to be modified * @param QoS the quality of communication - * @return OCStackResult return value of this API. Returns OC_STACK_OK if success.
- * NOTE: OCStackResult is defined in ocstack.h.
+ * @return Returns ::OC_STACK_OK on success, some other value upon failure. + * @note OCStackResult is defined in ocstack.h. + * */ OCStackResult post(const std::string& resourceType, const std::string& resourceInterface, const OCRepresentation& representation, const QueryParamsMap& queryParametersMap, @@ -355,30 +405,35 @@ namespace OC /** * Function to perform DELETE operation + * * @param deleteHandler handles callback * The callback function will have headerOptions and result from this Delete * operation. This will have error codes - * @return OCStackResult return value of this API. Returns OC_STACK_OK if success. - * NOTE: OCStackResult is defined in ocstack.h. + * @return Returns ::OC_STACK_OK on success, some other value upon failure. + * @note OCStackResult is defined in ocstack.h. + * */ OCStackResult deleteResource(DeleteCallback deleteHandler); OCStackResult deleteResource(DeleteCallback deleteHandler, QualityOfService QoS); /** * Function to set observation on the resource + * * @param observeType allows the client to specify how it wants to observe. * @param queryParametersMap map which can have the query parameter name and value * @param observeHandler handles callback * The callback function will be invoked with a map of attribute name and values. * The callback function will also have the result from this observe operation * This will have error codes - * @return OCStackResult return value of this API. Returns OC_STACK_OK if success. - * NOTE: OCStackResult is defined in ocstack.h. + * @return Returns ::OC_STACK_OK on success, some other value upon failure. + * @note OCStackResult is defined in ocstack.h. + * */ OCStackResult observe(ObserveType observeType, const QueryParamsMap& queryParametersMap, ObserveCallback observeHandler); /** * Function to set observation on the resource + * * @param observeType allows the client to specify how it wants to observe. * @param queryParametersMap map which can have the query parameter name and value * @param observeHandler handles callback @@ -386,16 +441,19 @@ namespace OC * The callback function will also have the result from this observe operation * This will have error codes * @param qos the quality of communication - * @return OCStackResult return value of this API. Returns OC_STACK_OK if success. - * NOTE: OCStackResult is defined in ocstack.h. + * @return Returns ::OC_STACK_OK on success, some other value upon failure. + * @note OCStackResult is defined in ocstack.h. + * */ OCStackResult observe(ObserveType observeType, const QueryParamsMap& queryParametersMap, ObserveCallback observeHandler, QualityOfService qos); /** * Function to cancel the observation on the resource - * @return OCStackResult return value of this API. Returns OC_STACK_OK if success. - * NOTE: OCStackResult is defined in ocstack.h. + * + * @return Returns ::OC_STACK_OK on success, some other value upon failure. + * @note OCStackResult is defined in ocstack.h. + * */ OCStackResult cancelObserve(); OCStackResult cancelObserve(QualityOfService qos); @@ -405,35 +463,52 @@ namespace OC * @param headerOptions std::vector where header information(header optionID and optionData * is passed * - * NOTE: Once the headers information is set, it will be applicable to GET, PUT and observe - * request.
+ * @note Once the headers information is set, it will be applicable to GET, PUT and observe + * request. * setHeaderOptions can be used multiple times if headers need to be modifed by the client. * Latest headers will be used to send in the request.
- * NOTE: Initial support is only for two headers. If headerMap consists of more than two + * @note Initial support is only for two headers. If headerMap consists of more than two * header options, they will be ignored.
* Use unsetHeaderOptions API to clear the header information. */ - void setHeaderOptions(const HeaderOptions& headerOptions) - { - m_headerOptions = headerOptions; - } + void setHeaderOptions(const HeaderOptions& headerOptions); /** * Function to unset header options. */ - void unsetHeaderOptions() - { - m_headerOptions.clear(); - } + void unsetHeaderOptions(); /** * Function to get the host address of this resource * @return std::string host address - * NOTE: This might or might not be exposed in future due to security concerns + * @note This might or might not be exposed in future due to security concerns */ std::string host() const; /** + * Function to set host address information. + * + * @param host std::string host address + * optionally one of + * CoAP over UDP prefix "coap://" + * CoAP over TCP prefix "coap+tcp://" + * CoAP over DTLS prefix "coaps://" + * CoAP over TLS prefix "coaps+tcp://" + * CoAP over RFCOMM prefix "coap+rfcomm://" + * CoAP over GATT prefix "coap+gatt://" + * optionally one of + * IPv6 address "[1234::5678]" + * IPv4 address "192.168.1.1" + * optional port ":5683" + * + * @note This should be in the format coap://address:port. + * If host has different connectivity type with a given OCResource object + * which was discovered after calling findResource API, raise an exception on failure. + * + */ + void setHost(const std::string& host); + + /** * Function to get the URI for this resource * @return std::string resource URI */ @@ -451,24 +526,29 @@ namespace OC * not observable. */ bool isObservable() const; + + OCDevAddr getDevAddr() const; + +#ifdef WITH_MQ + /** + * Function to provide ability to check if this resource is publisher or not + * @return bool true indicates resource is publisher; false indicates resource is + * not publisher. + */ + bool isPublish() const; +#endif /** * Function to get the list of resource types * @return vector of resource types */ - std::vector getResourceTypes() const - { - return m_resourceTypes; - } + std::vector getResourceTypes() const; /** * Function to get the list of resource interfaces * @return vector of resource interface */ - std::vector getResourceInterfaces(void) const - { - return m_interfaces; - } + std::vector getResourceInterfaces(void) const; // TODO-CA Revisit this since we are exposing two identifiers /** @@ -484,11 +564,116 @@ namespace OC /** * Function to get a string representation of the resource's server ID. * This is unique per- server independent on how it was discovered. - * Note: The format of the return value is subject to change and will + * @note The format of the return value is subject to change and will * likely change both in size and contents in the future. */ std::string sid() const; + /** + * Function to get a string representation of the human friendly name defined by the vendor. + * @note The format of the return value is subject to change and will + * likely change both in size and contents in the future. + */ + std::string deviceName() const; + +#ifdef WITH_MQ + /** + * Function to discovery Topics from MQ Broker. + * + * @param queryParametersMap map which can have the query parameter name and value + * @param attributeHandler handles callback + * @param qos the quality of communication + * + * @return Returns ::OC_STACK_OK on success, some other value upon failure. + * @note OCStackResult is defined in ocstack.h. + * + */ + OCStackResult discoveryMQTopics(const QueryParamsMap& queryParametersMap, + MQTopicCallback attributeHandler, + QualityOfService qos); + /** + * Function to create Topic into MQ Broker. + * SubTopic is also created through this method. + * + * @param rep representation of the topic + * @param topicUri new uri of the topic which want to create + * @param queryParametersMap map which can have the query parameter name and value + * @param attributeHandler handles callback + * @param qos the quality of communication + * + * @return Returns ::OC_STACK_OK on success, some other value upon failure. + * @note OCStackResult is defined in ocstack.h. + * + */ + OCStackResult createMQTopic(const OCRepresentation& rep, + const std::string& topicUri, + const QueryParamsMap& queryParametersMap, + MQTopicCallback attributeHandler, + QualityOfService qos); +#endif +#ifdef MQ_SUBSCRIBER + /** + * Function to subscribe Topic to MQ Broker. + * + * @param observeType allows the client to specify how it wants to observe. + * @param queryParametersMap map which can have the query parameter name and value + * @param observeHandler handles callback + * @param qos the quality of communication + * + * @return Returns ::OC_STACK_OK on success, some other value upon failure. + * @note OCStackResult is defined in ocstack.h. + * + */ + OCStackResult subscribeMQTopic(ObserveType observeType, + const QueryParamsMap& queryParametersMap, + ObserveCallback observeHandler, + QualityOfService qos); + + /** + * Function to unsubscribe Topic to MQ Broker. + * + * @param qos the quality of communication + * + * @return Returns ::OC_STACK_OK on success, some other value upon failure. + * @note OCStackResult is defined in ocstack.h. + * + */ + OCStackResult unsubscribeMQTopic(QualityOfService qos); + + /** + * Function to request publish to MQ publisher. + * Publisher can confirm the request message as key:"req_pub" and value:"true". + * + * @param queryParametersMap map which can have the query parameter name and value + * @param attributeHandler handles callback + * @param qos the quality of communication + * + * @return Returns ::OC_STACK_OK on success, some other value upon failure. + * @note OCStackResult is defined in ocstack.h. + * + */ + OCStackResult requestMQPublish(const QueryParamsMap& queryParametersMap, + PostCallback attributeHandler, + QualityOfService qos); +#endif +#ifdef MQ_PUBLISHER + /** + * Function to publish Topic information into MQ Broker. + * + * @param rep representation of the topic + * @param queryParametersMap map which can have the query parameter name and value + * @param attributeHandler handles callback + * @param qos the quality of communication + * + * @return Returns ::OC_STACK_OK on success, some other value upon failure. + * @note OCStackResult is defined in ocstack.h. + * + */ + OCStackResult publishMQTopic(const OCRepresentation& rep, + const QueryParamsMap& queryParametersMap, + PostCallback attributeHandler, + QualityOfService qos); +#endif // overloaded operators allow for putting into a 'set' // the uniqueidentifier allows for putting into a hash bool operator==(const OCResource &other) const; @@ -508,30 +693,34 @@ namespace OC std::string m_uri; OCResourceIdentifier m_resourceId; OCDevAddr m_devAddr; - bool m_isObservable; + bool m_useHostString; bool m_isCollection; + uint8_t m_property; std::vector m_resourceTypes; std::vector m_interfaces; std::vector m_children; OCDoHandle m_observeHandle; + std::string m_deviceName; HeaderOptions m_headerOptions; private: OCResource(std::weak_ptr clientWrapper, const OCDevAddr& devAddr, const std::string& uri, - const std::string& serverId, bool observable, + const std::string& serverId, uint8_t property, const std::vector& resourceTypes, - const std::vector& interfaces); + const std::vector& interfaces, + const std::string& deviceName); OCResource(std::weak_ptr clientWrapper, const std::string& host, const std::string& uri, const std::string& serverId, - OCConnectivityType connectivityType, bool observable, + OCConnectivityType connectivityType, uint8_t property, const std::vector& resourceTypes, - const std::vector& interfaces); + const std::vector& interfaces, + const std::string& deviceName); }; } // namespace OC -#endif //__OCRESOURCE_H +#endif // OC_RESOURCE_H