Donald Meyers / Mbed OS evan
Committer:
djmeyers
Date:
Sat Mar 18 22:37:16 2017 +0000
Revision:
0:06ee5f8a484a
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
djmeyers 0:06ee5f8a484a 1 /*
djmeyers 0:06ee5f8a484a 2 * Copyright (c) 2015 ARM Limited. All rights reserved.
djmeyers 0:06ee5f8a484a 3 * SPDX-License-Identifier: Apache-2.0
djmeyers 0:06ee5f8a484a 4 * Licensed under the Apache License, Version 2.0 (the License); you may
djmeyers 0:06ee5f8a484a 5 * not use this file except in compliance with the License.
djmeyers 0:06ee5f8a484a 6 * You may obtain a copy of the License at
djmeyers 0:06ee5f8a484a 7 *
djmeyers 0:06ee5f8a484a 8 * http://www.apache.org/licenses/LICENSE-2.0
djmeyers 0:06ee5f8a484a 9 *
djmeyers 0:06ee5f8a484a 10 * Unless required by applicable law or agreed to in writing, software
djmeyers 0:06ee5f8a484a 11 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
djmeyers 0:06ee5f8a484a 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
djmeyers 0:06ee5f8a484a 13 * See the License for the specific language governing permissions and
djmeyers 0:06ee5f8a484a 14 * limitations under the License.
djmeyers 0:06ee5f8a484a 15 */
djmeyers 0:06ee5f8a484a 16
djmeyers 0:06ee5f8a484a 17 #include "mbedclient.h"
djmeyers 0:06ee5f8a484a 18
djmeyers 0:06ee5f8a484a 19 #include "mbed-client/m2minterfacefactory.h"
djmeyers 0:06ee5f8a484a 20 #include "mbed-client/m2mdevice.h"
djmeyers 0:06ee5f8a484a 21 #include "mbed-client/m2mobjectinstance.h"
djmeyers 0:06ee5f8a484a 22 #include "mbed-client/m2mresource.h"
djmeyers 0:06ee5f8a484a 23
djmeyers 0:06ee5f8a484a 24 #ifdef TARGET_LIKE_MBED
djmeyers 0:06ee5f8a484a 25 #include "minar/minar.h"
djmeyers 0:06ee5f8a484a 26 #include "test_env.h"
djmeyers 0:06ee5f8a484a 27 #endif
djmeyers 0:06ee5f8a484a 28
djmeyers 0:06ee5f8a484a 29 #include <time.h>
djmeyers 0:06ee5f8a484a 30 #include <stdio.h>
djmeyers 0:06ee5f8a484a 31
djmeyers 0:06ee5f8a484a 32 // Enter your mbed Device Server's IPv4 address and Port number in
djmeyers 0:06ee5f8a484a 33 // mentioned format like 192.168.0.1:5693
djmeyers 0:06ee5f8a484a 34 const String &BOOTSTRAP_SERVER_ADDRESS = "coap://10.45.3.10:5693";
djmeyers 0:06ee5f8a484a 35 const String &BOOTSTRAP_SERVER_DTLS_ADDRESS = "coap://10.45.3.10:5694";
djmeyers 0:06ee5f8a484a 36
djmeyers 0:06ee5f8a484a 37 #ifdef SIXLOWPAN_INTERFACE
djmeyers 0:06ee5f8a484a 38 const String &MBED_SERVER_ADDRESS = "coap://FD00:FF1:CE0B:A5E1:1068:AF13:9B61:D557:5683";
djmeyers 0:06ee5f8a484a 39 const String &MBED_SERVER_DTLS_ADDRESS = "coap://FD00:FF1:CE0B:A5E1:1068:AF13:9B61:D557:5684";
djmeyers 0:06ee5f8a484a 40 #else
djmeyers 0:06ee5f8a484a 41 const String &MBED_SERVER_ADDRESS = "coap://10.45.3.10:5683";
djmeyers 0:06ee5f8a484a 42 //const String &MBED_SERVER_ADDRESS = "coap://10.45.0.152:5683";
djmeyers 0:06ee5f8a484a 43 const String &MBED_SERVER_DTLS_ADDRESS = "coap://10.45.3.10:5684";
djmeyers 0:06ee5f8a484a 44 #endif
djmeyers 0:06ee5f8a484a 45 const String CLIENT_NAME = "secure-client";
djmeyers 0:06ee5f8a484a 46
djmeyers 0:06ee5f8a484a 47 const String &MANUFACTURER = "ARM";
djmeyers 0:06ee5f8a484a 48 const String &TYPE = "type";
djmeyers 0:06ee5f8a484a 49 const String &MODEL_NUMBER = "2015";
djmeyers 0:06ee5f8a484a 50 const String &SERIAL_NUMBER = "12345";
djmeyers 0:06ee5f8a484a 51 const uint8_t STATIC_VALUE[] = "Static value";
djmeyers 0:06ee5f8a484a 52
djmeyers 0:06ee5f8a484a 53 #ifdef TARGET_LIKE_LINUX
djmeyers 0:06ee5f8a484a 54 #include <unistd.h>
djmeyers 0:06ee5f8a484a 55 #else
djmeyers 0:06ee5f8a484a 56
djmeyers 0:06ee5f8a484a 57 #endif
djmeyers 0:06ee5f8a484a 58
djmeyers 0:06ee5f8a484a 59 MbedClient::MbedClient()
djmeyers 0:06ee5f8a484a 60 #ifndef TARGET_LIKE_LINUX
djmeyers 0:06ee5f8a484a 61 :_led(LED3)
djmeyers 0:06ee5f8a484a 62 #endif
djmeyers 0:06ee5f8a484a 63 {
djmeyers 0:06ee5f8a484a 64 _security = NULL;
djmeyers 0:06ee5f8a484a 65 _interface = NULL;
djmeyers 0:06ee5f8a484a 66 _register_security = NULL;
djmeyers 0:06ee5f8a484a 67 _device = NULL;
djmeyers 0:06ee5f8a484a 68 _object = NULL;
djmeyers 0:06ee5f8a484a 69 _bootstrapped = false;
djmeyers 0:06ee5f8a484a 70 _error = false;
djmeyers 0:06ee5f8a484a 71 _registered = false;
djmeyers 0:06ee5f8a484a 72 _unregistered = false;
djmeyers 0:06ee5f8a484a 73 _registration_updated = false;
djmeyers 0:06ee5f8a484a 74 _value = 0;
djmeyers 0:06ee5f8a484a 75 }
djmeyers 0:06ee5f8a484a 76
djmeyers 0:06ee5f8a484a 77 MbedClient::~MbedClient() {
djmeyers 0:06ee5f8a484a 78 if(_security) {
djmeyers 0:06ee5f8a484a 79 delete _security;
djmeyers 0:06ee5f8a484a 80 }
djmeyers 0:06ee5f8a484a 81 if(_register_security){
djmeyers 0:06ee5f8a484a 82 delete _register_security;
djmeyers 0:06ee5f8a484a 83 }
djmeyers 0:06ee5f8a484a 84 if(_device) {
djmeyers 0:06ee5f8a484a 85 M2MDevice::delete_instance();
djmeyers 0:06ee5f8a484a 86 }
djmeyers 0:06ee5f8a484a 87 if(_object) {
djmeyers 0:06ee5f8a484a 88 delete _object;
djmeyers 0:06ee5f8a484a 89 }
djmeyers 0:06ee5f8a484a 90 if(_interface) {
djmeyers 0:06ee5f8a484a 91 delete _interface;
djmeyers 0:06ee5f8a484a 92 }
djmeyers 0:06ee5f8a484a 93 }
djmeyers 0:06ee5f8a484a 94
djmeyers 0:06ee5f8a484a 95 bool MbedClient::create_interface() {
djmeyers 0:06ee5f8a484a 96
djmeyers 0:06ee5f8a484a 97 M2MInterface::NetworkStack stack = M2MInterface::LwIP_IPv4;
djmeyers 0:06ee5f8a484a 98 #ifdef SIXLOWPAN_INTERFACE
djmeyers 0:06ee5f8a484a 99 stack = M2MInterface::Nanostack_IPv6;
djmeyers 0:06ee5f8a484a 100 #endif
djmeyers 0:06ee5f8a484a 101
djmeyers 0:06ee5f8a484a 102 /* From http://www.iana.org/assignments/port-numbers:
djmeyers 0:06ee5f8a484a 103 "The Dynamic and/or Private Ports are those from 49152 through 65535" */
djmeyers 0:06ee5f8a484a 104 srand(time(NULL));
djmeyers 0:06ee5f8a484a 105 uint16_t port = (rand() % (65535-49152)) + 49152;
djmeyers 0:06ee5f8a484a 106
djmeyers 0:06ee5f8a484a 107 _interface = M2MInterfaceFactory::create_interface(*this,
djmeyers 0:06ee5f8a484a 108 CLIENT_NAME,
djmeyers 0:06ee5f8a484a 109 "test",
djmeyers 0:06ee5f8a484a 110 60,
djmeyers 0:06ee5f8a484a 111 port,
djmeyers 0:06ee5f8a484a 112 "",
djmeyers 0:06ee5f8a484a 113 M2MInterface::UDP,
djmeyers 0:06ee5f8a484a 114 stack,
djmeyers 0:06ee5f8a484a 115 "");
djmeyers 0:06ee5f8a484a 116
djmeyers 0:06ee5f8a484a 117 return (_interface == NULL) ? false : true;
djmeyers 0:06ee5f8a484a 118 }
djmeyers 0:06ee5f8a484a 119
djmeyers 0:06ee5f8a484a 120 bool MbedClient::bootstrap_successful() {
djmeyers 0:06ee5f8a484a 121 #ifdef TARGET_LIKE_LINUX
djmeyers 0:06ee5f8a484a 122 while(!_bootstrapped && !_error) {
djmeyers 0:06ee5f8a484a 123 sleep(1);
djmeyers 0:06ee5f8a484a 124 }
djmeyers 0:06ee5f8a484a 125 #endif
djmeyers 0:06ee5f8a484a 126 return _bootstrapped;
djmeyers 0:06ee5f8a484a 127 }
djmeyers 0:06ee5f8a484a 128
djmeyers 0:06ee5f8a484a 129 bool MbedClient::register_successful() {
djmeyers 0:06ee5f8a484a 130 #ifdef TARGET_LIKE_LINUX
djmeyers 0:06ee5f8a484a 131 while(!_registered && !_error) {
djmeyers 0:06ee5f8a484a 132 sleep(1);
djmeyers 0:06ee5f8a484a 133 }
djmeyers 0:06ee5f8a484a 134 #endif
djmeyers 0:06ee5f8a484a 135 return _registered;
djmeyers 0:06ee5f8a484a 136 }
djmeyers 0:06ee5f8a484a 137
djmeyers 0:06ee5f8a484a 138 bool MbedClient::unregister_successful() {
djmeyers 0:06ee5f8a484a 139 #ifdef TARGET_LIKE_LINUX
djmeyers 0:06ee5f8a484a 140 while(!_unregistered && !_error) {
djmeyers 0:06ee5f8a484a 141 sleep(1);
djmeyers 0:06ee5f8a484a 142 }
djmeyers 0:06ee5f8a484a 143 #endif
djmeyers 0:06ee5f8a484a 144 return _unregistered;
djmeyers 0:06ee5f8a484a 145 }
djmeyers 0:06ee5f8a484a 146
djmeyers 0:06ee5f8a484a 147 bool MbedClient::registration_update_successful() {
djmeyers 0:06ee5f8a484a 148 #ifdef TARGET_LIKE_LINUX
djmeyers 0:06ee5f8a484a 149 while(!_registration_updated && !_error) {
djmeyers 0:06ee5f8a484a 150 sleep(1);
djmeyers 0:06ee5f8a484a 151 }
djmeyers 0:06ee5f8a484a 152 #endif
djmeyers 0:06ee5f8a484a 153 return _registration_updated;
djmeyers 0:06ee5f8a484a 154 }
djmeyers 0:06ee5f8a484a 155
djmeyers 0:06ee5f8a484a 156 M2MSecurity* MbedClient::create_bootstrap_object(bool useSecureConnection) {
djmeyers 0:06ee5f8a484a 157 // Creates bootstrap server object with Bootstrap server address and other parameters
djmeyers 0:06ee5f8a484a 158 // required for client to connect to bootstrap server.
djmeyers 0:06ee5f8a484a 159 M2MSecurity *security = M2MInterfaceFactory::create_security(M2MSecurity::Bootstrap);
djmeyers 0:06ee5f8a484a 160 if(security) {
djmeyers 0:06ee5f8a484a 161 if(useSecureConnection){
djmeyers 0:06ee5f8a484a 162 security->set_resource_value(M2MSecurity::M2MServerUri, BOOTSTRAP_SERVER_DTLS_ADDRESS);
djmeyers 0:06ee5f8a484a 163 //TODO: remove these, when bootstrapping server supports DTLS
djmeyers 0:06ee5f8a484a 164 delete security;
djmeyers 0:06ee5f8a484a 165 return NULL;
djmeyers 0:06ee5f8a484a 166 }else{
djmeyers 0:06ee5f8a484a 167 security->set_resource_value(M2MSecurity::M2MServerUri, BOOTSTRAP_SERVER_ADDRESS);
djmeyers 0:06ee5f8a484a 168 //TODO: refactor this out
djmeyers 0:06ee5f8a484a 169 security->set_resource_value(M2MSecurity::SecurityMode, M2MSecurity::NoSecurity);
djmeyers 0:06ee5f8a484a 170 }
djmeyers 0:06ee5f8a484a 171 }
djmeyers 0:06ee5f8a484a 172 return security;
djmeyers 0:06ee5f8a484a 173 }
djmeyers 0:06ee5f8a484a 174
djmeyers 0:06ee5f8a484a 175 M2MSecurity* MbedClient::create_register_object(bool useSecureConnection) {
djmeyers 0:06ee5f8a484a 176 // Creates bootstrap server object with Bootstrap server address and other parameters
djmeyers 0:06ee5f8a484a 177 // required for client to connect to bootstrap server.
djmeyers 0:06ee5f8a484a 178 M2MSecurity *security = M2MInterfaceFactory::create_security(M2MSecurity::M2MServer);
djmeyers 0:06ee5f8a484a 179 if(security) {
djmeyers 0:06ee5f8a484a 180 if(useSecureConnection){
djmeyers 0:06ee5f8a484a 181 security->set_resource_value(M2MSecurity::M2MServerUri, MBED_SERVER_DTLS_ADDRESS);
djmeyers 0:06ee5f8a484a 182 }else{
djmeyers 0:06ee5f8a484a 183 security->set_resource_value(M2MSecurity::M2MServerUri, MBED_SERVER_ADDRESS);
djmeyers 0:06ee5f8a484a 184 }
djmeyers 0:06ee5f8a484a 185 }
djmeyers 0:06ee5f8a484a 186 return security;
djmeyers 0:06ee5f8a484a 187 }
djmeyers 0:06ee5f8a484a 188
djmeyers 0:06ee5f8a484a 189 void MbedClient::test_bootstrap(M2MSecurity *security) {
djmeyers 0:06ee5f8a484a 190 if(_interface) {
djmeyers 0:06ee5f8a484a 191 // Bootstrap function.
djmeyers 0:06ee5f8a484a 192 _interface->bootstrap(security);
djmeyers 0:06ee5f8a484a 193 }
djmeyers 0:06ee5f8a484a 194 }
djmeyers 0:06ee5f8a484a 195
djmeyers 0:06ee5f8a484a 196 M2MDevice* MbedClient::create_device_object() {
djmeyers 0:06ee5f8a484a 197 // Creates device object which contains mandatory resources linked with
djmeyers 0:06ee5f8a484a 198 // device endpoint.
djmeyers 0:06ee5f8a484a 199 M2MDevice *device = M2MInterfaceFactory::create_device();
djmeyers 0:06ee5f8a484a 200 if(device) {
djmeyers 0:06ee5f8a484a 201 device->create_resource(M2MDevice::Manufacturer,MANUFACTURER);
djmeyers 0:06ee5f8a484a 202 device->create_resource(M2MDevice::DeviceType,TYPE);
djmeyers 0:06ee5f8a484a 203 device->create_resource(M2MDevice::ModelNumber,MODEL_NUMBER);
djmeyers 0:06ee5f8a484a 204 device->create_resource(M2MDevice::SerialNumber,SERIAL_NUMBER);
djmeyers 0:06ee5f8a484a 205 }
djmeyers 0:06ee5f8a484a 206 return device;
djmeyers 0:06ee5f8a484a 207 }
djmeyers 0:06ee5f8a484a 208
djmeyers 0:06ee5f8a484a 209 void MbedClient::execute_function(void *argument) {
djmeyers 0:06ee5f8a484a 210 #ifdef TARGET_LIKE_LINUX
djmeyers 0:06ee5f8a484a 211 if(argument) {
djmeyers 0:06ee5f8a484a 212 char* arguments = (char*)argument;
djmeyers 0:06ee5f8a484a 213 printf("Received %s!!\n", arguments);
djmeyers 0:06ee5f8a484a 214 }
djmeyers 0:06ee5f8a484a 215 printf("I am executed !!\n");
djmeyers 0:06ee5f8a484a 216 #else
djmeyers 0:06ee5f8a484a 217 _led == 0 ? _led = 1 : _led = 0;
djmeyers 0:06ee5f8a484a 218 #endif
djmeyers 0:06ee5f8a484a 219 }
djmeyers 0:06ee5f8a484a 220
djmeyers 0:06ee5f8a484a 221 M2MObject* MbedClient::create_generic_object() {
djmeyers 0:06ee5f8a484a 222 _object = M2MInterfaceFactory::create_object("Test");
djmeyers 0:06ee5f8a484a 223 if(_object) {
djmeyers 0:06ee5f8a484a 224 M2MObjectInstance* inst = _object->create_object_instance();
djmeyers 0:06ee5f8a484a 225 if(inst) {
djmeyers 0:06ee5f8a484a 226 inst->set_operation(M2MBase::GET_ALLOWED);
djmeyers 0:06ee5f8a484a 227
djmeyers 0:06ee5f8a484a 228 M2MResource* res = inst->create_dynamic_resource("Dynamic",
djmeyers 0:06ee5f8a484a 229 "ResourceTest",
djmeyers 0:06ee5f8a484a 230 M2MResourceInstance::INTEGER,
djmeyers 0:06ee5f8a484a 231 true);
djmeyers 0:06ee5f8a484a 232
djmeyers 0:06ee5f8a484a 233 char buffer[20];
djmeyers 0:06ee5f8a484a 234 int size = sprintf(buffer,"%d",_value);
djmeyers 0:06ee5f8a484a 235 res->set_operation(M2MBase::GET_PUT_POST_ALLOWED);
djmeyers 0:06ee5f8a484a 236 res->set_value((const uint8_t*)buffer,
djmeyers 0:06ee5f8a484a 237 (const uint32_t)size);
djmeyers 0:06ee5f8a484a 238 res->set_execute_function(execute_callback(this,&MbedClient::execute_function));
djmeyers 0:06ee5f8a484a 239 _value++;
djmeyers 0:06ee5f8a484a 240
djmeyers 0:06ee5f8a484a 241 inst->create_static_resource("Static",
djmeyers 0:06ee5f8a484a 242 "ResourceTest",
djmeyers 0:06ee5f8a484a 243 M2MResourceInstance::STRING,
djmeyers 0:06ee5f8a484a 244 STATIC_VALUE,
djmeyers 0:06ee5f8a484a 245 sizeof(STATIC_VALUE)-1);
djmeyers 0:06ee5f8a484a 246 }
djmeyers 0:06ee5f8a484a 247 }
djmeyers 0:06ee5f8a484a 248 return _object;
djmeyers 0:06ee5f8a484a 249 }
djmeyers 0:06ee5f8a484a 250
djmeyers 0:06ee5f8a484a 251 void MbedClient::update_resource() {
djmeyers 0:06ee5f8a484a 252 if(_object) {
djmeyers 0:06ee5f8a484a 253 M2MObjectInstance* inst = _object->object_instance();
djmeyers 0:06ee5f8a484a 254 if(inst) {
djmeyers 0:06ee5f8a484a 255 M2MResource* res = inst->resource("Dynamic");
djmeyers 0:06ee5f8a484a 256 if( res ){
djmeyers 0:06ee5f8a484a 257 char buffer[20];
djmeyers 0:06ee5f8a484a 258 int size = sprintf(buffer,"%d",_value);
djmeyers 0:06ee5f8a484a 259 res->set_value((const uint8_t*)buffer,
djmeyers 0:06ee5f8a484a 260 (const uint32_t)size);
djmeyers 0:06ee5f8a484a 261 _value++;
djmeyers 0:06ee5f8a484a 262 }
djmeyers 0:06ee5f8a484a 263 }
djmeyers 0:06ee5f8a484a 264 }
djmeyers 0:06ee5f8a484a 265 }
djmeyers 0:06ee5f8a484a 266
djmeyers 0:06ee5f8a484a 267 void MbedClient::test_register(M2MObjectList object_list){
djmeyers 0:06ee5f8a484a 268 if(_interface) {
djmeyers 0:06ee5f8a484a 269 _interface->register_object(_register_security, object_list);
djmeyers 0:06ee5f8a484a 270 }
djmeyers 0:06ee5f8a484a 271 }
djmeyers 0:06ee5f8a484a 272
djmeyers 0:06ee5f8a484a 273 void MbedClient::set_register_object(M2MSecurity *&register_object){
djmeyers 0:06ee5f8a484a 274 if(_register_security) {
djmeyers 0:06ee5f8a484a 275 delete _register_security;
djmeyers 0:06ee5f8a484a 276 _register_security = NULL;
djmeyers 0:06ee5f8a484a 277 }
djmeyers 0:06ee5f8a484a 278 _register_security = register_object;
djmeyers 0:06ee5f8a484a 279
djmeyers 0:06ee5f8a484a 280 }
djmeyers 0:06ee5f8a484a 281
djmeyers 0:06ee5f8a484a 282 void MbedClient::test_update_register() {
djmeyers 0:06ee5f8a484a 283 uint32_t updated_lifetime = 20;
djmeyers 0:06ee5f8a484a 284 _registered = false;
djmeyers 0:06ee5f8a484a 285 _unregistered = false;
djmeyers 0:06ee5f8a484a 286 if(_interface){
djmeyers 0:06ee5f8a484a 287 _interface->update_registration(_register_security,updated_lifetime);
djmeyers 0:06ee5f8a484a 288 }
djmeyers 0:06ee5f8a484a 289 }
djmeyers 0:06ee5f8a484a 290
djmeyers 0:06ee5f8a484a 291 void MbedClient::test_unregister() {
djmeyers 0:06ee5f8a484a 292 if(_interface) {
djmeyers 0:06ee5f8a484a 293 _interface->unregister_object(NULL);
djmeyers 0:06ee5f8a484a 294 }
djmeyers 0:06ee5f8a484a 295 }
djmeyers 0:06ee5f8a484a 296
djmeyers 0:06ee5f8a484a 297 void MbedClient::bootstrap_done(M2MSecurity *server_object){
djmeyers 0:06ee5f8a484a 298 if(server_object) {
djmeyers 0:06ee5f8a484a 299 set_register_object(server_object);
djmeyers 0:06ee5f8a484a 300 _bootstrapped = true;
djmeyers 0:06ee5f8a484a 301 _error = false;
djmeyers 0:06ee5f8a484a 302 printf("\nBootstrapped\n");
djmeyers 0:06ee5f8a484a 303 }
djmeyers 0:06ee5f8a484a 304 }
djmeyers 0:06ee5f8a484a 305
djmeyers 0:06ee5f8a484a 306 void MbedClient::object_registered(M2MSecurity */*security_object*/, const M2MServer &/*server_object*/){
djmeyers 0:06ee5f8a484a 307 _registered = true;
djmeyers 0:06ee5f8a484a 308 _unregistered = false;
djmeyers 0:06ee5f8a484a 309 printf("\nRegistered\n");
djmeyers 0:06ee5f8a484a 310 }
djmeyers 0:06ee5f8a484a 311
djmeyers 0:06ee5f8a484a 312 void MbedClient::object_unregistered(M2MSecurity */*server_object*/){
djmeyers 0:06ee5f8a484a 313 _unregistered = true;
djmeyers 0:06ee5f8a484a 314 _registered = false;
djmeyers 0:06ee5f8a484a 315
djmeyers 0:06ee5f8a484a 316 #ifdef TARGET_LIKE_MBED
djmeyers 0:06ee5f8a484a 317 notify_completion(_unregistered);
djmeyers 0:06ee5f8a484a 318 minar::Scheduler::stop();
djmeyers 0:06ee5f8a484a 319 #endif
djmeyers 0:06ee5f8a484a 320 printf("\nUnregistered\n");
djmeyers 0:06ee5f8a484a 321 }
djmeyers 0:06ee5f8a484a 322
djmeyers 0:06ee5f8a484a 323 void MbedClient::registration_updated(M2MSecurity */*security_object*/, const M2MServer & /*server_object*/){
djmeyers 0:06ee5f8a484a 324 _registration_updated = true;
djmeyers 0:06ee5f8a484a 325 printf("\nregistration updated\n");
djmeyers 0:06ee5f8a484a 326 }
djmeyers 0:06ee5f8a484a 327
djmeyers 0:06ee5f8a484a 328 void MbedClient::error(M2MInterface::Error error){
djmeyers 0:06ee5f8a484a 329 _error = true;
djmeyers 0:06ee5f8a484a 330 printf("\nError occured Error code %d\n", (int)error);
djmeyers 0:06ee5f8a484a 331 }
djmeyers 0:06ee5f8a484a 332
djmeyers 0:06ee5f8a484a 333 void MbedClient::value_updated(M2MBase *base, M2MBase::BaseType type) {
djmeyers 0:06ee5f8a484a 334 printf("\nValue updated of Object name %s and Type %d\n",
djmeyers 0:06ee5f8a484a 335 base->name(), type);
djmeyers 0:06ee5f8a484a 336 }