1. Renamed all container stuff to collection stuff both in C/C++.
2. Simplified function names in C stack.
3. Implemented OCUnbindResource in C stack.
4. Implemented unbindResource(s) in C++ stack.
Patch2: Incorporated Doug and Erich's review comments.
Change-Id: I32d8f7248b65e2fee9a05ca52d22f7d247748984
try{
result = m_server->registerResource(resourceHandle, resourceURI, resourceTypeName, resourceInterface, entityHandler, resourceProperty);
}
- catch(std::exception e) // define our own expception.
+ catch(std::exception e) // TODO: define our own expception.
{
throw e;
}
return result;
}
- // TODO: Implement
- OCStackResult OCPlatform::unbindResource(OCResourceHandle containerHandle, OCResourceHandle resourceHandle)
+ OCStackResult OCPlatform::unbindResource(OCResourceHandle collectionHandle, OCResourceHandle resourceHandle)
{
OCStackResult result = OC_STACK_OK;
+
+ try {
+ result = OCUnBindResource(collectionHandle, resourceHandle);
+ }
+ catch(std::exception e) // TODO: define our own expception.
+ {
+ throw e;
+ }
+
return result;
}
- // TODO: Implement
- OCStackResult OCPlatform::unbindResources(OCResourceHandle containerHandle, std::vector<OCResourceHandle>& resourceHandleList)
+ OCStackResult OCPlatform::unbindResources(const OCResourceHandle collectionHandle, const std::vector<OCResourceHandle>& resourceHandles)
{
OCStackResult result = OC_STACK_OK;
+
+ try {
+
+ for(const OCResourceHandle& handle : resourceHandles)
+ {
+ result = OCUnBindResource(collectionHandle, handle);
+
+ if(result != OC_STACK_OK)
+ {
+ // TODO Should we unbind the previous successful ones?
+ // TODO should we return which are succesful
+ // Currently just returns with any failure
+ return result;
+ }
+ }
+ }
+ catch(std::exception e) // TODO : define our own exception
+ {
+ throw e;
+ }
+
return result;
}
- OCStackResult bindResource(const OCResourceHandle containerHandle, const OCResourceHandle resourceHandle)
+ OCStackResult bindResource(const OCResourceHandle collectionHandle, const OCResourceHandle resourceHandle)
{
OCStackResult result = OC_STACK_OK;
try {
- result = OCBindContainedResourceToResource(containerHandle, resourceHandle);
+ result = OCBindResource(collectionHandle, resourceHandle);
}
- catch(std::exception e)
+ catch(std::exception e) // TODO : define our own exception
{
throw e;
}
return result;
}
- OCStackResult bindResources(const OCResourceHandle containerHandle, const std::vector<OCResourceHandle>& resourceHandles)
+ OCStackResult bindResources(const OCResourceHandle collectionHandle, const std::vector<OCResourceHandle>& resourceHandles)
{
OCStackResult result = OC_STACK_OK;
try {
- std::vector<OCResourceHandle>::const_iterator it;
-
- for(it = resourceHandles.begin(); it != resourceHandles.end(); it++)
+ for(const OCResourceHandle& handle : resourceHandles)
{
- result = OCBindContainedResourceToResource(containerHandle, *it);
+ result = OCBindResource(collectionHandle, handle);
if(result != OC_STACK_OK)
{
}
}
}
- catch(std::exception e)
+ catch(std::exception e) // TODO : define our own exception
{
throw e;
}
uint8_t resourceProperties);
/**
- * Add a resource to a container resource.
+ * Add a resource to a collection resource.
*
- * @param containerHandle - handle to the container resource
- * @param addedResourceHandle - handle to resource to be added to the container resource
+ * @param collectionHandle - handle to the collection resource
+ * @param resourceHandle - handle to resource to be added to the collection resource
*
* @return
* OC_STACK_OK - no errors
* OC_STACK_ERROR - stack process error
+ * OC_STACK_INVALID_PARAM - invalid collectionhandle
*/
-OCStackResult OCBindContainedResourceToResource(OCResourceHandle containerHandle, OCResourceHandle addedResourceHandle);
+OCStackResult OCBindResource(OCResourceHandle collectionHandle, OCResourceHandle resourceHandle);
+
+/**
+ * Remove a resource from a collection resource.
+ *
+ * @param collectionHandle - handle to the collection resource
+ * @param resourceHandle - handle to resource to be removed from the collection resource
+ *
+ * @return
+ * OC_STACK_OK - no errors
+ * OC_STACK_ERROR - stack process error
+ * OC_STACK_INVALID_PARAM - invalid collectionhandle
+ */
+OCStackResult OCUnBindResource(OCResourceHandle collectionHandle, OCResourceHandle resourceHandle);
/**
* Bind a resourcetype to a resource.
*
- * @param handle - handle to the container resource
+ * @param handle - handle to the resource
* @param resourceTypeName - name of resource type. Example: "core.led"
*
* @return
/**
* Bind a resource interface to a resource.
*
- * @param handle - handle to the container resource
+ * @param handle - handle to the resource
* @param resourceInterfaceName - name of resource interface. Example: "core.rw"
*
* @return
uint8_t OCGetResourceInterfaceAllowedMethods(OCResourceHandle handle, uint8_t index);
/**
- * Get name of resource interface of the resource.
+ * Get resource handle from the collection resource by index.
*
- * @param containerHandle - handle of container resource
+ * @param collectionHandle - handle of collection resource
* @param index - index of contained resource, 0 to Count - 1
*
* @return
* handle to contained resource - if resource found
* NULL - resource not found
*/
-OCResourceHandle OCGetContainedResourceHandle(OCResourceHandle containerHandle, uint8_t index);
+OCResourceHandle OCGetResourceHandleFromCollection(OCResourceHandle collectionHandle, uint8_t index);
/**
* Get the entity handler for a resource.
}
/**
- * Add a resource to a container resource.
+ * Add a resource to a collection resource.
*
- * @param containerHandle - handle to the container resource
- * @param addedResourceHandle - handle to resource to be added to the container resource
+ * @param collectionHandle - handle to the collection resource
+ * @param resourceHandle - handle to resource to be added to the collection resource
*
* @return
* OC_STACK_OK - no errors
* OC_STACK_ERROR - stack process error
+ * OC_STACK_INVALID_PARAM - invalid collectionhandle
*/
-OCStackResult OCBindContainedResourceToResource(
- OCResourceHandle containerHandle, OCResourceHandle addedResourceHandle) {
+OCStackResult OCBindResource(
+ OCResourceHandle collectionHandle, OCResourceHandle resourceHandle) {
OCResource *resource;
uint8_t i;
- OC_LOG(INFO, TAG, PCF("Entering OCBindContainedResourceToResource"));
+ OC_LOG(INFO, TAG, PCF("Entering OCBindResource"));
// Validate parameters
- VERIFY_NON_NULL(containerHandle, ERROR, OC_STACK_ERROR);
- VERIFY_NON_NULL(addedResourceHandle, ERROR, OC_STACK_ERROR);
+ VERIFY_NON_NULL(collectionHandle, ERROR, OC_STACK_ERROR);
+ VERIFY_NON_NULL(resourceHandle, ERROR, OC_STACK_ERROR);
// Container cannot contain itself
- if (containerHandle == addedResourceHandle) {
- OC_LOG(ERROR, TAG, PCF("Added handle equals container handle"));
+ if (collectionHandle == resourceHandle) {
+ OC_LOG(ERROR, TAG, PCF("Added handle equals collection handle"));
return OC_STACK_INVALID_PARAM;
}
// Use the handle to find the resource in the resource linked list
- resource = findResource((OCResource *) containerHandle);
+ resource = findResource((OCResource *) collectionHandle);
if (!resource) {
- OC_LOG(ERROR, TAG, PCF("Resource not found"));
+ OC_LOG(ERROR, TAG, PCF("Collection handle not found"));
return OC_STACK_INVALID_PARAM;
}
// If found, add it and return success
for (i = 0; i < MAX_CONTAINED_RESOURCES; i++) {
if (!resource->rsrcResources[i]) {
- resource->rsrcResources[i] = (OCResourceHandle) addedResourceHandle;
+ resource->rsrcResources[i] = (OCResourceHandle) resourceHandle;
OC_LOG(INFO, TAG, PCF("resource bound"));
return OC_STACK_OK;
}
}
- // Unable to add addedResourceHandle, so return error
+ // Unable to add resourceHandle, so return error
return OC_STACK_ERROR;
}
/**
+ * Remove a resource from a collection resource.
+ *
+ * @param collectionHandle - handle to the collection resource
+ * @param resourceHandle - handle to resource to be added to the collection resource
+ *
+ * @return
+ * OC_STACK_OK - no errors
+ * OC_STACK_ERROR - stack process error
+ * OC_STACK_INVALID_PARAM - invalid collectionHandle
+ */
+OCStackResult OCUnBindResource(
+ OCResourceHandle collectionHandle, OCResourceHandle resourceHandle) {
+ OCResource *resource;
+ uint8_t i;
+
+ OC_LOG(INFO, TAG, PCF("Entering OCUnBindResource"));
+
+ // Validate parameters
+ VERIFY_NON_NULL(collectionHandle, ERROR, OC_STACK_ERROR);
+ VERIFY_NON_NULL(resourceHandle, ERROR, OC_STACK_ERROR);
+ // Container cannot contain itself
+ if (collectionHandle == resourceHandle) {
+ OC_LOG(ERROR, TAG, PCF("removing handle equals collection handle"));
+ return OC_STACK_INVALID_PARAM;
+ }
+
+ // Use the handle to find the resource in the resource linked list
+ resource = findResource((OCResource *) collectionHandle);
+ if (!resource) {
+ OC_LOG(ERROR, TAG, PCF("Collection handle not found"));
+ return OC_STACK_INVALID_PARAM;
+ }
+
+ // Look for an open slot to add add the child resource.
+ // If found, add it and return success
+ for (i = 0; i < MAX_CONTAINED_RESOURCES; i++) {
+ if (resourceHandle == resource->rsrcResources[i]) {
+ resource->rsrcResources[i] = (OCResourceHandle) 0;
+ OC_LOG(INFO, TAG, PCF("resource unbound"));
+ return OC_STACK_OK;
+ }
+ }
+
+ OC_LOG(INFO, TAG, PCF("resource not found in collection"));
+
+ // Unable to add resourceHandle, so return error
+ return OC_STACK_ERROR;
+}
+
+
+/**
* Bind a resourcetype to a resource.
*
- * @param handle - handle to the container resource
+ * @param handle - handle to the resource
* @param resourceTypeName - name of resource type. Example: "core.led"
*
* @return
/**
* Bind a resourceinterface to a resource.
*
- * @param handle - handle to the container resource
+ * @param handle - handle to the resource
* @param resourceInterfaceName - name of resource interface. Example: "core.rw"
*
* @return
}
/**
- * Get name of resource interface of the resource.
+ * Get resource handle from the collection resource by index.
*
- * @param containerHandle - handle of container resource
+ * @param collectionHandle - handle of collection resource
* @param index - index of contained resource, 0 to Count - 1
*
* @return
- * handle to contained resource - if resource found
+ * handle to resource - if resource found
* NULL - resource not found
*/
-OCResourceHandle OCGetContainedResourceHandle(OCResourceHandle containerHandle,
+OCResourceHandle OCGetResourceHandleFromCollection(OCResourceHandle collectionHandle,
uint8_t index) {
OCResource *resource;
return NULL;
}
- resource = findResource((OCResource *) containerHandle);
+ resource = findResource((OCResource *) collectionHandle);
if (!resource) {
return NULL;
}
uint8_t resourceProperty);
/**
- * Add a resource to a container resource.
+ * Add a resource to a collection resource.
*
- * @param containerHandle - handle to the container resource
- * @param addedResourceHandle - handle to resource to be added to the container resource
+ * @param collectionHandle - handle to the collection resource
+ * @param addedResourceHandle - handle to resource to be added to the collection resource
*
* @return OCStackResult return value of this API. Returns OC_STACK_OK if success.<br>
* NOTE: OCStackResult is defined in ocstack.h. <br>
- * NOTE: bindResourceToContainer must be used only after the both container resource and
- * resource to add under a container are created and respective handles obtained<br>
+ * NOTE: bindResource must be used only after the both collection resource and
+ * resource to add under a collections are created and respective handles obtained<br>
* <b>Example:</b> <br>
* Step 1: registerResource(homeResourceHandle, "a/home", "home", Link_Interface, entityHandler, OC_DISCOVERABLE | OC_OBSERVABLE);<br>
* Step 2: registerResource(kitchenResourceHandle, "a/kitchen", "kitchen", Link_Interface, entityHandler, OC_DISCOVERABLE | OC_OBSERVABLE);<br>
- * Step 3: bindResourceToContainer(homeResourceHandle, kitchenResourceHandle);<br>
+ * Step 3: bindResource(homeResourceHandle, kitchenResourceHandle);<br>
* At the end of Step 3, resource "a/home" will contain a reference to "a/kitchen".<br>
*/
- OCStackResult bindResource(const OCResourceHandle containerHandle, const OCResourceHandle resourceHandle);
+ OCStackResult bindResource(const OCResourceHandle collectionHandle, const OCResourceHandle resourceHandle);
/**
- * Add multiple resources to a container resource.
+ * Add multiple resources to a collection resource.
*
- * @param containerHandle - handle to the container resource
- * @param addedResourceHandleList reference to list of resource handles to be added to the container resource
+ * @param collectionHandle - handle to the collection resource
+ * @param addedResourceHandleList reference to list of resource handles to be added to the collection resource
*
* @return OCStackResult return value of this API. Returns OC_STACK_OK if success. <br>
* NOTE: OCStackResult is defined in ocstack.h. <br>
- * NOTE: bindResourcesToContainer must be used only after the both container resource and
- * list of resources to add under a container are created and respective handles obtained <br>
+ * NOTE: bindResources must be used only after the both collection resource and
+ * list of resources to add under a collection are created and respective handles obtained <br>
* <b> Example: </b> <br>
* Step 1: registerResource(homeResourceHandle, "a/home", "home", Link_Interface, homeEntityHandler, OC_DISCOVERABLE | OC_OBSERVABLE);<br>
* Step 2: registerResource(kitchenResourceHandle, "a/kitchen", "kitchen", Link_Interface, kitchenEntityHandler, OC_DISCOVERABLE | OC_OBSERVABLE);<br>
* Step 3: registerResource(roomResourceHandle, "a/room", "room", Link_Interface, roomEntityHandler, OC_DISCOVERABLE | OC_OBSERVABLE);<br>
* Step 4: std::vector<OCResourceHandle> rList; rList.push_back(kitchenResourceHandle); rList.push_back(roomResourceHandle);<br>
- * Step 5: bindResourceToContainer(homeResourceHandle, rList);<br>
+ * Step 5: bindResource(homeResourceHandle, rList);<br>
* At the end of Step 5, resource "a/home" will contain a references to "a/kitchen" and "a/room" <br>
*/
- OCStackResult bindResources(const OCResourceHandle containerHandle, const std::vector<OCResourceHandle>& addedResourceHandleList);
+ OCStackResult bindResources(const OCResourceHandle collectionHandle, const std::vector<OCResourceHandle>& addedResourceHandleList);
/**
- * Unbind a resource from a container resource.
+ * Unbind a resource from a collection resource.
*
- * @param containerHandle - handle to the container resource
- * @param resourceHandle resource handle to be unbound from the container resource
+ * @param collectionHandle - handle to the collection resource
+ * @param resourceHandle resource handle to be unbound from the collection resource
*
* @return OCStackResult return value of this API. Returns OC_STACK_OK if success. <br>
* NOTE: OCStackResult is defined in ocstack.h.<br>
- * NOTE: unbindResource must be used only after the both container resource and
- * resource to unbind from a container are created and respective handles obtained<br>
+ * NOTE: unbindResource must be used only after the both collection resource and
+ * resource to unbind from a collection are created and respective handles obtained<br>
* <b> Example </b> <br>
* Step 1: registerResource(homeResourceHandle, "a/home", "home", Link_Interface, entityHandler, OC_DISCOVERABLE | OC_OBSERVABLE);<br>
* Step 2: registerResource(kitchenResourceHandle, "a/kitchen", "kitchen", Link_Interface, entityHandler, OC_DISCOVERABLE | OC_OBSERVABLE);<br>
- * Step 3: bindResourceToContainer(homeResourceHandle, kitchenResourceHandle);<br>
+ * Step 3: bindResource(homeResourceHandle, kitchenResourceHandle);<br>
* Step 4: unbindResource(homeResourceHandle, kitchenResourceHandle);<br>
* At the end of Step 4, resource "a/home" will no longer reference "a/kitchen". <br>
*/
- OCStackResult unbindResource(OCResourceHandle containerHandle, OCResourceHandle resourceHandle);
+ OCStackResult unbindResource(const OCResourceHandle collectionHandle, const OCResourceHandle resourceHandle);
/**
- * Unbind resources from a container resource.
+ * Unbind resources from a collection resource.
*
- * @param containerHandle - handle to the container resource
- * @param resourceHandleList List of resource handles to be unbound from the container resource
+ * @param collectionHandle - handle to the collection resource
+ * @param resourceHandleList List of resource handles to be unbound from the collection resource
*
* @return OCStackResult return value of this API. Returns OC_STACK_OK if success. <br>
*
* NOTE: OCStackResult is defined in ocstack.h.<br>
- * NOTE: unbindResources must be used only after the both container resource and
- * list of resources resource to unbind from a container are created and respective handles obtained. <br>
+ * NOTE: unbindResources must be used only after the both collection resource and
+ * list of resources resource to unbind from a collection are created and respective handles obtained. <br>
* <b>Example</b> <br>
* Step 1: registerResource(homeResourceHandle, "a/home", "home", Link_Interface, homeEntityHandler, OC_DISCOVERABLE | OC_OBSERVABLE);<br>
* Step 2: registerResource(kitchenResourceHandle, "a/kitchen", "kitchen", Link_Interface, kitchenEntityHandler, OC_DISCOVERABLE | OC_OBSERVABLE);<br>
* Step 3: registerResource(roomResourceHandle, "a/room", "room", Link_Interface, roomEntityHandler, OC_DISCOVERABLE | OC_OBSERVABLE);<br>
* Step 4: std::vector<OCResourceHandle> rList; rList.push_back(kitchenResourceHandle); rList.push_back(roomResourceHandle);<br>
- * Step 5: bindResourceToContainer(homeResourceHandle, rList);<br>
+ * Step 5: bindResource(homeResourceHandle, rList);<br>
* Step 6: unbindResources(homeResourceHandle, rList);<br>
* At the end of Step 6, resource "a/home" will no longer reference to "a/kitchen" and "a/room"<br>
*/
- OCStackResult unbindResources(OCResourceHandle containerHandle, std::vector<OCResourceHandle>& resourceHandleList);
+ OCStackResult unbindResources(const OCResourceHandle collectionHandle, const std::vector<OCResourceHandle>& resourceHandleList);
/**
* Binds a type to a particular resource