leo hendrickson
/
S
Diff: simple-mbed-cloud-client/mbed-cloud-client/mbed-client/source/m2mendpoint.cpp
- Revision:
- 0:25fa8795676b
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/simple-mbed-cloud-client/mbed-cloud-client/mbed-client/source/m2mendpoint.cpp Sun Apr 18 15:20:23 2021 +0000 @@ -0,0 +1,239 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifdef MBED_CLOUD_CLIENT_EDGE_EXTENSION + +#include "mbed-client/m2mendpoint.h" +#include "mbed-client/m2mobject.h" +#include "mbed-client/m2mconstants.h" +#include "include/m2mtlvserializer.h" +#include "include/m2mtlvdeserializer.h" +#include "include/m2mreporthandler.h" +#include "mbed-trace/mbed_trace.h" +#include "mbed-client/m2mstringbuffer.h" +#include "mbed-client/m2mstring.h" +#include "nsdl-c/sn_nsdl_lib.h" + +#include <stdlib.h> + +#define BUFFER_SIZE 10 +#define TRACE_GROUP "mClt" + +M2MEndpoint::M2MEndpoint(const String &object_name, char *path) +: M2MBase(object_name, + M2MBase::Dynamic, +#ifndef DISABLE_RESOURCE_TYPE + "", +#endif + path, + false, + false), + _observation_handler(NULL), + _ctx(NULL), + _changed(true), + _deleted(false) +{ + M2MBase::set_base_type(M2MBase::ObjectDirectory); + get_nsdl_resource()->always_publish = false; +#ifdef RESOURCE_ATTRIBUTES_LIST + sn_nsdl_attribute_item_s item; + item.attribute_name = ATTR_ENDPOINT_NAME; + item.value = (char*)alloc_string_copy((uint8_t*) object_name.c_str(), object_name.length()); + sn_nsdl_set_resource_attribute(get_nsdl_resource()->static_resource_parameters, &item); +#endif +} + + +M2MEndpoint::~M2MEndpoint() +{ + tr_debug("~M2MEndpoint %p", this); + if(!_object_list.empty()) { + + M2MObjectList::const_iterator it; + it = _object_list.begin(); + M2MObject* obj = NULL; + uint16_t index = 0; + for (; it!=_object_list.end(); it++, index++ ) { + //Free allocated memory for object instances. + obj = *it; + tr_debug(" deleting object %p", obj); + delete obj; + } + + _object_list.clear(); + } + + free_resources(); +} + +M2MObject* M2MEndpoint::create_object(const String &name) +{ + M2MObject *obj = NULL; + if (object(name) == NULL) { + char *path = create_path(*this, name.c_str()); + obj = new M2MObject(name, path, false); + if (obj != NULL) { + obj->set_endpoint(this); + _object_list.push_back(obj); + } + } + return obj; +} + +bool M2MEndpoint::remove_object(const String &name) +{ + bool success = false; + if (object_count() == 0) { + return success; + } + M2MObjectList::const_iterator it; + M2MObject *obj = NULL; + int pos = 0; + it = _object_list.begin(); + for (; it != _object_list.end(); it++, pos++) { + obj = *it; + if (name == obj->name()) { + delete obj; + _object_list.erase(pos); + success = true; + break; + } + } + return success; + +} + +M2MObject* M2MEndpoint::object(const String &name) const +{ + M2MObject *obj = NULL; + if (object_count() == 0) { + return obj; + } + M2MObjectList::const_iterator it = _object_list.begin(); + for (; it != _object_list.end(); it++) { + if (name == (*it)->name()) { + obj = *it; + break; + } + } + return obj; +} + +const M2MObjectList& M2MEndpoint::objects() const +{ + return _object_list; +} + +uint16_t M2MEndpoint::object_count() const +{ + return _object_list.size(); +} + +M2MObservationHandler* M2MEndpoint::observation_handler() const +{ + return _observation_handler; +} + +void M2MEndpoint::set_observation_handler(M2MObservationHandler *handler) +{ + _observation_handler = handler; +} + +void M2MEndpoint::add_observation_level(M2MBase::Observation observation_level) +{ + (void)observation_level; +} + +void M2MEndpoint::remove_observation_level(M2MBase::Observation observation_level) +{ + (void)observation_level; +} + +sn_coap_hdr_s* M2MEndpoint::handle_get_request(nsdl_s *nsdl, + sn_coap_hdr_s *received_coap_header, + M2MObservationHandler *observation_handler) +{ + tr_debug("M2MEndpoint::handle_get_request()"); + sn_coap_msg_code_e msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED; + sn_coap_hdr_s * coap_response = sn_nsdl_build_response(nsdl, + received_coap_header, msg_code); + return coap_response; + +} + +sn_coap_hdr_s* M2MEndpoint::handle_put_request(nsdl_s *nsdl, + sn_coap_hdr_s *received_coap_header, + M2MObservationHandler */*observation_handler*/, + bool &/*execute_value_updated*/) +{ + tr_debug("M2MEndpoint::handle_put_request()"); + sn_coap_msg_code_e msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED; + sn_coap_hdr_s * coap_response = sn_nsdl_build_response(nsdl, + received_coap_header, msg_code); + return coap_response; +} + + +sn_coap_hdr_s* M2MEndpoint::handle_post_request(nsdl_s *nsdl, + sn_coap_hdr_s *received_coap_header, + M2MObservationHandler *observation_handler, + bool &execute_value_updated, + sn_nsdl_addr_s *) +{ + tr_debug("M2MEndpoint::handle_post_request()"); + sn_coap_msg_code_e msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED; + sn_coap_hdr_s * coap_response = sn_nsdl_build_response(nsdl, + received_coap_header, msg_code); + return coap_response; +} + +void M2MEndpoint::set_context(void *ctx) +{ + _ctx = ctx; +} + +void* M2MEndpoint::get_context() const +{ + return _ctx; +} + +void M2MEndpoint::set_changed() +{ + _changed = true; +} + +void M2MEndpoint::clear_changed() +{ + _changed = false; +} + +bool M2MEndpoint::get_changed() const +{ + return _changed; +} + +void M2MEndpoint::set_deleted() +{ + _deleted = true; + set_changed(); +} + +bool M2MEndpoint::is_deleted() +{ + return _deleted; +} + +#endif // MBED_CLOUD_CLIENT_EDGE_EXTENSION