sandbox / mbed-client

Fork of mbed-client by Christopher Haster

Committer:
Yogesh Pande
Date:
Sat Apr 02 00:31:13 2016 +0300
Revision:
4:ae5178938864
Parent:
1:79b6cc67d8b4
Latest updated sources from Github and some trace group refactor.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Christopher Haster 1:79b6cc67d8b4 1 /*
Christopher Haster 1:79b6cc67d8b4 2 * Copyright (c) 2015 ARM Limited. All rights reserved.
Christopher Haster 1:79b6cc67d8b4 3 * SPDX-License-Identifier: Apache-2.0
Christopher Haster 1:79b6cc67d8b4 4 * Licensed under the Apache License, Version 2.0 (the License); you may
Christopher Haster 1:79b6cc67d8b4 5 * not use this file except in compliance with the License.
Christopher Haster 1:79b6cc67d8b4 6 * You may obtain a copy of the License at
Christopher Haster 1:79b6cc67d8b4 7 *
Christopher Haster 1:79b6cc67d8b4 8 * http://www.apache.org/licenses/LICENSE-2.0
Christopher Haster 1:79b6cc67d8b4 9 *
Christopher Haster 1:79b6cc67d8b4 10 * Unless required by applicable law or agreed to in writing, software
Christopher Haster 1:79b6cc67d8b4 11 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
Christopher Haster 1:79b6cc67d8b4 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Christopher Haster 1:79b6cc67d8b4 13 * See the License for the specific language governing permissions and
Christopher Haster 1:79b6cc67d8b4 14 * limitations under the License.
Christopher Haster 1:79b6cc67d8b4 15 */
Christopher Haster 1:79b6cc67d8b4 16 #include "mbed-client/m2mbase.h"
Christopher Haster 1:79b6cc67d8b4 17 #include "mbed-client/m2mobservationhandler.h"
Christopher Haster 1:79b6cc67d8b4 18 #include "mbed-client/m2mconstants.h"
Christopher Haster 1:79b6cc67d8b4 19 #include "mbed-client/m2mtimer.h"
Christopher Haster 1:79b6cc67d8b4 20 #include "include/m2mreporthandler.h"
Christopher Haster 1:79b6cc67d8b4 21 #include "include/nsdllinker.h"
Yogesh Pande 4:ae5178938864 22 #include "mbed-trace/mbed_trace.h"
Christopher Haster 1:79b6cc67d8b4 23 #include <ctype.h>
Christopher Haster 1:79b6cc67d8b4 24 #include <string.h>
Christopher Haster 1:79b6cc67d8b4 25
Yogesh Pande 4:ae5178938864 26 #define TRACE_GROUP "mClt"
Yogesh Pande 4:ae5178938864 27
Christopher Haster 1:79b6cc67d8b4 28 M2MBase& M2MBase::operator=(const M2MBase& other)
Christopher Haster 1:79b6cc67d8b4 29 {
Christopher Haster 1:79b6cc67d8b4 30 if (this != &other) { // protect against invalid self-assignment
Christopher Haster 1:79b6cc67d8b4 31 _operation = other._operation;
Christopher Haster 1:79b6cc67d8b4 32 _mode = other._mode;
Christopher Haster 1:79b6cc67d8b4 33 _name = other._name;
Christopher Haster 1:79b6cc67d8b4 34 _resource_type = other._resource_type;
Christopher Haster 1:79b6cc67d8b4 35 _interface_description = other._interface_description;
Christopher Haster 1:79b6cc67d8b4 36 _coap_content_type = other._coap_content_type;
Christopher Haster 1:79b6cc67d8b4 37 _instance_id = other._instance_id;
Christopher Haster 1:79b6cc67d8b4 38 _observable = other._observable;
Christopher Haster 1:79b6cc67d8b4 39 _observation_number = other._observation_number;
Christopher Haster 1:79b6cc67d8b4 40 _observation_level = other._observation_level;
Christopher Haster 1:79b6cc67d8b4 41 _observation_handler = other._observation_handler;
Yogesh Pande 4:ae5178938864 42 _register_uri = other._register_uri;
Yogesh Pande 4:ae5178938864 43 _uri_path = other._uri_path;
Yogesh Pande 4:ae5178938864 44 _max_age = other._max_age;
Christopher Haster 1:79b6cc67d8b4 45 if(_token) {
Christopher Haster 1:79b6cc67d8b4 46 free(_token);
Christopher Haster 1:79b6cc67d8b4 47 _token = NULL;
Christopher Haster 1:79b6cc67d8b4 48 _token_length = 0;
Christopher Haster 1:79b6cc67d8b4 49 }
Christopher Haster 1:79b6cc67d8b4 50 _token_length = other._token_length;
Christopher Haster 1:79b6cc67d8b4 51 if(other._token) {
Christopher Haster 1:79b6cc67d8b4 52 _token = (uint8_t *)malloc(other._token_length+1);
Christopher Haster 1:79b6cc67d8b4 53 if(_token) {
Christopher Haster 1:79b6cc67d8b4 54 memset(_token, 0, other._token_length+1);
Christopher Haster 1:79b6cc67d8b4 55 memcpy((uint8_t *)_token, (uint8_t *)other._token, other._token_length);
Christopher Haster 1:79b6cc67d8b4 56 }
Christopher Haster 1:79b6cc67d8b4 57 }
Christopher Haster 1:79b6cc67d8b4 58
Christopher Haster 1:79b6cc67d8b4 59 if(_report_handler) {
Christopher Haster 1:79b6cc67d8b4 60 delete _report_handler;
Christopher Haster 1:79b6cc67d8b4 61 _report_handler = NULL;
Christopher Haster 1:79b6cc67d8b4 62 }
Christopher Haster 1:79b6cc67d8b4 63 if(other._report_handler) {
Christopher Haster 1:79b6cc67d8b4 64 _report_handler = new M2MReportHandler(*other._report_handler);
Christopher Haster 1:79b6cc67d8b4 65 }
Christopher Haster 1:79b6cc67d8b4 66 }
Christopher Haster 1:79b6cc67d8b4 67 return *this;
Christopher Haster 1:79b6cc67d8b4 68 }
Christopher Haster 1:79b6cc67d8b4 69
Christopher Haster 1:79b6cc67d8b4 70 M2MBase::M2MBase(const M2MBase& other) :
Christopher Haster 1:79b6cc67d8b4 71 _report_handler(NULL),
Christopher Haster 1:79b6cc67d8b4 72 _token(NULL),
Christopher Haster 1:79b6cc67d8b4 73 _token_length(0)
Christopher Haster 1:79b6cc67d8b4 74 {
Christopher Haster 1:79b6cc67d8b4 75 _operation = other._operation;
Christopher Haster 1:79b6cc67d8b4 76 _mode = other._mode;
Christopher Haster 1:79b6cc67d8b4 77 _name = other._name;
Christopher Haster 1:79b6cc67d8b4 78 _resource_type = other._resource_type;
Christopher Haster 1:79b6cc67d8b4 79 _interface_description = other._interface_description;
Christopher Haster 1:79b6cc67d8b4 80 _coap_content_type = other._coap_content_type;
Christopher Haster 1:79b6cc67d8b4 81 _instance_id = other._instance_id;
Christopher Haster 1:79b6cc67d8b4 82 _observable = other._observable;
Christopher Haster 1:79b6cc67d8b4 83 _observation_handler = other._observation_handler;
Christopher Haster 1:79b6cc67d8b4 84 _observation_number = other._observation_number;
Christopher Haster 1:79b6cc67d8b4 85 _observation_level = other._observation_level;
Yogesh Pande 4:ae5178938864 86 _register_uri = other._register_uri;
Yogesh Pande 4:ae5178938864 87 _uri_path = other._uri_path;
Yogesh Pande 4:ae5178938864 88 _max_age = other._max_age;
Christopher Haster 1:79b6cc67d8b4 89 _token_length = other._token_length;
Christopher Haster 1:79b6cc67d8b4 90 if(other._token) {
Christopher Haster 1:79b6cc67d8b4 91 _token = (uint8_t *)malloc(other._token_length+1);
Christopher Haster 1:79b6cc67d8b4 92 if(_token) {
Christopher Haster 1:79b6cc67d8b4 93 memset(_token, 0, other._token_length+1);
Christopher Haster 1:79b6cc67d8b4 94 memcpy((uint8_t *)_token, (uint8_t *)other._token, other._token_length);
Christopher Haster 1:79b6cc67d8b4 95 }
Christopher Haster 1:79b6cc67d8b4 96 }
Christopher Haster 1:79b6cc67d8b4 97
Christopher Haster 1:79b6cc67d8b4 98 if(other._report_handler) {
Christopher Haster 1:79b6cc67d8b4 99 _report_handler = new M2MReportHandler(*other._report_handler);
Christopher Haster 1:79b6cc67d8b4 100 }
Christopher Haster 1:79b6cc67d8b4 101 }
Christopher Haster 1:79b6cc67d8b4 102
Christopher Haster 1:79b6cc67d8b4 103 M2MBase::M2MBase(const String & resource_name,
Christopher Haster 1:79b6cc67d8b4 104 M2MBase::Mode mde)
Christopher Haster 1:79b6cc67d8b4 105 : _report_handler(NULL),
Christopher Haster 1:79b6cc67d8b4 106 _observation_handler(NULL),
Christopher Haster 1:79b6cc67d8b4 107 _operation(M2MBase::NOT_ALLOWED),
Christopher Haster 1:79b6cc67d8b4 108 _mode(mde),
Christopher Haster 1:79b6cc67d8b4 109 _observation_level(M2MBase::None),
Christopher Haster 1:79b6cc67d8b4 110 _name(resource_name),
Christopher Haster 1:79b6cc67d8b4 111 _coap_content_type(0),
Christopher Haster 1:79b6cc67d8b4 112 _instance_id(0),
Christopher Haster 1:79b6cc67d8b4 113 _observable(false),
Christopher Haster 1:79b6cc67d8b4 114 _observation_number(0),
Christopher Haster 1:79b6cc67d8b4 115 _token(NULL),
Yogesh Pande 4:ae5178938864 116 _token_length(0),
Yogesh Pande 4:ae5178938864 117 _register_uri(true),
Yogesh Pande 4:ae5178938864 118 _uri_path(""),
Yogesh Pande 4:ae5178938864 119 _max_age(0)
Christopher Haster 1:79b6cc67d8b4 120 {
Christopher Haster 1:79b6cc67d8b4 121 if(is_integer(_name) && _name.size() <= MAX_ALLOWED_STRING_LENGTH) {
Christopher Haster 1:79b6cc67d8b4 122 _name_id = strtoul(_name.c_str(), NULL, 10);
Christopher Haster 1:79b6cc67d8b4 123 if(_name_id > 65535){
Christopher Haster 1:79b6cc67d8b4 124 _name_id = -1;
Christopher Haster 1:79b6cc67d8b4 125 }
Christopher Haster 1:79b6cc67d8b4 126 } else {
Christopher Haster 1:79b6cc67d8b4 127 _name_id = -1;
Christopher Haster 1:79b6cc67d8b4 128 }
Christopher Haster 1:79b6cc67d8b4 129 }
Christopher Haster 1:79b6cc67d8b4 130
Christopher Haster 1:79b6cc67d8b4 131 M2MBase::~M2MBase()
Christopher Haster 1:79b6cc67d8b4 132 {
Christopher Haster 1:79b6cc67d8b4 133 if(_report_handler) {
Christopher Haster 1:79b6cc67d8b4 134 delete _report_handler;
Christopher Haster 1:79b6cc67d8b4 135 _report_handler = NULL;
Christopher Haster 1:79b6cc67d8b4 136 }
Christopher Haster 1:79b6cc67d8b4 137 if(_token) {
Christopher Haster 1:79b6cc67d8b4 138 free(_token);
Christopher Haster 1:79b6cc67d8b4 139 _token = NULL;
Christopher Haster 1:79b6cc67d8b4 140 _token_length = 0;
Christopher Haster 1:79b6cc67d8b4 141 }
Christopher Haster 1:79b6cc67d8b4 142 }
Christopher Haster 1:79b6cc67d8b4 143
Christopher Haster 1:79b6cc67d8b4 144 void M2MBase::set_operation(M2MBase::Operation opr)
Christopher Haster 1:79b6cc67d8b4 145 {
Christopher Haster 1:79b6cc67d8b4 146 // If the mode is Static, there is only GET_ALLOWED
Christopher Haster 1:79b6cc67d8b4 147 // supported.
Christopher Haster 1:79b6cc67d8b4 148 if(M2MBase::Static == _mode) {
Christopher Haster 1:79b6cc67d8b4 149 _operation = M2MBase::GET_ALLOWED;
Christopher Haster 1:79b6cc67d8b4 150 } else {
Christopher Haster 1:79b6cc67d8b4 151 _operation = opr;
Christopher Haster 1:79b6cc67d8b4 152 }
Christopher Haster 1:79b6cc67d8b4 153 }
Christopher Haster 1:79b6cc67d8b4 154
Christopher Haster 1:79b6cc67d8b4 155 void M2MBase::set_interface_description(const String &desc)
Christopher Haster 1:79b6cc67d8b4 156 {
Christopher Haster 1:79b6cc67d8b4 157 _interface_description = desc;
Christopher Haster 1:79b6cc67d8b4 158 }
Christopher Haster 1:79b6cc67d8b4 159
Christopher Haster 1:79b6cc67d8b4 160 void M2MBase::set_resource_type(const String &res_type)
Christopher Haster 1:79b6cc67d8b4 161 {
Christopher Haster 1:79b6cc67d8b4 162 _resource_type = res_type;
Christopher Haster 1:79b6cc67d8b4 163 }
Christopher Haster 1:79b6cc67d8b4 164
Christopher Haster 1:79b6cc67d8b4 165 void M2MBase::set_coap_content_type(const uint8_t con_type)
Christopher Haster 1:79b6cc67d8b4 166 {
Christopher Haster 1:79b6cc67d8b4 167 _coap_content_type = con_type;
Christopher Haster 1:79b6cc67d8b4 168 }
Christopher Haster 1:79b6cc67d8b4 169
Christopher Haster 1:79b6cc67d8b4 170 void M2MBase::set_observable(bool observable)
Christopher Haster 1:79b6cc67d8b4 171 {
Yogesh Pande 4:ae5178938864 172 _observable = observable;
Christopher Haster 1:79b6cc67d8b4 173 }
Christopher Haster 1:79b6cc67d8b4 174
Yogesh Pande 4:ae5178938864 175 void M2MBase::add_observation_level(M2MBase::Observation obs_level)
Christopher Haster 1:79b6cc67d8b4 176 {
Yogesh Pande 4:ae5178938864 177 _observation_level = (M2MBase::Observation)(_observation_level | obs_level);
Christopher Haster 1:79b6cc67d8b4 178 }
Christopher Haster 1:79b6cc67d8b4 179
Yogesh Pande 4:ae5178938864 180 void M2MBase::remove_observation_level(M2MBase::Observation obs_level)
Christopher Haster 1:79b6cc67d8b4 181 {
Yogesh Pande 4:ae5178938864 182 _observation_level = (M2MBase::Observation)(_observation_level ^ obs_level);
Christopher Haster 1:79b6cc67d8b4 183 }
Christopher Haster 1:79b6cc67d8b4 184
Christopher Haster 1:79b6cc67d8b4 185 void M2MBase::set_under_observation(bool observed,
Christopher Haster 1:79b6cc67d8b4 186 M2MObservationHandler *handler)
Christopher Haster 1:79b6cc67d8b4 187 {
Christopher Haster 1:79b6cc67d8b4 188
Christopher Haster 1:79b6cc67d8b4 189 tr_debug("M2MBase::set_under_observation - observed: %d", observed);
Yogesh Pande 4:ae5178938864 190 tr_debug("M2MBase::set_under_observation - base_type: %d", _base_type);
Christopher Haster 1:79b6cc67d8b4 191 _observation_handler = handler;
Christopher Haster 1:79b6cc67d8b4 192 if(handler) {
Christopher Haster 1:79b6cc67d8b4 193 if (_base_type != M2MBase::ResourceInstance) {
Christopher Haster 1:79b6cc67d8b4 194 if(!_report_handler){
Christopher Haster 1:79b6cc67d8b4 195 _report_handler = new M2MReportHandler(*this);
Christopher Haster 1:79b6cc67d8b4 196 }
Christopher Haster 1:79b6cc67d8b4 197 _report_handler->set_under_observation(observed);
Christopher Haster 1:79b6cc67d8b4 198 }
Christopher Haster 1:79b6cc67d8b4 199 } else {
Christopher Haster 1:79b6cc67d8b4 200 if(_report_handler) {
Christopher Haster 1:79b6cc67d8b4 201 delete _report_handler;
Christopher Haster 1:79b6cc67d8b4 202 _report_handler = NULL;
Christopher Haster 1:79b6cc67d8b4 203 }
Christopher Haster 1:79b6cc67d8b4 204 }
Christopher Haster 1:79b6cc67d8b4 205 }
Christopher Haster 1:79b6cc67d8b4 206
Christopher Haster 1:79b6cc67d8b4 207 void M2MBase::set_observation_token(const uint8_t *token, const uint8_t length)
Christopher Haster 1:79b6cc67d8b4 208 {
Christopher Haster 1:79b6cc67d8b4 209 if(_token) {
Christopher Haster 1:79b6cc67d8b4 210 free(_token);
Christopher Haster 1:79b6cc67d8b4 211 _token = NULL;
Christopher Haster 1:79b6cc67d8b4 212 _token_length = 0;
Christopher Haster 1:79b6cc67d8b4 213 }
Christopher Haster 1:79b6cc67d8b4 214
Christopher Haster 1:79b6cc67d8b4 215 if( token != NULL && length > 0 ) {
Christopher Haster 1:79b6cc67d8b4 216 _token = (uint8_t *)malloc(length+1);
Christopher Haster 1:79b6cc67d8b4 217 if(_token) {
Christopher Haster 1:79b6cc67d8b4 218 memset(_token, 0, length+1);
Christopher Haster 1:79b6cc67d8b4 219 memcpy((uint8_t *)_token, (uint8_t *)token, length);
Christopher Haster 1:79b6cc67d8b4 220 _token_length = length;
Christopher Haster 1:79b6cc67d8b4 221 }
Christopher Haster 1:79b6cc67d8b4 222 }
Christopher Haster 1:79b6cc67d8b4 223 }
Christopher Haster 1:79b6cc67d8b4 224
Christopher Haster 1:79b6cc67d8b4 225 void M2MBase::set_instance_id(const uint16_t inst_id)
Christopher Haster 1:79b6cc67d8b4 226 {
Christopher Haster 1:79b6cc67d8b4 227 _instance_id = inst_id;
Christopher Haster 1:79b6cc67d8b4 228 }
Christopher Haster 1:79b6cc67d8b4 229
Yogesh Pande 4:ae5178938864 230
Yogesh Pande 4:ae5178938864 231 void M2MBase::set_observation_number(const uint16_t /*observation_number*/)
Christopher Haster 1:79b6cc67d8b4 232 {
Yogesh Pande 4:ae5178938864 233 }
Yogesh Pande 4:ae5178938864 234
Yogesh Pande 4:ae5178938864 235 void M2MBase::set_max_age(const uint32_t max_age)
Yogesh Pande 4:ae5178938864 236 {
Yogesh Pande 4:ae5178938864 237 _max_age = max_age;
Christopher Haster 1:79b6cc67d8b4 238 }
Christopher Haster 1:79b6cc67d8b4 239
Christopher Haster 1:79b6cc67d8b4 240 M2MBase::BaseType M2MBase::base_type() const
Christopher Haster 1:79b6cc67d8b4 241 {
Christopher Haster 1:79b6cc67d8b4 242 return _base_type;
Christopher Haster 1:79b6cc67d8b4 243 }
Christopher Haster 1:79b6cc67d8b4 244
Christopher Haster 1:79b6cc67d8b4 245 M2MBase::Operation M2MBase::operation() const
Christopher Haster 1:79b6cc67d8b4 246 {
Christopher Haster 1:79b6cc67d8b4 247 return _operation;
Christopher Haster 1:79b6cc67d8b4 248 }
Christopher Haster 1:79b6cc67d8b4 249
Christopher Haster 1:79b6cc67d8b4 250 const String& M2MBase::name() const
Christopher Haster 1:79b6cc67d8b4 251 {
Christopher Haster 1:79b6cc67d8b4 252 return _name;
Christopher Haster 1:79b6cc67d8b4 253 }
Christopher Haster 1:79b6cc67d8b4 254
Christopher Haster 1:79b6cc67d8b4 255 int32_t M2MBase::name_id() const
Christopher Haster 1:79b6cc67d8b4 256 {
Christopher Haster 1:79b6cc67d8b4 257 return _name_id;
Christopher Haster 1:79b6cc67d8b4 258 }
Christopher Haster 1:79b6cc67d8b4 259
Christopher Haster 1:79b6cc67d8b4 260 uint16_t M2MBase::instance_id() const
Christopher Haster 1:79b6cc67d8b4 261 {
Christopher Haster 1:79b6cc67d8b4 262 return _instance_id;
Christopher Haster 1:79b6cc67d8b4 263 }
Christopher Haster 1:79b6cc67d8b4 264
Christopher Haster 1:79b6cc67d8b4 265 const String& M2MBase::interface_description() const
Christopher Haster 1:79b6cc67d8b4 266 {
Christopher Haster 1:79b6cc67d8b4 267 return _interface_description;
Christopher Haster 1:79b6cc67d8b4 268 }
Christopher Haster 1:79b6cc67d8b4 269
Christopher Haster 1:79b6cc67d8b4 270 const String& M2MBase::resource_type() const
Christopher Haster 1:79b6cc67d8b4 271 {
Christopher Haster 1:79b6cc67d8b4 272 return _resource_type;
Christopher Haster 1:79b6cc67d8b4 273 }
Christopher Haster 1:79b6cc67d8b4 274
Christopher Haster 1:79b6cc67d8b4 275 uint8_t M2MBase::coap_content_type() const
Christopher Haster 1:79b6cc67d8b4 276 {
Christopher Haster 1:79b6cc67d8b4 277 return _coap_content_type;
Christopher Haster 1:79b6cc67d8b4 278 }
Christopher Haster 1:79b6cc67d8b4 279
Christopher Haster 1:79b6cc67d8b4 280 bool M2MBase::is_observable() const
Christopher Haster 1:79b6cc67d8b4 281 {
Christopher Haster 1:79b6cc67d8b4 282 return _observable;
Christopher Haster 1:79b6cc67d8b4 283 }
Christopher Haster 1:79b6cc67d8b4 284
Christopher Haster 1:79b6cc67d8b4 285 M2MBase::Observation M2MBase::observation_level() const
Christopher Haster 1:79b6cc67d8b4 286 {
Christopher Haster 1:79b6cc67d8b4 287 return _observation_level;
Christopher Haster 1:79b6cc67d8b4 288 }
Christopher Haster 1:79b6cc67d8b4 289
Christopher Haster 1:79b6cc67d8b4 290 void M2MBase::get_observation_token(uint8_t *&token, uint32_t &token_length)
Christopher Haster 1:79b6cc67d8b4 291 {
Christopher Haster 1:79b6cc67d8b4 292 token_length = 0;
Christopher Haster 1:79b6cc67d8b4 293 if(token) {
Christopher Haster 1:79b6cc67d8b4 294 free(token);
Christopher Haster 1:79b6cc67d8b4 295 token = NULL;
Christopher Haster 1:79b6cc67d8b4 296 }
Christopher Haster 1:79b6cc67d8b4 297 token = (uint8_t *)malloc(_token_length+1);
Christopher Haster 1:79b6cc67d8b4 298 if(token) {
Christopher Haster 1:79b6cc67d8b4 299 token_length = _token_length;
Christopher Haster 1:79b6cc67d8b4 300 memset(token, 0, _token_length+1);
Christopher Haster 1:79b6cc67d8b4 301 memcpy((uint8_t *)token, (uint8_t *)_token, token_length);
Christopher Haster 1:79b6cc67d8b4 302 }
Christopher Haster 1:79b6cc67d8b4 303 }
Christopher Haster 1:79b6cc67d8b4 304
Christopher Haster 1:79b6cc67d8b4 305 M2MBase::Mode M2MBase::mode() const
Christopher Haster 1:79b6cc67d8b4 306 {
Christopher Haster 1:79b6cc67d8b4 307 return _mode;
Christopher Haster 1:79b6cc67d8b4 308 }
Christopher Haster 1:79b6cc67d8b4 309
Christopher Haster 1:79b6cc67d8b4 310 uint16_t M2MBase::observation_number() const
Christopher Haster 1:79b6cc67d8b4 311 {
Christopher Haster 1:79b6cc67d8b4 312 return _observation_number;
Christopher Haster 1:79b6cc67d8b4 313 }
Christopher Haster 1:79b6cc67d8b4 314
Yogesh Pande 4:ae5178938864 315 uint32_t M2MBase::max_age() const
Yogesh Pande 4:ae5178938864 316 {
Yogesh Pande 4:ae5178938864 317 return _max_age;
Yogesh Pande 4:ae5178938864 318 }
Yogesh Pande 4:ae5178938864 319
Christopher Haster 1:79b6cc67d8b4 320 bool M2MBase::handle_observation_attribute(char *&query)
Christopher Haster 1:79b6cc67d8b4 321 {
Christopher Haster 1:79b6cc67d8b4 322 tr_debug("M2MBase::handle_observation_attribute");
Christopher Haster 1:79b6cc67d8b4 323 bool success = false;
Christopher Haster 1:79b6cc67d8b4 324 if(_report_handler) {
Christopher Haster 1:79b6cc67d8b4 325 success = _report_handler->parse_notification_attribute(query,_base_type);
Christopher Haster 1:79b6cc67d8b4 326 if (success) {
Christopher Haster 1:79b6cc67d8b4 327 if ((_report_handler->attribute_flags() & M2MReportHandler::Cancel) == 0) {
Christopher Haster 1:79b6cc67d8b4 328 _report_handler->set_under_observation(true);
Christopher Haster 1:79b6cc67d8b4 329 } else {
Christopher Haster 1:79b6cc67d8b4 330 _report_handler->set_under_observation(false);
Christopher Haster 1:79b6cc67d8b4 331 }
Christopher Haster 1:79b6cc67d8b4 332 }
Christopher Haster 1:79b6cc67d8b4 333 }
Christopher Haster 1:79b6cc67d8b4 334 return success;
Christopher Haster 1:79b6cc67d8b4 335 }
Christopher Haster 1:79b6cc67d8b4 336
Yogesh Pande 4:ae5178938864 337 void M2MBase::observation_to_be_sent(m2m::Vector<uint16_t> changed_instance_ids, bool send_object)
Christopher Haster 1:79b6cc67d8b4 338 {
Christopher Haster 1:79b6cc67d8b4 339 //TODO: Move this to M2MResourceInstance
Yogesh Pande 4:ae5178938864 340 if(_observation_handler) {
Yogesh Pande 4:ae5178938864 341 _observation_number++;
Yogesh Pande 4:ae5178938864 342 _observation_handler->observation_to_be_sent(this,
Yogesh Pande 4:ae5178938864 343 _observation_number,
Yogesh Pande 4:ae5178938864 344 changed_instance_ids,
Yogesh Pande 4:ae5178938864 345 send_object);
Christopher Haster 1:79b6cc67d8b4 346 }
Christopher Haster 1:79b6cc67d8b4 347 }
Christopher Haster 1:79b6cc67d8b4 348
Christopher Haster 1:79b6cc67d8b4 349 void M2MBase::set_base_type(M2MBase::BaseType type)
Christopher Haster 1:79b6cc67d8b4 350 {
Christopher Haster 1:79b6cc67d8b4 351 _base_type = type;
Christopher Haster 1:79b6cc67d8b4 352 }
Christopher Haster 1:79b6cc67d8b4 353
Christopher Haster 1:79b6cc67d8b4 354 void M2MBase::remove_resource_from_coap(const String &resource_name)
Christopher Haster 1:79b6cc67d8b4 355 {
Christopher Haster 1:79b6cc67d8b4 356 if(_observation_handler) {
Christopher Haster 1:79b6cc67d8b4 357 _observation_handler->resource_to_be_deleted(resource_name);
Christopher Haster 1:79b6cc67d8b4 358 }
Christopher Haster 1:79b6cc67d8b4 359 }
Christopher Haster 1:79b6cc67d8b4 360
Christopher Haster 1:79b6cc67d8b4 361 void M2MBase::remove_object_from_coap()
Christopher Haster 1:79b6cc67d8b4 362 {
Christopher Haster 1:79b6cc67d8b4 363 if(_observation_handler) {
Christopher Haster 1:79b6cc67d8b4 364 _observation_handler->remove_object(this);
Christopher Haster 1:79b6cc67d8b4 365 }
Christopher Haster 1:79b6cc67d8b4 366 }
Christopher Haster 1:79b6cc67d8b4 367
Christopher Haster 1:79b6cc67d8b4 368 sn_coap_hdr_s* M2MBase::handle_get_request(nsdl_s */*nsdl*/,
Christopher Haster 1:79b6cc67d8b4 369 sn_coap_hdr_s */*received_coap_header*/,
Christopher Haster 1:79b6cc67d8b4 370 M2MObservationHandler */*observation_handler*/)
Christopher Haster 1:79b6cc67d8b4 371 {
Christopher Haster 1:79b6cc67d8b4 372 //Handled in M2MResource, M2MObjectInstance and M2MObject classes
Christopher Haster 1:79b6cc67d8b4 373 return NULL;
Christopher Haster 1:79b6cc67d8b4 374 }
Christopher Haster 1:79b6cc67d8b4 375
Christopher Haster 1:79b6cc67d8b4 376 sn_coap_hdr_s* M2MBase::handle_put_request(nsdl_s */*nsdl*/,
Christopher Haster 1:79b6cc67d8b4 377 sn_coap_hdr_s */*received_coap_header*/,
Yogesh Pande 4:ae5178938864 378 M2MObservationHandler */*observation_handler*/,
Yogesh Pande 4:ae5178938864 379 bool &)
Christopher Haster 1:79b6cc67d8b4 380 {
Christopher Haster 1:79b6cc67d8b4 381 //Handled in M2MResource, M2MObjectInstance and M2MObject classes
Christopher Haster 1:79b6cc67d8b4 382 return NULL;
Christopher Haster 1:79b6cc67d8b4 383 }
Christopher Haster 1:79b6cc67d8b4 384
Christopher Haster 1:79b6cc67d8b4 385 sn_coap_hdr_s* M2MBase::handle_post_request(nsdl_s */*nsdl*/,
Christopher Haster 1:79b6cc67d8b4 386 sn_coap_hdr_s */*received_coap_header*/,
Yogesh Pande 4:ae5178938864 387 M2MObservationHandler */*observation_handler*/,
Yogesh Pande 4:ae5178938864 388 bool &)
Christopher Haster 1:79b6cc67d8b4 389 {
Christopher Haster 1:79b6cc67d8b4 390 //Handled in M2MResource, M2MObjectInstance and M2MObject classes
Christopher Haster 1:79b6cc67d8b4 391 return NULL;
Christopher Haster 1:79b6cc67d8b4 392 }
Christopher Haster 1:79b6cc67d8b4 393
Christopher Haster 1:79b6cc67d8b4 394 void *M2MBase::memory_alloc(uint16_t size)
Christopher Haster 1:79b6cc67d8b4 395 {
Christopher Haster 1:79b6cc67d8b4 396 if(size)
Christopher Haster 1:79b6cc67d8b4 397 return malloc(size);
Christopher Haster 1:79b6cc67d8b4 398 else
Christopher Haster 1:79b6cc67d8b4 399 return 0;
Christopher Haster 1:79b6cc67d8b4 400 }
Christopher Haster 1:79b6cc67d8b4 401
Christopher Haster 1:79b6cc67d8b4 402 void M2MBase::memory_free(void *ptr)
Christopher Haster 1:79b6cc67d8b4 403 {
Christopher Haster 1:79b6cc67d8b4 404 if(ptr)
Christopher Haster 1:79b6cc67d8b4 405 free(ptr);
Christopher Haster 1:79b6cc67d8b4 406 }
Christopher Haster 1:79b6cc67d8b4 407
Christopher Haster 1:79b6cc67d8b4 408 M2MReportHandler* M2MBase::report_handler()
Christopher Haster 1:79b6cc67d8b4 409 {
Christopher Haster 1:79b6cc67d8b4 410 return _report_handler;
Christopher Haster 1:79b6cc67d8b4 411 }
Christopher Haster 1:79b6cc67d8b4 412
Christopher Haster 1:79b6cc67d8b4 413 M2MObservationHandler* M2MBase::observation_handler()
Christopher Haster 1:79b6cc67d8b4 414 {
Christopher Haster 1:79b6cc67d8b4 415 return _observation_handler;
Christopher Haster 1:79b6cc67d8b4 416 }
Christopher Haster 1:79b6cc67d8b4 417
Yogesh Pande 4:ae5178938864 418 void M2MBase::set_register_uri( bool register_uri)
Yogesh Pande 4:ae5178938864 419 {
Yogesh Pande 4:ae5178938864 420 _register_uri = register_uri;
Yogesh Pande 4:ae5178938864 421 }
Yogesh Pande 4:ae5178938864 422
Yogesh Pande 4:ae5178938864 423 bool M2MBase::register_uri()
Yogesh Pande 4:ae5178938864 424 {
Yogesh Pande 4:ae5178938864 425 return _register_uri;
Yogesh Pande 4:ae5178938864 426 }
Yogesh Pande 4:ae5178938864 427
Christopher Haster 1:79b6cc67d8b4 428 bool M2MBase::is_integer(const String &value)
Christopher Haster 1:79b6cc67d8b4 429 {
Christopher Haster 1:79b6cc67d8b4 430 const char *s = value.c_str();
Christopher Haster 1:79b6cc67d8b4 431 if(value.empty() || ((!isdigit(s[0])) && (s[0] != '-') && (s[0] != '+'))) {
Christopher Haster 1:79b6cc67d8b4 432 return false;
Christopher Haster 1:79b6cc67d8b4 433 }
Christopher Haster 1:79b6cc67d8b4 434 char * p ;
Christopher Haster 1:79b6cc67d8b4 435 strtol(value.c_str(), &p, 10);
Christopher Haster 1:79b6cc67d8b4 436 return (*p == 0);
Christopher Haster 1:79b6cc67d8b4 437 }
Yogesh Pande 4:ae5178938864 438
Yogesh Pande 4:ae5178938864 439 void M2MBase::set_uri_path(const String &path)
Yogesh Pande 4:ae5178938864 440 {
Yogesh Pande 4:ae5178938864 441 _uri_path = path;
Yogesh Pande 4:ae5178938864 442 }
Yogesh Pande 4:ae5178938864 443
Yogesh Pande 4:ae5178938864 444
Yogesh Pande 4:ae5178938864 445 const String& M2MBase::uri_path() const
Yogesh Pande 4:ae5178938864 446 {
Yogesh Pande 4:ae5178938864 447 return _uri_path;
Yogesh Pande 4:ae5178938864 448 }