Pfp Cybersecurity (Aka Power Fingerprinting, Inc.) / Mbed OS pfp-emon-nxp

Dependencies:   FXAS21002 FXOS8700Q

Committer:
vithyat
Date:
Wed Aug 28 19:24:56 2019 +0000
Revision:
0:977e87915078
init

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vithyat 0:977e87915078 1 /*
vithyat 0:977e87915078 2 * Copyright (c) 2015 ARM Limited. All rights reserved.
vithyat 0:977e87915078 3 * SPDX-License-Identifier: Apache-2.0
vithyat 0:977e87915078 4 * Licensed under the Apache License, Version 2.0 (the License); you may
vithyat 0:977e87915078 5 * not use this file except in compliance with the License.
vithyat 0:977e87915078 6 * You may obtain a copy of the License at
vithyat 0:977e87915078 7 *
vithyat 0:977e87915078 8 * http://www.apache.org/licenses/LICENSE-2.0
vithyat 0:977e87915078 9 *
vithyat 0:977e87915078 10 * Unless required by applicable law or agreed to in writing, software
vithyat 0:977e87915078 11 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
vithyat 0:977e87915078 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
vithyat 0:977e87915078 13 * See the License for the specific language governing permissions and
vithyat 0:977e87915078 14 * limitations under the License.
vithyat 0:977e87915078 15 */
vithyat 0:977e87915078 16 #include "mbed-client/m2mobjectinstance.h"
vithyat 0:977e87915078 17 #include "mbed-client/m2mobject.h"
vithyat 0:977e87915078 18 #include "mbed-client/m2mconstants.h"
vithyat 0:977e87915078 19 #include "mbed-client/m2mresource.h"
vithyat 0:977e87915078 20 #include "mbed-client/m2mresource.h"
vithyat 0:977e87915078 21 #include "mbed-client/m2mobservationhandler.h"
vithyat 0:977e87915078 22 #include "mbed-client/m2mstring.h"
vithyat 0:977e87915078 23 #include "mbed-client/m2mstringbuffer.h"
vithyat 0:977e87915078 24 #include "include/m2mtlvserializer.h"
vithyat 0:977e87915078 25 #include "include/m2mtlvdeserializer.h"
vithyat 0:977e87915078 26 #include "include/m2mreporthandler.h"
vithyat 0:977e87915078 27 #include "mbed-trace/mbed_trace.h"
vithyat 0:977e87915078 28 #include "include/m2mcallbackstorage.h"
vithyat 0:977e87915078 29 #include <stdlib.h>
vithyat 0:977e87915078 30
vithyat 0:977e87915078 31 #define BUFFER_SIZE 10
vithyat 0:977e87915078 32 #define TRACE_GROUP "mClt"
vithyat 0:977e87915078 33
vithyat 0:977e87915078 34 M2MObjectInstance::M2MObjectInstance(M2MObject& parent,
vithyat 0:977e87915078 35 const String &resource_type,
vithyat 0:977e87915078 36 char *path,
vithyat 0:977e87915078 37 bool external_blockwise_store)
vithyat 0:977e87915078 38 : M2MBase("",
vithyat 0:977e87915078 39 M2MBase::Dynamic,
vithyat 0:977e87915078 40 #ifndef DISABLE_RESOURCE_TYPE
vithyat 0:977e87915078 41 resource_type,
vithyat 0:977e87915078 42 #endif
vithyat 0:977e87915078 43 path,
vithyat 0:977e87915078 44 external_blockwise_store,
vithyat 0:977e87915078 45 false),
vithyat 0:977e87915078 46 _parent(parent)
vithyat 0:977e87915078 47 {
vithyat 0:977e87915078 48 M2MBase::set_base_type(M2MBase::ObjectInstance);
vithyat 0:977e87915078 49 M2MBase::set_coap_content_type(COAP_CONTENT_OMA_TLV_TYPE_OLD);
vithyat 0:977e87915078 50 M2MBase::set_operation(M2MBase::GET_ALLOWED);
vithyat 0:977e87915078 51 }
vithyat 0:977e87915078 52
vithyat 0:977e87915078 53 M2MObjectInstance::M2MObjectInstance(M2MObject& parent, const lwm2m_parameters_s* static_res)
vithyat 0:977e87915078 54 : M2MBase(static_res), _parent(parent)
vithyat 0:977e87915078 55 {
vithyat 0:977e87915078 56 M2MBase::set_coap_content_type(COAP_CONTENT_OMA_TLV_TYPE_OLD);
vithyat 0:977e87915078 57 M2MBase::set_operation(M2MBase::GET_ALLOWED);
vithyat 0:977e87915078 58 }
vithyat 0:977e87915078 59
vithyat 0:977e87915078 60 M2MObjectInstance::~M2MObjectInstance()
vithyat 0:977e87915078 61 {
vithyat 0:977e87915078 62 if(!_resource_list.empty()) {
vithyat 0:977e87915078 63 M2MResource* res = NULL;
vithyat 0:977e87915078 64 M2MResourceList::const_iterator it;
vithyat 0:977e87915078 65 it = _resource_list.begin();
vithyat 0:977e87915078 66 for (; it!=_resource_list.end(); it++ ) {
vithyat 0:977e87915078 67 //Free allocated memory for resources.
vithyat 0:977e87915078 68 res = *it;
vithyat 0:977e87915078 69 delete res;
vithyat 0:977e87915078 70 }
vithyat 0:977e87915078 71 _resource_list.clear();
vithyat 0:977e87915078 72 }
vithyat 0:977e87915078 73
vithyat 0:977e87915078 74 free_resources();
vithyat 0:977e87915078 75 }
vithyat 0:977e87915078 76
vithyat 0:977e87915078 77 // TBD, ResourceType to the base class struct?? TODO!
vithyat 0:977e87915078 78 M2MResource* M2MObjectInstance::create_static_resource(const lwm2m_parameters_s* static_res,
vithyat 0:977e87915078 79 M2MResourceInstance::ResourceType type)
vithyat 0:977e87915078 80 {
vithyat 0:977e87915078 81 tr_debug("M2MObjectInstance::create_static_resource(lwm2m_parameters_s resource_name %s)", static_res->identifier.name);
vithyat 0:977e87915078 82 M2MResource *res = NULL;
vithyat 0:977e87915078 83 if (validate_string_length(static_res->identifier.name, 1, MAX_ALLOWED_STRING_LENGTH) == false) {
vithyat 0:977e87915078 84 return res;
vithyat 0:977e87915078 85 }
vithyat 0:977e87915078 86 if(!resource(static_res->identifier.name)) {
vithyat 0:977e87915078 87 res = new M2MResource(*this, static_res, convert_resource_type(type));
vithyat 0:977e87915078 88 if(res) {
vithyat 0:977e87915078 89 res->add_observation_level(observation_level());
vithyat 0:977e87915078 90 //if (multiple_instance) {
vithyat 0:977e87915078 91 //res->set_coap_content_type(COAP_CONTENT_OMA_TLV_TYPE_OLD);
vithyat 0:977e87915078 92 //}
vithyat 0:977e87915078 93 _resource_list.push_back(res);
vithyat 0:977e87915078 94 set_changed();
vithyat 0:977e87915078 95 }
vithyat 0:977e87915078 96 }
vithyat 0:977e87915078 97 return res;
vithyat 0:977e87915078 98 }
vithyat 0:977e87915078 99
vithyat 0:977e87915078 100 M2MResource* M2MObjectInstance::create_static_resource(const String &resource_name,
vithyat 0:977e87915078 101 const String &resource_type,
vithyat 0:977e87915078 102 M2MResourceInstance::ResourceType type,
vithyat 0:977e87915078 103 const uint8_t *value,
vithyat 0:977e87915078 104 const uint8_t value_length,
vithyat 0:977e87915078 105 bool multiple_instance,
vithyat 0:977e87915078 106 bool external_blockwise_store)
vithyat 0:977e87915078 107 {
vithyat 0:977e87915078 108 tr_debug("M2MObjectInstance::create_static_resource(resource_name %s)",resource_name.c_str());
vithyat 0:977e87915078 109 M2MResource *res = NULL;
vithyat 0:977e87915078 110 if (validate_string_length(resource_name, 1, MAX_ALLOWED_STRING_LENGTH) == false) {
vithyat 0:977e87915078 111 return res;
vithyat 0:977e87915078 112 }
vithyat 0:977e87915078 113 if(!resource(resource_name)) {
vithyat 0:977e87915078 114 char *path = create_path(*this, resource_name.c_str());
vithyat 0:977e87915078 115
vithyat 0:977e87915078 116 if (path) {
vithyat 0:977e87915078 117 res = new M2MResource(*this, resource_name, M2MBase::Static, resource_type, convert_resource_type(type),
vithyat 0:977e87915078 118 value, value_length, path,
vithyat 0:977e87915078 119 multiple_instance, external_blockwise_store);
vithyat 0:977e87915078 120 if(res) {
vithyat 0:977e87915078 121 res->add_observation_level(observation_level());
vithyat 0:977e87915078 122 if (multiple_instance) {
vithyat 0:977e87915078 123 res->set_coap_content_type(COAP_CONTENT_OMA_TLV_TYPE_OLD);
vithyat 0:977e87915078 124 }
vithyat 0:977e87915078 125 _resource_list.push_back(res);
vithyat 0:977e87915078 126 set_changed();
vithyat 0:977e87915078 127 }
vithyat 0:977e87915078 128 }
vithyat 0:977e87915078 129 }
vithyat 0:977e87915078 130 return res;
vithyat 0:977e87915078 131 }
vithyat 0:977e87915078 132
vithyat 0:977e87915078 133 M2MResource* M2MObjectInstance::create_dynamic_resource(const lwm2m_parameters_s* static_res,
vithyat 0:977e87915078 134 M2MResourceInstance::ResourceType type,
vithyat 0:977e87915078 135 bool observable)
vithyat 0:977e87915078 136 {
vithyat 0:977e87915078 137 tr_debug("M2MObjectInstance::create_dynamic_resource(resource_name %s)", static_res->identifier.name);
vithyat 0:977e87915078 138 M2MResource *res = NULL;
vithyat 0:977e87915078 139
vithyat 0:977e87915078 140 if (validate_string_length(static_res->identifier.name, 1, MAX_ALLOWED_STRING_LENGTH) == false) {
vithyat 0:977e87915078 141 return res;
vithyat 0:977e87915078 142 }
vithyat 0:977e87915078 143 if(!resource(static_res->identifier.name)) {
vithyat 0:977e87915078 144 res = new M2MResource(*this, static_res, convert_resource_type(type));
vithyat 0:977e87915078 145 if(res) {
vithyat 0:977e87915078 146 //if (multiple_instance) { // TODO!
vithyat 0:977e87915078 147 // res->set_coap_content_type(COAP_CONTENT_OMA_TLV_TYPE);
vithyat 0:977e87915078 148 //}
vithyat 0:977e87915078 149 res->add_observation_level(observation_level());
vithyat 0:977e87915078 150 _resource_list.push_back(res);
vithyat 0:977e87915078 151 set_changed();
vithyat 0:977e87915078 152 }
vithyat 0:977e87915078 153 }
vithyat 0:977e87915078 154 return res;
vithyat 0:977e87915078 155 }
vithyat 0:977e87915078 156
vithyat 0:977e87915078 157 M2MResource* M2MObjectInstance::create_dynamic_resource(const String &resource_name,
vithyat 0:977e87915078 158 const String &resource_type,
vithyat 0:977e87915078 159 M2MResourceInstance::ResourceType type,
vithyat 0:977e87915078 160 bool observable,
vithyat 0:977e87915078 161 bool multiple_instance,
vithyat 0:977e87915078 162 bool external_blockwise_store)
vithyat 0:977e87915078 163 {
vithyat 0:977e87915078 164 tr_debug("M2MObjectInstance::create_dynamic_resource(resource_name %s)",resource_name.c_str());
vithyat 0:977e87915078 165 M2MResource *res = NULL;
vithyat 0:977e87915078 166 if (validate_string_length(resource_name, 1, MAX_ALLOWED_STRING_LENGTH) == false) {
vithyat 0:977e87915078 167 return res;
vithyat 0:977e87915078 168 }
vithyat 0:977e87915078 169 if(!resource(resource_name)) {
vithyat 0:977e87915078 170 char *path = create_path(*this, resource_name.c_str());
vithyat 0:977e87915078 171 if (path) {
vithyat 0:977e87915078 172 res = new M2MResource(*this, resource_name, M2MBase::Dynamic, resource_type, convert_resource_type(type),
vithyat 0:977e87915078 173 observable, path,
vithyat 0:977e87915078 174 multiple_instance, external_blockwise_store);
vithyat 0:977e87915078 175 if(res) {
vithyat 0:977e87915078 176 if (multiple_instance) {
vithyat 0:977e87915078 177 res->set_coap_content_type(COAP_CONTENT_OMA_TLV_TYPE_OLD);
vithyat 0:977e87915078 178 }
vithyat 0:977e87915078 179 res->add_observation_level(observation_level());
vithyat 0:977e87915078 180 _resource_list.push_back(res);
vithyat 0:977e87915078 181 set_changed();
vithyat 0:977e87915078 182 }
vithyat 0:977e87915078 183 }
vithyat 0:977e87915078 184 }
vithyat 0:977e87915078 185 return res;
vithyat 0:977e87915078 186 }
vithyat 0:977e87915078 187
vithyat 0:977e87915078 188 M2MResourceInstance* M2MObjectInstance::create_static_resource_instance(const String &resource_name,
vithyat 0:977e87915078 189 const String &resource_type,
vithyat 0:977e87915078 190 M2MResourceInstance::ResourceType type,
vithyat 0:977e87915078 191 const uint8_t *value,
vithyat 0:977e87915078 192 const uint8_t value_length,
vithyat 0:977e87915078 193 uint16_t instance_id,
vithyat 0:977e87915078 194 bool external_blockwise_store)
vithyat 0:977e87915078 195 {
vithyat 0:977e87915078 196 tr_debug("M2MObjectInstance::create_static_resource_instance(resource_name %s)",resource_name.c_str());
vithyat 0:977e87915078 197 M2MResourceInstance *instance = NULL;
vithyat 0:977e87915078 198 if (validate_string_length(resource_name, 1, MAX_ALLOWED_STRING_LENGTH) == false) {
vithyat 0:977e87915078 199
vithyat 0:977e87915078 200 return instance;
vithyat 0:977e87915078 201 }
vithyat 0:977e87915078 202 M2MResource *res = resource(resource_name);
vithyat 0:977e87915078 203 if(!res) {
vithyat 0:977e87915078 204 char *path = create_path(*this, resource_name.c_str());
vithyat 0:977e87915078 205 if (path) {
vithyat 0:977e87915078 206 res = new M2MResource(*this, resource_name, M2MBase::Static, resource_type, convert_resource_type(type),
vithyat 0:977e87915078 207 value, value_length, path,
vithyat 0:977e87915078 208 true, external_blockwise_store);
vithyat 0:977e87915078 209 _resource_list.push_back(res);
vithyat 0:977e87915078 210 set_changed();
vithyat 0:977e87915078 211 res->set_operation(M2MBase::GET_ALLOWED);
vithyat 0:977e87915078 212 res->set_observable(false);
vithyat 0:977e87915078 213 res->set_register_uri(false);
vithyat 0:977e87915078 214 }
vithyat 0:977e87915078 215 }
vithyat 0:977e87915078 216 if(res && res->supports_multiple_instances()&& (res->resource_instance(instance_id) == NULL)) {
vithyat 0:977e87915078 217 char *path = M2MBase::create_path(*res, instance_id);
vithyat 0:977e87915078 218 if (path) {
vithyat 0:977e87915078 219 instance = new M2MResourceInstance(*res, "", M2MBase::Static, resource_type, convert_resource_type(type),
vithyat 0:977e87915078 220 value, value_length,
vithyat 0:977e87915078 221 path, external_blockwise_store,true);
vithyat 0:977e87915078 222 if(instance) {
vithyat 0:977e87915078 223 instance->set_operation(M2MBase::GET_ALLOWED);
vithyat 0:977e87915078 224 instance->set_instance_id(instance_id);
vithyat 0:977e87915078 225 res->add_resource_instance(instance);
vithyat 0:977e87915078 226 }
vithyat 0:977e87915078 227 }
vithyat 0:977e87915078 228 }
vithyat 0:977e87915078 229 return instance;
vithyat 0:977e87915078 230 }
vithyat 0:977e87915078 231
vithyat 0:977e87915078 232 M2MResourceInstance* M2MObjectInstance::create_dynamic_resource_instance(const String &resource_name,
vithyat 0:977e87915078 233 const String &resource_type,
vithyat 0:977e87915078 234 M2MResourceInstance::ResourceType type,
vithyat 0:977e87915078 235 bool observable,
vithyat 0:977e87915078 236 uint16_t instance_id,
vithyat 0:977e87915078 237 bool external_blockwise_store)
vithyat 0:977e87915078 238 {
vithyat 0:977e87915078 239 tr_debug("M2MObjectInstance::create_dynamic_resource_instance(resource_name %s)",resource_name.c_str());
vithyat 0:977e87915078 240 M2MResourceInstance *instance = NULL;
vithyat 0:977e87915078 241 if (validate_string_length(resource_name, 1, MAX_ALLOWED_STRING_LENGTH) == false) {
vithyat 0:977e87915078 242 return instance;
vithyat 0:977e87915078 243 }
vithyat 0:977e87915078 244 M2MResource *res = resource(resource_name);
vithyat 0:977e87915078 245 if(!res) {
vithyat 0:977e87915078 246 char *path = create_path(*this, resource_name.c_str());
vithyat 0:977e87915078 247 if (path) {
vithyat 0:977e87915078 248 res = new M2MResource(*this, resource_name, M2MBase::Dynamic, resource_type, convert_resource_type(type),
vithyat 0:977e87915078 249 false, path, true, external_blockwise_store);
vithyat 0:977e87915078 250 _resource_list.push_back(res);
vithyat 0:977e87915078 251 res->set_register_uri(false);
vithyat 0:977e87915078 252 res->set_operation(M2MBase::GET_ALLOWED);
vithyat 0:977e87915078 253 }
vithyat 0:977e87915078 254 }
vithyat 0:977e87915078 255 if (res && res->supports_multiple_instances() && (res->resource_instance(instance_id) == NULL)) {
vithyat 0:977e87915078 256 char *path = create_path(*res, instance_id);
vithyat 0:977e87915078 257 if (path) {
vithyat 0:977e87915078 258 instance = new M2MResourceInstance(*res, "", M2MBase::Dynamic, resource_type, convert_resource_type(type),
vithyat 0:977e87915078 259 path, external_blockwise_store,true);
vithyat 0:977e87915078 260 if(instance) {
vithyat 0:977e87915078 261 instance->set_operation(M2MBase::GET_ALLOWED);
vithyat 0:977e87915078 262 instance->set_observable(observable);
vithyat 0:977e87915078 263 instance->set_instance_id(instance_id);
vithyat 0:977e87915078 264 res->add_resource_instance(instance);
vithyat 0:977e87915078 265 set_changed();
vithyat 0:977e87915078 266 }
vithyat 0:977e87915078 267 }
vithyat 0:977e87915078 268 }
vithyat 0:977e87915078 269 return instance;
vithyat 0:977e87915078 270 }
vithyat 0:977e87915078 271
vithyat 0:977e87915078 272 bool M2MObjectInstance::remove_resource(const String &resource_name)
vithyat 0:977e87915078 273 {
vithyat 0:977e87915078 274 return remove_resource(resource_name.c_str());
vithyat 0:977e87915078 275 }
vithyat 0:977e87915078 276
vithyat 0:977e87915078 277 bool M2MObjectInstance::remove_resource(const char *resource_name)
vithyat 0:977e87915078 278 {
vithyat 0:977e87915078 279 tr_debug("M2MObjectInstance::remove_resource(resource_name %s)", resource_name);
vithyat 0:977e87915078 280
vithyat 0:977e87915078 281 bool success = false;
vithyat 0:977e87915078 282 if(!_resource_list.empty()) {
vithyat 0:977e87915078 283 M2MResource* res = NULL;
vithyat 0:977e87915078 284 M2MResourceList::const_iterator it;
vithyat 0:977e87915078 285 it = _resource_list.begin();
vithyat 0:977e87915078 286 int pos = 0;
vithyat 0:977e87915078 287 for ( ; it != _resource_list.end(); it++, pos++ ) {
vithyat 0:977e87915078 288 if(strcmp((*it)->name(), resource_name) == 0) {
vithyat 0:977e87915078 289 // Resource found and deleted.
vithyat 0:977e87915078 290 res = *it;
vithyat 0:977e87915078 291 delete res;
vithyat 0:977e87915078 292 _resource_list.erase(pos);
vithyat 0:977e87915078 293 set_changed();
vithyat 0:977e87915078 294 success = true;
vithyat 0:977e87915078 295 break;
vithyat 0:977e87915078 296 }
vithyat 0:977e87915078 297 }
vithyat 0:977e87915078 298 }
vithyat 0:977e87915078 299 return success;
vithyat 0:977e87915078 300 }
vithyat 0:977e87915078 301
vithyat 0:977e87915078 302 bool M2MObjectInstance::remove_resource_instance(const String &resource_name,
vithyat 0:977e87915078 303 uint16_t inst_id)
vithyat 0:977e87915078 304 {
vithyat 0:977e87915078 305 tr_debug("M2MObjectInstance::remove_resource_instance(resource_name %s inst_id %d)",
vithyat 0:977e87915078 306 resource_name.c_str(), inst_id);
vithyat 0:977e87915078 307 bool success = false;
vithyat 0:977e87915078 308 M2MResource *res = resource(resource_name);
vithyat 0:977e87915078 309 if(res) {
vithyat 0:977e87915078 310 const M2MResourceInstanceList &list = res->resource_instances();
vithyat 0:977e87915078 311 M2MResourceInstanceList::const_iterator it;
vithyat 0:977e87915078 312 it = list.begin();
vithyat 0:977e87915078 313 for ( ; it != list.end(); it++) {
vithyat 0:977e87915078 314 if((*it)->instance_id() == inst_id) {
vithyat 0:977e87915078 315 success = res->remove_resource_instance(inst_id);
vithyat 0:977e87915078 316 if(res->resource_instance_count() == 0) {
vithyat 0:977e87915078 317 M2MResourceList::const_iterator itr;
vithyat 0:977e87915078 318 itr = _resource_list.begin();
vithyat 0:977e87915078 319 int pos = 0;
vithyat 0:977e87915078 320 for ( ; itr != _resource_list.end(); itr++, pos++ ) {
vithyat 0:977e87915078 321 if(strcmp((*itr)->name(),resource_name.c_str()) == 0) {
vithyat 0:977e87915078 322 delete res;
vithyat 0:977e87915078 323 _resource_list.erase(pos);
vithyat 0:977e87915078 324 set_changed();
vithyat 0:977e87915078 325 break;
vithyat 0:977e87915078 326 }
vithyat 0:977e87915078 327 }
vithyat 0:977e87915078 328 }
vithyat 0:977e87915078 329 break;
vithyat 0:977e87915078 330 }
vithyat 0:977e87915078 331 }
vithyat 0:977e87915078 332 }
vithyat 0:977e87915078 333 return success;
vithyat 0:977e87915078 334 }
vithyat 0:977e87915078 335
vithyat 0:977e87915078 336 M2MResource* M2MObjectInstance::resource(const String &resource_name) const
vithyat 0:977e87915078 337 {
vithyat 0:977e87915078 338 return resource(resource_name.c_str());
vithyat 0:977e87915078 339 }
vithyat 0:977e87915078 340
vithyat 0:977e87915078 341 M2MResource* M2MObjectInstance::resource(const char *resource_name) const
vithyat 0:977e87915078 342 {
vithyat 0:977e87915078 343 M2MResource *res = NULL;
vithyat 0:977e87915078 344 if(!_resource_list.empty()) {
vithyat 0:977e87915078 345 M2MResourceList::const_iterator it;
vithyat 0:977e87915078 346 it = _resource_list.begin();
vithyat 0:977e87915078 347 for (; it!=_resource_list.end(); it++ ) {
vithyat 0:977e87915078 348 if(strcmp((*it)->name(), resource_name) == 0) {
vithyat 0:977e87915078 349 res = *it;
vithyat 0:977e87915078 350 break;
vithyat 0:977e87915078 351 }
vithyat 0:977e87915078 352 }
vithyat 0:977e87915078 353 }
vithyat 0:977e87915078 354 return res;
vithyat 0:977e87915078 355 }
vithyat 0:977e87915078 356
vithyat 0:977e87915078 357 const M2MResourceList& M2MObjectInstance::resources() const
vithyat 0:977e87915078 358 {
vithyat 0:977e87915078 359 return _resource_list;
vithyat 0:977e87915078 360 }
vithyat 0:977e87915078 361
vithyat 0:977e87915078 362 uint16_t M2MObjectInstance::resource_count() const
vithyat 0:977e87915078 363 {
vithyat 0:977e87915078 364 uint16_t count = 0;
vithyat 0:977e87915078 365 if(!_resource_list.empty()) {
vithyat 0:977e87915078 366 M2MResourceList::const_iterator it;
vithyat 0:977e87915078 367 it = _resource_list.begin();
vithyat 0:977e87915078 368 for ( ; it != _resource_list.end(); it++ ) {
vithyat 0:977e87915078 369 if((*it)->supports_multiple_instances()) {
vithyat 0:977e87915078 370 count += (*it)->resource_instance_count();
vithyat 0:977e87915078 371 } else {
vithyat 0:977e87915078 372 count++;
vithyat 0:977e87915078 373 }
vithyat 0:977e87915078 374 }
vithyat 0:977e87915078 375 }
vithyat 0:977e87915078 376 return count;
vithyat 0:977e87915078 377 }
vithyat 0:977e87915078 378
vithyat 0:977e87915078 379 uint16_t M2MObjectInstance::resource_count(const String& resource) const
vithyat 0:977e87915078 380 {
vithyat 0:977e87915078 381
vithyat 0:977e87915078 382 return resource_count(resource.c_str());
vithyat 0:977e87915078 383 }
vithyat 0:977e87915078 384
vithyat 0:977e87915078 385 uint16_t M2MObjectInstance::resource_count(const char *resource) const
vithyat 0:977e87915078 386 {
vithyat 0:977e87915078 387 uint16_t count = 0;
vithyat 0:977e87915078 388 if(!_resource_list.empty()) {
vithyat 0:977e87915078 389 M2MResourceList::const_iterator it;
vithyat 0:977e87915078 390 it = _resource_list.begin();
vithyat 0:977e87915078 391 for ( ; it != _resource_list.end(); it++ ) {
vithyat 0:977e87915078 392 if(strcmp((*it)->name(), resource) == 0) {
vithyat 0:977e87915078 393 if((*it)->supports_multiple_instances()) {
vithyat 0:977e87915078 394 count += (*it)->resource_instance_count();
vithyat 0:977e87915078 395 } else {
vithyat 0:977e87915078 396 count++;
vithyat 0:977e87915078 397 }
vithyat 0:977e87915078 398 }
vithyat 0:977e87915078 399 }
vithyat 0:977e87915078 400 }
vithyat 0:977e87915078 401 return count;
vithyat 0:977e87915078 402 }
vithyat 0:977e87915078 403
vithyat 0:977e87915078 404 M2MObservationHandler* M2MObjectInstance::observation_handler() const
vithyat 0:977e87915078 405 {
vithyat 0:977e87915078 406 // XXX: need to check the flag too
vithyat 0:977e87915078 407 return _parent.observation_handler();
vithyat 0:977e87915078 408 }
vithyat 0:977e87915078 409
vithyat 0:977e87915078 410 void M2MObjectInstance::set_observation_handler(M2MObservationHandler *handler)
vithyat 0:977e87915078 411 {
vithyat 0:977e87915078 412 // XXX: need to set the flag too
vithyat 0:977e87915078 413 _parent.set_observation_handler(handler);
vithyat 0:977e87915078 414 }
vithyat 0:977e87915078 415
vithyat 0:977e87915078 416 void M2MObjectInstance::add_observation_level(M2MBase::Observation observation_level)
vithyat 0:977e87915078 417 {
vithyat 0:977e87915078 418 M2MBase::add_observation_level(observation_level);
vithyat 0:977e87915078 419 if(!_resource_list.empty()) {
vithyat 0:977e87915078 420 M2MResourceList::const_iterator it;
vithyat 0:977e87915078 421 it = _resource_list.begin();
vithyat 0:977e87915078 422 for ( ; it != _resource_list.end(); it++ ) {
vithyat 0:977e87915078 423 (*it)->add_observation_level(observation_level);
vithyat 0:977e87915078 424 }
vithyat 0:977e87915078 425 }
vithyat 0:977e87915078 426 }
vithyat 0:977e87915078 427
vithyat 0:977e87915078 428 void M2MObjectInstance::remove_observation_level(M2MBase::Observation observation_level)
vithyat 0:977e87915078 429 {
vithyat 0:977e87915078 430 M2MBase::remove_observation_level(observation_level);
vithyat 0:977e87915078 431 if(!_resource_list.empty()) {
vithyat 0:977e87915078 432 M2MResourceList::const_iterator it;
vithyat 0:977e87915078 433 it = _resource_list.begin();
vithyat 0:977e87915078 434 for ( ; it != _resource_list.end(); it++ ) {
vithyat 0:977e87915078 435 (*it)->remove_observation_level(observation_level);
vithyat 0:977e87915078 436 }
vithyat 0:977e87915078 437 }
vithyat 0:977e87915078 438 }
vithyat 0:977e87915078 439
vithyat 0:977e87915078 440 sn_coap_hdr_s* M2MObjectInstance::handle_get_request(nsdl_s *nsdl,
vithyat 0:977e87915078 441 sn_coap_hdr_s *received_coap_header,
vithyat 0:977e87915078 442 M2MObservationHandler *observation_handler)
vithyat 0:977e87915078 443 {
vithyat 0:977e87915078 444 tr_info("M2MObjectInstance::handle_get_request()");
vithyat 0:977e87915078 445 sn_coap_msg_code_e msg_code = COAP_MSG_CODE_RESPONSE_CONTENT;
vithyat 0:977e87915078 446 sn_coap_hdr_s * coap_response = sn_nsdl_build_response(nsdl,
vithyat 0:977e87915078 447 received_coap_header,
vithyat 0:977e87915078 448 msg_code);
vithyat 0:977e87915078 449 uint8_t * data = NULL;
vithyat 0:977e87915078 450 uint32_t data_length = 0;
vithyat 0:977e87915078 451
vithyat 0:977e87915078 452 if (received_coap_header) {
vithyat 0:977e87915078 453 // process the GET if we have registered a callback for it
vithyat 0:977e87915078 454 if ((operation() & M2MBase::GET_ALLOWED) != 0) {
vithyat 0:977e87915078 455 if (coap_response) {
vithyat 0:977e87915078 456 bool content_type_present = false;
vithyat 0:977e87915078 457 bool is_content_type_supported = true;
vithyat 0:977e87915078 458
vithyat 0:977e87915078 459 if (received_coap_header->options_list_ptr &&
vithyat 0:977e87915078 460 received_coap_header->options_list_ptr->accept != COAP_CT_NONE) {
vithyat 0:977e87915078 461 content_type_present = true;
vithyat 0:977e87915078 462 coap_response->content_format = received_coap_header->options_list_ptr->accept;
vithyat 0:977e87915078 463
vithyat 0:977e87915078 464 }
vithyat 0:977e87915078 465
vithyat 0:977e87915078 466 // Check if preferred content type is supported
vithyat 0:977e87915078 467 if (content_type_present) {
vithyat 0:977e87915078 468 if (coap_response->content_format != COAP_CONTENT_OMA_TLV_TYPE_OLD &&
vithyat 0:977e87915078 469 coap_response->content_format != COAP_CONTENT_OMA_TLV_TYPE) {
vithyat 0:977e87915078 470 is_content_type_supported = false;
vithyat 0:977e87915078 471 }
vithyat 0:977e87915078 472 }
vithyat 0:977e87915078 473
vithyat 0:977e87915078 474 if (is_content_type_supported) {
vithyat 0:977e87915078 475 if (!content_type_present &&
vithyat 0:977e87915078 476 (M2MBase::coap_content_type() == COAP_CONTENT_OMA_TLV_TYPE ||
vithyat 0:977e87915078 477 M2MBase::coap_content_type() == COAP_CONTENT_OMA_TLV_TYPE_OLD)) {
vithyat 0:977e87915078 478 coap_response->content_format = sn_coap_content_format_e(M2MBase::coap_content_type());
vithyat 0:977e87915078 479 }
vithyat 0:977e87915078 480
vithyat 0:977e87915078 481 // fill in the CoAP response payload
vithyat 0:977e87915078 482 if (COAP_CONTENT_OMA_TLV_TYPE == coap_response->content_format ||
vithyat 0:977e87915078 483 COAP_CONTENT_OMA_TLV_TYPE_OLD == coap_response->content_format) {
vithyat 0:977e87915078 484 set_coap_content_type(coap_response->content_format);
vithyat 0:977e87915078 485 data = M2MTLVSerializer::serialize(_resource_list, data_length);
vithyat 0:977e87915078 486 }
vithyat 0:977e87915078 487
vithyat 0:977e87915078 488 coap_response->payload_len = data_length;
vithyat 0:977e87915078 489 coap_response->payload_ptr = data;
vithyat 0:977e87915078 490
vithyat 0:977e87915078 491 if (data) {
vithyat 0:977e87915078 492 coap_response->options_list_ptr = sn_nsdl_alloc_options_list(nsdl, coap_response);
vithyat 0:977e87915078 493 if (coap_response->options_list_ptr) {
vithyat 0:977e87915078 494 coap_response->options_list_ptr->max_age = max_age();
vithyat 0:977e87915078 495 }
vithyat 0:977e87915078 496
vithyat 0:977e87915078 497 if (received_coap_header->options_list_ptr) {
vithyat 0:977e87915078 498 if(received_coap_header->options_list_ptr->observe != -1) {
vithyat 0:977e87915078 499 handle_observation(nsdl, *received_coap_header, *coap_response, observation_handler, msg_code);
vithyat 0:977e87915078 500 }
vithyat 0:977e87915078 501 }
vithyat 0:977e87915078 502 } else {
vithyat 0:977e87915078 503 msg_code = COAP_MSG_CODE_RESPONSE_UNSUPPORTED_CONTENT_FORMAT; // Content format not supported
vithyat 0:977e87915078 504 }
vithyat 0:977e87915078 505 } else {
vithyat 0:977e87915078 506 tr_error("M2MObjectInstance::handle_get_request() - Content-type: %d not supported", coap_response->content_format);
vithyat 0:977e87915078 507 msg_code = COAP_MSG_CODE_RESPONSE_NOT_ACCEPTABLE;
vithyat 0:977e87915078 508 }
vithyat 0:977e87915078 509 }
vithyat 0:977e87915078 510 } else {
vithyat 0:977e87915078 511 tr_error("M2MObjectInstance::handle_get_request - Return COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED");
vithyat 0:977e87915078 512 // Operation is not allowed.
vithyat 0:977e87915078 513 msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED;
vithyat 0:977e87915078 514 }
vithyat 0:977e87915078 515 } else {
vithyat 0:977e87915078 516 msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED;
vithyat 0:977e87915078 517 }
vithyat 0:977e87915078 518 if(coap_response) {
vithyat 0:977e87915078 519 coap_response->msg_code = msg_code;
vithyat 0:977e87915078 520 }
vithyat 0:977e87915078 521 return coap_response;
vithyat 0:977e87915078 522 }
vithyat 0:977e87915078 523
vithyat 0:977e87915078 524 sn_coap_hdr_s* M2MObjectInstance::handle_put_request(nsdl_s *nsdl,
vithyat 0:977e87915078 525 sn_coap_hdr_s *received_coap_header,
vithyat 0:977e87915078 526 M2MObservationHandler *observation_handler,
vithyat 0:977e87915078 527 bool &/*execute_value_updated*/)
vithyat 0:977e87915078 528 {
vithyat 0:977e87915078 529 tr_info("M2MObjectInstance::handle_put_request()");
vithyat 0:977e87915078 530 sn_coap_msg_code_e msg_code = COAP_MSG_CODE_RESPONSE_CHANGED; // 2.04
vithyat 0:977e87915078 531 sn_coap_hdr_s * coap_response = sn_nsdl_build_response(nsdl,
vithyat 0:977e87915078 532 received_coap_header,
vithyat 0:977e87915078 533 msg_code);;
vithyat 0:977e87915078 534 if(received_coap_header) {
vithyat 0:977e87915078 535 uint16_t coap_content_type = 0;
vithyat 0:977e87915078 536 bool content_type_present = false;
vithyat 0:977e87915078 537
vithyat 0:977e87915078 538 if(received_coap_header->content_format != COAP_CT_NONE) {
vithyat 0:977e87915078 539 content_type_present = true;
vithyat 0:977e87915078 540 set_coap_content_type(received_coap_header->content_format);
vithyat 0:977e87915078 541 if(coap_response) {
vithyat 0:977e87915078 542 coap_content_type = received_coap_header->content_format;
vithyat 0:977e87915078 543 }
vithyat 0:977e87915078 544 }
vithyat 0:977e87915078 545 if(received_coap_header->options_list_ptr &&
vithyat 0:977e87915078 546 received_coap_header->options_list_ptr->uri_query_ptr) {
vithyat 0:977e87915078 547 char *query = (char*)alloc_string_copy(received_coap_header->options_list_ptr->uri_query_ptr,
vithyat 0:977e87915078 548 received_coap_header->options_list_ptr->uri_query_len);
vithyat 0:977e87915078 549 if (query){
vithyat 0:977e87915078 550 tr_info("M2MObjectInstance::handle_put_request() - query %s", query);
vithyat 0:977e87915078 551 // if anything was updated, re-initialize the stored notification attributes
vithyat 0:977e87915078 552 if (!handle_observation_attribute(query)){
vithyat 0:977e87915078 553 tr_debug("M2MObjectInstance::handle_put_request() - Invalid query");
vithyat 0:977e87915078 554 msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST; // 4.00
vithyat 0:977e87915078 555 } else {
vithyat 0:977e87915078 556 msg_code =COAP_MSG_CODE_RESPONSE_CHANGED;
vithyat 0:977e87915078 557 }
vithyat 0:977e87915078 558 free(query);
vithyat 0:977e87915078 559 }
vithyat 0:977e87915078 560 } else if ((operation() & M2MBase::PUT_ALLOWED) != 0) {
vithyat 0:977e87915078 561 if(!content_type_present &&
vithyat 0:977e87915078 562 (M2MBase::coap_content_type() == COAP_CONTENT_OMA_TLV_TYPE ||
vithyat 0:977e87915078 563 M2MBase::coap_content_type() == COAP_CONTENT_OMA_TLV_TYPE_OLD)) {
vithyat 0:977e87915078 564 coap_content_type = M2MBase::coap_content_type();
vithyat 0:977e87915078 565 }
vithyat 0:977e87915078 566
vithyat 0:977e87915078 567 tr_debug("M2MObjectInstance::handle_put_request() - Request Content-type: %d", coap_content_type);
vithyat 0:977e87915078 568
vithyat 0:977e87915078 569 if(COAP_CONTENT_OMA_TLV_TYPE == coap_content_type ||
vithyat 0:977e87915078 570 COAP_CONTENT_OMA_TLV_TYPE_OLD == coap_content_type ) {
vithyat 0:977e87915078 571 set_coap_content_type(coap_content_type);
vithyat 0:977e87915078 572 M2MTLVDeserializer::Error error = M2MTLVDeserializer::None;
vithyat 0:977e87915078 573 if(received_coap_header->payload_ptr) {
vithyat 0:977e87915078 574 error = M2MTLVDeserializer::deserialize_resources(
vithyat 0:977e87915078 575 received_coap_header->payload_ptr,
vithyat 0:977e87915078 576 received_coap_header->payload_len, *this,
vithyat 0:977e87915078 577 M2MTLVDeserializer::Put);
vithyat 0:977e87915078 578 switch(error) {
vithyat 0:977e87915078 579 case M2MTLVDeserializer::None:
vithyat 0:977e87915078 580 if(observation_handler) {
vithyat 0:977e87915078 581 observation_handler->value_updated(this);
vithyat 0:977e87915078 582 }
vithyat 0:977e87915078 583 msg_code = COAP_MSG_CODE_RESPONSE_CHANGED;
vithyat 0:977e87915078 584 break;
vithyat 0:977e87915078 585 case M2MTLVDeserializer::NotFound:
vithyat 0:977e87915078 586 msg_code = COAP_MSG_CODE_RESPONSE_NOT_FOUND;
vithyat 0:977e87915078 587 break;
vithyat 0:977e87915078 588 case M2MTLVDeserializer::NotAllowed:
vithyat 0:977e87915078 589 msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED;
vithyat 0:977e87915078 590 break;
vithyat 0:977e87915078 591 case M2MTLVDeserializer::NotValid:
vithyat 0:977e87915078 592 msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST;
vithyat 0:977e87915078 593 break;
vithyat 0:977e87915078 594 case M2MTLVDeserializer::OutOfMemory:
vithyat 0:977e87915078 595 msg_code = COAP_MSG_CODE_RESPONSE_REQUEST_ENTITY_TOO_LARGE;
vithyat 0:977e87915078 596 break;
vithyat 0:977e87915078 597 }
vithyat 0:977e87915078 598 }
vithyat 0:977e87915078 599 } else {
vithyat 0:977e87915078 600 msg_code =COAP_MSG_CODE_RESPONSE_UNSUPPORTED_CONTENT_FORMAT;
vithyat 0:977e87915078 601 } // if(COAP_CONTENT_OMA_TLV_TYPE == coap_content_type)
vithyat 0:977e87915078 602 } else {
vithyat 0:977e87915078 603 // Operation is not allowed.
vithyat 0:977e87915078 604 tr_error("M2MObjectInstance::handle_put_request() - COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED");
vithyat 0:977e87915078 605 msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED;
vithyat 0:977e87915078 606 }
vithyat 0:977e87915078 607 } else {
vithyat 0:977e87915078 608 msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED;
vithyat 0:977e87915078 609 }
vithyat 0:977e87915078 610 if(coap_response) {
vithyat 0:977e87915078 611 coap_response->msg_code = msg_code;
vithyat 0:977e87915078 612 }
vithyat 0:977e87915078 613 return coap_response;
vithyat 0:977e87915078 614 }
vithyat 0:977e87915078 615
vithyat 0:977e87915078 616 sn_coap_hdr_s* M2MObjectInstance::handle_post_request(nsdl_s *nsdl,
vithyat 0:977e87915078 617 sn_coap_hdr_s *received_coap_header,
vithyat 0:977e87915078 618 M2MObservationHandler *observation_handler,
vithyat 0:977e87915078 619 bool &execute_value_updated,
vithyat 0:977e87915078 620 sn_nsdl_addr_s *)
vithyat 0:977e87915078 621 {
vithyat 0:977e87915078 622 tr_info("M2MObjectInstance::handle_post_request()");
vithyat 0:977e87915078 623 sn_coap_msg_code_e msg_code = COAP_MSG_CODE_RESPONSE_CHANGED; // 2.04
vithyat 0:977e87915078 624 sn_coap_hdr_s * coap_response = sn_nsdl_build_response(nsdl,
vithyat 0:977e87915078 625 received_coap_header,
vithyat 0:977e87915078 626 msg_code);
vithyat 0:977e87915078 627 if(received_coap_header) {
vithyat 0:977e87915078 628 if ((operation() & M2MBase::POST_ALLOWED) != 0) {
vithyat 0:977e87915078 629 uint16_t coap_content_type = 0;
vithyat 0:977e87915078 630 bool content_type_present = false;
vithyat 0:977e87915078 631 if(received_coap_header->content_format != COAP_CT_NONE) {
vithyat 0:977e87915078 632 set_coap_content_type(received_coap_header->content_format);
vithyat 0:977e87915078 633 content_type_present = true;
vithyat 0:977e87915078 634 if(coap_response) {
vithyat 0:977e87915078 635 coap_content_type = received_coap_header->content_format;
vithyat 0:977e87915078 636 }
vithyat 0:977e87915078 637 }
vithyat 0:977e87915078 638 if(!content_type_present &&
vithyat 0:977e87915078 639 (M2MBase::coap_content_type() == COAP_CONTENT_OMA_TLV_TYPE ||
vithyat 0:977e87915078 640 M2MBase::coap_content_type() == COAP_CONTENT_OMA_TLV_TYPE_OLD)) {
vithyat 0:977e87915078 641 coap_content_type = M2MBase::coap_content_type();
vithyat 0:977e87915078 642 }
vithyat 0:977e87915078 643
vithyat 0:977e87915078 644 tr_debug("M2MObjectInstance::handle_post_request() - Request Content-type: %d", coap_content_type);
vithyat 0:977e87915078 645
vithyat 0:977e87915078 646 if(COAP_CONTENT_OMA_TLV_TYPE == coap_content_type ||
vithyat 0:977e87915078 647 COAP_CONTENT_OMA_TLV_TYPE_OLD == coap_content_type) {
vithyat 0:977e87915078 648 set_coap_content_type(coap_content_type);
vithyat 0:977e87915078 649 M2MTLVDeserializer::Error error = M2MTLVDeserializer::None;
vithyat 0:977e87915078 650 error = M2MTLVDeserializer::deserialize_resources(
vithyat 0:977e87915078 651 received_coap_header->payload_ptr,
vithyat 0:977e87915078 652 received_coap_header->payload_len, *this,
vithyat 0:977e87915078 653 M2MTLVDeserializer::Post);
vithyat 0:977e87915078 654
vithyat 0:977e87915078 655 uint16_t instance_id = M2MTLVDeserializer::instance_id(received_coap_header->payload_ptr);
vithyat 0:977e87915078 656 switch(error) {
vithyat 0:977e87915078 657 case M2MTLVDeserializer::None:
vithyat 0:977e87915078 658 if(observation_handler) {
vithyat 0:977e87915078 659 execute_value_updated = true;
vithyat 0:977e87915078 660 }
vithyat 0:977e87915078 661 coap_response->options_list_ptr = sn_nsdl_alloc_options_list(nsdl, coap_response);
vithyat 0:977e87915078 662
vithyat 0:977e87915078 663 if (coap_response->options_list_ptr) {
vithyat 0:977e87915078 664
vithyat 0:977e87915078 665 StringBuffer<MAX_PATH_SIZE_3> obj_name;
vithyat 0:977e87915078 666 if(!build_path(obj_name, _parent.name(), M2MBase::instance_id(), instance_id)) {
vithyat 0:977e87915078 667 msg_code = COAP_MSG_CODE_RESPONSE_INTERNAL_SERVER_ERROR;
vithyat 0:977e87915078 668 break;
vithyat 0:977e87915078 669 }
vithyat 0:977e87915078 670
vithyat 0:977e87915078 671 coap_response->options_list_ptr->location_path_len = obj_name.get_size();
vithyat 0:977e87915078 672 coap_response->options_list_ptr->location_path_ptr =
vithyat 0:977e87915078 673 alloc_string_copy((uint8_t*)obj_name.c_str(),
vithyat 0:977e87915078 674 coap_response->options_list_ptr->location_path_len);
vithyat 0:977e87915078 675 // todo: handle allocation error
vithyat 0:977e87915078 676 }
vithyat 0:977e87915078 677 msg_code = COAP_MSG_CODE_RESPONSE_CREATED;
vithyat 0:977e87915078 678 break;
vithyat 0:977e87915078 679 case M2MTLVDeserializer::NotAllowed:
vithyat 0:977e87915078 680 msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED;
vithyat 0:977e87915078 681 break;
vithyat 0:977e87915078 682 case M2MTLVDeserializer::NotValid:
vithyat 0:977e87915078 683 msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST;
vithyat 0:977e87915078 684 break;
vithyat 0:977e87915078 685 case M2MTLVDeserializer::NotFound:
vithyat 0:977e87915078 686 msg_code = COAP_MSG_CODE_RESPONSE_NOT_FOUND;
vithyat 0:977e87915078 687 break;
vithyat 0:977e87915078 688 case M2MTLVDeserializer::OutOfMemory:
vithyat 0:977e87915078 689 msg_code = COAP_MSG_CODE_RESPONSE_REQUEST_ENTITY_TOO_LARGE;
vithyat 0:977e87915078 690 break;
vithyat 0:977e87915078 691 default:
vithyat 0:977e87915078 692 break;
vithyat 0:977e87915078 693 }
vithyat 0:977e87915078 694 } else {
vithyat 0:977e87915078 695 msg_code =COAP_MSG_CODE_RESPONSE_UNSUPPORTED_CONTENT_FORMAT;
vithyat 0:977e87915078 696 } // if(COAP_CONTENT_OMA_TLV_TYPE == coap_content_type)
vithyat 0:977e87915078 697 } else {
vithyat 0:977e87915078 698 // Operation is not allowed.
vithyat 0:977e87915078 699 tr_error("M2MObjectInstance::handle_post_request() - COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED");
vithyat 0:977e87915078 700 msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED;
vithyat 0:977e87915078 701 }
vithyat 0:977e87915078 702 } else {
vithyat 0:977e87915078 703 msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED;
vithyat 0:977e87915078 704 }
vithyat 0:977e87915078 705 if(coap_response) {
vithyat 0:977e87915078 706 coap_response->msg_code = msg_code;
vithyat 0:977e87915078 707 }
vithyat 0:977e87915078 708 return coap_response;
vithyat 0:977e87915078 709 }
vithyat 0:977e87915078 710
vithyat 0:977e87915078 711 void M2MObjectInstance::notification_update(M2MBase::Observation observation_level)
vithyat 0:977e87915078 712 {
vithyat 0:977e87915078 713 tr_debug("M2MObjectInstance::notification_update() - level(%d)", observation_level);
vithyat 0:977e87915078 714 if((M2MBase::O_Attribute & observation_level) == M2MBase::O_Attribute) {
vithyat 0:977e87915078 715 tr_debug("M2MObjectInstance::notification_update() - object callback");
vithyat 0:977e87915078 716 _parent.notification_update(instance_id());
vithyat 0:977e87915078 717 }
vithyat 0:977e87915078 718 if((M2MBase::OI_Attribute & observation_level) == M2MBase::OI_Attribute) {
vithyat 0:977e87915078 719 tr_debug("M2MObjectInstance::notification_update() - object instance callback");
vithyat 0:977e87915078 720 M2MReportHandler *report_handler = M2MBase::report_handler();
vithyat 0:977e87915078 721 if(report_handler && is_under_observation()) {
vithyat 0:977e87915078 722 report_handler->set_notification_trigger();
vithyat 0:977e87915078 723 }
vithyat 0:977e87915078 724
vithyat 0:977e87915078 725 }
vithyat 0:977e87915078 726 }
vithyat 0:977e87915078 727
vithyat 0:977e87915078 728 M2MBase *M2MObjectInstance::get_parent() const
vithyat 0:977e87915078 729 {
vithyat 0:977e87915078 730 return (M2MBase *) &get_parent_object();
vithyat 0:977e87915078 731 }
vithyat 0:977e87915078 732
vithyat 0:977e87915078 733 M2MBase::DataType M2MObjectInstance::convert_resource_type(M2MResourceInstance::ResourceType type)
vithyat 0:977e87915078 734 {
vithyat 0:977e87915078 735 M2MBase::DataType data_type = M2MBase::OBJLINK;
vithyat 0:977e87915078 736 switch(type) {
vithyat 0:977e87915078 737 case M2MResourceInstance::STRING:
vithyat 0:977e87915078 738 data_type = M2MBase::STRING;
vithyat 0:977e87915078 739 break;
vithyat 0:977e87915078 740 case M2MResourceInstance::INTEGER:
vithyat 0:977e87915078 741 data_type = M2MBase::INTEGER;
vithyat 0:977e87915078 742 break;
vithyat 0:977e87915078 743 case M2MResourceInstance::FLOAT:
vithyat 0:977e87915078 744 data_type = M2MBase::FLOAT;
vithyat 0:977e87915078 745 break;
vithyat 0:977e87915078 746 case M2MResourceInstance::OPAQUE:
vithyat 0:977e87915078 747 data_type = M2MBase::OPAQUE;
vithyat 0:977e87915078 748 break;
vithyat 0:977e87915078 749 case M2MResourceInstance::BOOLEAN:
vithyat 0:977e87915078 750 data_type = M2MBase::BOOLEAN;
vithyat 0:977e87915078 751 break;
vithyat 0:977e87915078 752 case M2MResourceInstance::TIME:
vithyat 0:977e87915078 753 data_type = M2MBase::TIME;
vithyat 0:977e87915078 754 break;
vithyat 0:977e87915078 755 case M2MResourceInstance::OBJLINK:
vithyat 0:977e87915078 756 data_type = M2MBase::OBJLINK;
vithyat 0:977e87915078 757 break;
vithyat 0:977e87915078 758 }
vithyat 0:977e87915078 759 return data_type;
vithyat 0:977e87915078 760 }