This is an example of BLE GATT Client, which receives broadcast data from BLE_Server_BME280 ( a GATT server) , then transfers values up to mbed Device Connector (cloud).

Please refer details about BLEClient_mbedDevConn below. https://github.com/soramame21/BLEClient_mbedDevConn

The location of required BLE GATT server, BLE_Server_BME280, is at here. https://developer.mbed.org/users/edamame22/code/BLE_Server_BME280/

Committer:
edamame22
Date:
Thu Apr 13 04:48:11 2017 +0000
Revision:
0:29983394c6b6
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
edamame22 0:29983394c6b6 1 /*
edamame22 0:29983394c6b6 2 * Copyright (c) 2015 ARM Limited. All rights reserved.
edamame22 0:29983394c6b6 3 * SPDX-License-Identifier: Apache-2.0
edamame22 0:29983394c6b6 4 * Licensed under the Apache License, Version 2.0 (the License); you may
edamame22 0:29983394c6b6 5 * not use this file except in compliance with the License.
edamame22 0:29983394c6b6 6 * You may obtain a copy of the License at
edamame22 0:29983394c6b6 7 *
edamame22 0:29983394c6b6 8 * http://www.apache.org/licenses/LICENSE-2.0
edamame22 0:29983394c6b6 9 *
edamame22 0:29983394c6b6 10 * Unless required by applicable law or agreed to in writing, software
edamame22 0:29983394c6b6 11 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
edamame22 0:29983394c6b6 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
edamame22 0:29983394c6b6 13 * See the License for the specific language governing permissions and
edamame22 0:29983394c6b6 14 * limitations under the License.
edamame22 0:29983394c6b6 15 */
edamame22 0:29983394c6b6 16 #include "mbed-client/m2msecurity.h"
edamame22 0:29983394c6b6 17 #include "mbed-client/m2mconstants.h"
edamame22 0:29983394c6b6 18 #include "mbed-client/m2mobject.h"
edamame22 0:29983394c6b6 19 #include "mbed-client/m2mobjectinstance.h"
edamame22 0:29983394c6b6 20 #include "mbed-client/m2mresource.h"
edamame22 0:29983394c6b6 21 #include "mbed-client/m2mstring.h"
edamame22 0:29983394c6b6 22 #include "mbed-trace/mbed_trace.h"
edamame22 0:29983394c6b6 23
edamame22 0:29983394c6b6 24 #include <stdlib.h>
edamame22 0:29983394c6b6 25
edamame22 0:29983394c6b6 26 #define TRACE_GROUP "mClt"
edamame22 0:29983394c6b6 27
edamame22 0:29983394c6b6 28 #define BUFFER_SIZE 21
edamame22 0:29983394c6b6 29
edamame22 0:29983394c6b6 30 M2MSecurity::M2MSecurity(ServerType ser_type)
edamame22 0:29983394c6b6 31 : M2MObject(M2M_SECURITY_ID, stringdup(M2M_SECURITY_ID)),
edamame22 0:29983394c6b6 32 _server_instance(NULL),
edamame22 0:29983394c6b6 33 _server_type(ser_type)
edamame22 0:29983394c6b6 34 {
edamame22 0:29983394c6b6 35 _server_instance = M2MObject::create_object_instance();
edamame22 0:29983394c6b6 36
edamame22 0:29983394c6b6 37 if(_server_instance) {
edamame22 0:29983394c6b6 38 M2MResource* res = _server_instance->create_dynamic_resource(SECURITY_M2M_SERVER_URI,
edamame22 0:29983394c6b6 39 OMA_RESOURCE_TYPE,
edamame22 0:29983394c6b6 40 M2MResourceInstance::STRING,
edamame22 0:29983394c6b6 41 false);
edamame22 0:29983394c6b6 42 if(res) {
edamame22 0:29983394c6b6 43 res->set_operation(M2MBase::NOT_ALLOWED);
edamame22 0:29983394c6b6 44 }
edamame22 0:29983394c6b6 45 res = _server_instance->create_dynamic_resource(SECURITY_BOOTSTRAP_SERVER,
edamame22 0:29983394c6b6 46 OMA_RESOURCE_TYPE,
edamame22 0:29983394c6b6 47 M2MResourceInstance::BOOLEAN,
edamame22 0:29983394c6b6 48 false);
edamame22 0:29983394c6b6 49 if(res) {
edamame22 0:29983394c6b6 50 res->set_operation(M2MBase::NOT_ALLOWED);
edamame22 0:29983394c6b6 51 }
edamame22 0:29983394c6b6 52 res = _server_instance->create_dynamic_resource(SECURITY_SECURITY_MODE,
edamame22 0:29983394c6b6 53 OMA_RESOURCE_TYPE,
edamame22 0:29983394c6b6 54 M2MResourceInstance::INTEGER,
edamame22 0:29983394c6b6 55 false);
edamame22 0:29983394c6b6 56 if(res) {
edamame22 0:29983394c6b6 57 res->set_operation(M2MBase::NOT_ALLOWED);
edamame22 0:29983394c6b6 58 }
edamame22 0:29983394c6b6 59 res = _server_instance->create_dynamic_resource(SECURITY_PUBLIC_KEY,
edamame22 0:29983394c6b6 60 OMA_RESOURCE_TYPE,
edamame22 0:29983394c6b6 61 M2MResourceInstance::OPAQUE,
edamame22 0:29983394c6b6 62 false);
edamame22 0:29983394c6b6 63 if(res) {
edamame22 0:29983394c6b6 64 res->set_operation(M2MBase::NOT_ALLOWED);
edamame22 0:29983394c6b6 65 }
edamame22 0:29983394c6b6 66 res = _server_instance->create_dynamic_resource(SECURITY_SERVER_PUBLIC_KEY,
edamame22 0:29983394c6b6 67 OMA_RESOURCE_TYPE,
edamame22 0:29983394c6b6 68 M2MResourceInstance::OPAQUE,
edamame22 0:29983394c6b6 69 false);
edamame22 0:29983394c6b6 70 if(res) {
edamame22 0:29983394c6b6 71 res->set_operation(M2MBase::NOT_ALLOWED);
edamame22 0:29983394c6b6 72 }
edamame22 0:29983394c6b6 73 res = _server_instance->create_dynamic_resource(SECURITY_SECRET_KEY,
edamame22 0:29983394c6b6 74 OMA_RESOURCE_TYPE,
edamame22 0:29983394c6b6 75 M2MResourceInstance::OPAQUE,
edamame22 0:29983394c6b6 76 false);
edamame22 0:29983394c6b6 77 if(res) {
edamame22 0:29983394c6b6 78 res->set_operation(M2MBase::NOT_ALLOWED);
edamame22 0:29983394c6b6 79 }
edamame22 0:29983394c6b6 80 if(M2MSecurity::M2MServer == ser_type) {
edamame22 0:29983394c6b6 81 res = _server_instance->create_dynamic_resource(SECURITY_SHORT_SERVER_ID,
edamame22 0:29983394c6b6 82 OMA_RESOURCE_TYPE,
edamame22 0:29983394c6b6 83 M2MResourceInstance::INTEGER,
edamame22 0:29983394c6b6 84 false);
edamame22 0:29983394c6b6 85 if(res) {
edamame22 0:29983394c6b6 86 res->set_operation(M2MBase::NOT_ALLOWED);
edamame22 0:29983394c6b6 87 }
edamame22 0:29983394c6b6 88 }
edamame22 0:29983394c6b6 89 }
edamame22 0:29983394c6b6 90 }
edamame22 0:29983394c6b6 91
edamame22 0:29983394c6b6 92 M2MSecurity::~M2MSecurity()
edamame22 0:29983394c6b6 93 {
edamame22 0:29983394c6b6 94 }
edamame22 0:29983394c6b6 95
edamame22 0:29983394c6b6 96 M2MResource* M2MSecurity::create_resource(SecurityResource resource, uint32_t value)
edamame22 0:29983394c6b6 97 {
edamame22 0:29983394c6b6 98 M2MResource* res = NULL;
edamame22 0:29983394c6b6 99 const char* security_id_ptr = "";
edamame22 0:29983394c6b6 100 if(!is_resource_present(resource)) {
edamame22 0:29983394c6b6 101 switch(resource) {
edamame22 0:29983394c6b6 102 case SMSSecurityMode:
edamame22 0:29983394c6b6 103 security_id_ptr = SECURITY_SMS_SECURITY_MODE;
edamame22 0:29983394c6b6 104 break;
edamame22 0:29983394c6b6 105 case M2MServerSMSNumber:
edamame22 0:29983394c6b6 106 security_id_ptr = SECURITY_M2M_SERVER_SMS_NUMBER;
edamame22 0:29983394c6b6 107 break;
edamame22 0:29983394c6b6 108 case ShortServerID:
edamame22 0:29983394c6b6 109 security_id_ptr = SECURITY_SHORT_SERVER_ID;
edamame22 0:29983394c6b6 110 break;
edamame22 0:29983394c6b6 111 case ClientHoldOffTime:
edamame22 0:29983394c6b6 112 security_id_ptr = SECURITY_CLIENT_HOLD_OFF_TIME;
edamame22 0:29983394c6b6 113 break;
edamame22 0:29983394c6b6 114 default:
edamame22 0:29983394c6b6 115 break;
edamame22 0:29983394c6b6 116 }
edamame22 0:29983394c6b6 117 }
edamame22 0:29983394c6b6 118
edamame22 0:29983394c6b6 119 const String security_id(security_id_ptr);
edamame22 0:29983394c6b6 120
edamame22 0:29983394c6b6 121 if(!security_id.empty()) {
edamame22 0:29983394c6b6 122 if(_server_instance) {
edamame22 0:29983394c6b6 123 res = _server_instance->create_dynamic_resource(security_id,OMA_RESOURCE_TYPE,
edamame22 0:29983394c6b6 124 M2MResourceInstance::INTEGER,
edamame22 0:29983394c6b6 125 false);
edamame22 0:29983394c6b6 126
edamame22 0:29983394c6b6 127 if(res) {
edamame22 0:29983394c6b6 128 res->set_operation(M2MBase::NOT_ALLOWED);
edamame22 0:29983394c6b6 129 res->set_value(value);
edamame22 0:29983394c6b6 130 }
edamame22 0:29983394c6b6 131 }
edamame22 0:29983394c6b6 132 }
edamame22 0:29983394c6b6 133 return res;
edamame22 0:29983394c6b6 134 }
edamame22 0:29983394c6b6 135
edamame22 0:29983394c6b6 136 bool M2MSecurity::delete_resource(SecurityResource resource)
edamame22 0:29983394c6b6 137 {
edamame22 0:29983394c6b6 138 bool success = false;
edamame22 0:29983394c6b6 139 const char* security_id_ptr;
edamame22 0:29983394c6b6 140 switch(resource) {
edamame22 0:29983394c6b6 141 case SMSSecurityMode:
edamame22 0:29983394c6b6 142 security_id_ptr = SECURITY_SMS_SECURITY_MODE;
edamame22 0:29983394c6b6 143 break;
edamame22 0:29983394c6b6 144 case M2MServerSMSNumber:
edamame22 0:29983394c6b6 145 security_id_ptr = SECURITY_M2M_SERVER_SMS_NUMBER;
edamame22 0:29983394c6b6 146 break;
edamame22 0:29983394c6b6 147 case ShortServerID:
edamame22 0:29983394c6b6 148 if(M2MSecurity::Bootstrap == _server_type) {
edamame22 0:29983394c6b6 149 security_id_ptr = SECURITY_SHORT_SERVER_ID;
edamame22 0:29983394c6b6 150 }
edamame22 0:29983394c6b6 151 break;
edamame22 0:29983394c6b6 152 case ClientHoldOffTime:
edamame22 0:29983394c6b6 153 security_id_ptr = SECURITY_CLIENT_HOLD_OFF_TIME;
edamame22 0:29983394c6b6 154 break;
edamame22 0:29983394c6b6 155 default:
edamame22 0:29983394c6b6 156 // Others are mandatory resources hence cannot be deleted.
edamame22 0:29983394c6b6 157 security_id_ptr = NULL;
edamame22 0:29983394c6b6 158 break;
edamame22 0:29983394c6b6 159 }
edamame22 0:29983394c6b6 160
edamame22 0:29983394c6b6 161 if(security_id_ptr) {
edamame22 0:29983394c6b6 162 if(_server_instance) {
edamame22 0:29983394c6b6 163 success = _server_instance->remove_resource(security_id_ptr);
edamame22 0:29983394c6b6 164 }
edamame22 0:29983394c6b6 165 }
edamame22 0:29983394c6b6 166 return success;
edamame22 0:29983394c6b6 167 }
edamame22 0:29983394c6b6 168
edamame22 0:29983394c6b6 169 bool M2MSecurity::set_resource_value(SecurityResource resource,
edamame22 0:29983394c6b6 170 const String &value)
edamame22 0:29983394c6b6 171 {
edamame22 0:29983394c6b6 172 bool success = false;
edamame22 0:29983394c6b6 173 if(M2MSecurity::M2MServerUri == resource) {
edamame22 0:29983394c6b6 174 M2MResource* res = get_resource(resource);
edamame22 0:29983394c6b6 175 if(res) {
edamame22 0:29983394c6b6 176 success = res->set_value((const uint8_t*)value.c_str(),(uint32_t)value.length());
edamame22 0:29983394c6b6 177 }
edamame22 0:29983394c6b6 178 }
edamame22 0:29983394c6b6 179 return success;
edamame22 0:29983394c6b6 180 }
edamame22 0:29983394c6b6 181
edamame22 0:29983394c6b6 182 bool M2MSecurity::set_resource_value(SecurityResource resource,
edamame22 0:29983394c6b6 183 uint32_t value)
edamame22 0:29983394c6b6 184 {
edamame22 0:29983394c6b6 185 bool success = false;
edamame22 0:29983394c6b6 186 M2MResource* res = get_resource(resource);
edamame22 0:29983394c6b6 187 if(res) {
edamame22 0:29983394c6b6 188 if(M2MSecurity::SecurityMode == resource ||
edamame22 0:29983394c6b6 189 M2MSecurity::SMSSecurityMode == resource ||
edamame22 0:29983394c6b6 190 M2MSecurity::M2MServerSMSNumber == resource ||
edamame22 0:29983394c6b6 191 M2MSecurity::ShortServerID == resource ||
edamame22 0:29983394c6b6 192 M2MSecurity::ClientHoldOffTime == resource) {
edamame22 0:29983394c6b6 193 // If it is any of the above resource
edamame22 0:29983394c6b6 194 // set the value of the resource.
edamame22 0:29983394c6b6 195 uint8_t size = 0;
edamame22 0:29983394c6b6 196 uint8_t *buffer = String::convert_integer_to_array(value, size);
edamame22 0:29983394c6b6 197 success = res->set_value(buffer,size);
edamame22 0:29983394c6b6 198 free(buffer);
edamame22 0:29983394c6b6 199 }
edamame22 0:29983394c6b6 200 }
edamame22 0:29983394c6b6 201 return success;
edamame22 0:29983394c6b6 202 }
edamame22 0:29983394c6b6 203
edamame22 0:29983394c6b6 204 bool M2MSecurity::set_resource_value(SecurityResource resource,
edamame22 0:29983394c6b6 205 const uint8_t *value,
edamame22 0:29983394c6b6 206 const uint16_t length)
edamame22 0:29983394c6b6 207 {
edamame22 0:29983394c6b6 208 bool success = false;
edamame22 0:29983394c6b6 209 M2MResource* res = get_resource(resource);
edamame22 0:29983394c6b6 210 if(res) {
edamame22 0:29983394c6b6 211 if(M2MSecurity::PublicKey == resource ||
edamame22 0:29983394c6b6 212 M2MSecurity::ServerPublicKey == resource ||
edamame22 0:29983394c6b6 213 M2MSecurity::Secretkey == resource) {
edamame22 0:29983394c6b6 214 success = res->set_value(value,length);
edamame22 0:29983394c6b6 215 }
edamame22 0:29983394c6b6 216 }
edamame22 0:29983394c6b6 217 return success;
edamame22 0:29983394c6b6 218 }
edamame22 0:29983394c6b6 219
edamame22 0:29983394c6b6 220 String M2MSecurity::resource_value_string(SecurityResource resource) const
edamame22 0:29983394c6b6 221 {
edamame22 0:29983394c6b6 222 String value = "";
edamame22 0:29983394c6b6 223 M2MResource* res = get_resource(resource);
edamame22 0:29983394c6b6 224 if(res) {
edamame22 0:29983394c6b6 225 if(M2MSecurity::M2MServerUri == resource) {
edamame22 0:29983394c6b6 226 value = res->get_value_string();
edamame22 0:29983394c6b6 227 }
edamame22 0:29983394c6b6 228 }
edamame22 0:29983394c6b6 229 return value;
edamame22 0:29983394c6b6 230 }
edamame22 0:29983394c6b6 231
edamame22 0:29983394c6b6 232 uint32_t M2MSecurity::resource_value_buffer(SecurityResource resource,
edamame22 0:29983394c6b6 233 uint8_t *&data) const
edamame22 0:29983394c6b6 234 {
edamame22 0:29983394c6b6 235 uint32_t size = 0;
edamame22 0:29983394c6b6 236 M2MResource* res = get_resource(resource);
edamame22 0:29983394c6b6 237 if(res) {
edamame22 0:29983394c6b6 238 if(M2MSecurity::PublicKey == resource ||
edamame22 0:29983394c6b6 239 M2MSecurity::ServerPublicKey == resource ||
edamame22 0:29983394c6b6 240 M2MSecurity::Secretkey == resource) {
edamame22 0:29983394c6b6 241 res->get_value(data,size);
edamame22 0:29983394c6b6 242 }
edamame22 0:29983394c6b6 243 }
edamame22 0:29983394c6b6 244 return size;
edamame22 0:29983394c6b6 245 }
edamame22 0:29983394c6b6 246
edamame22 0:29983394c6b6 247 uint32_t M2MSecurity::resource_value_buffer(SecurityResource resource,
edamame22 0:29983394c6b6 248 const uint8_t *&data) const
edamame22 0:29983394c6b6 249 {
edamame22 0:29983394c6b6 250 uint32_t size = 0;
edamame22 0:29983394c6b6 251 M2MResource* res = get_resource(resource);
edamame22 0:29983394c6b6 252 if(res) {
edamame22 0:29983394c6b6 253 if(M2MSecurity::PublicKey == resource ||
edamame22 0:29983394c6b6 254 M2MSecurity::ServerPublicKey == resource ||
edamame22 0:29983394c6b6 255 M2MSecurity::Secretkey == resource) {
edamame22 0:29983394c6b6 256 data = res->value();
edamame22 0:29983394c6b6 257 size = res->value_length();
edamame22 0:29983394c6b6 258 }
edamame22 0:29983394c6b6 259 }
edamame22 0:29983394c6b6 260 return size;
edamame22 0:29983394c6b6 261 }
edamame22 0:29983394c6b6 262
edamame22 0:29983394c6b6 263
edamame22 0:29983394c6b6 264 uint32_t M2MSecurity::resource_value_int(SecurityResource resource) const
edamame22 0:29983394c6b6 265 {
edamame22 0:29983394c6b6 266 uint32_t value = 0;
edamame22 0:29983394c6b6 267 M2MResource* res = get_resource(resource);
edamame22 0:29983394c6b6 268 if(res) {
edamame22 0:29983394c6b6 269 if(M2MSecurity::SecurityMode == resource ||
edamame22 0:29983394c6b6 270 M2MSecurity::SMSSecurityMode == resource ||
edamame22 0:29983394c6b6 271 M2MSecurity::M2MServerSMSNumber == resource ||
edamame22 0:29983394c6b6 272 M2MSecurity::ShortServerID == resource ||
edamame22 0:29983394c6b6 273 M2MSecurity::ClientHoldOffTime == resource) {
edamame22 0:29983394c6b6 274 // Get the value and convert it into integer. This is not the most
edamame22 0:29983394c6b6 275 // efficient way, as it takes pointless heap copy to get the zero termination.
edamame22 0:29983394c6b6 276 uint8_t* buffer = NULL;
edamame22 0:29983394c6b6 277 uint32_t length = 0;
edamame22 0:29983394c6b6 278 res->get_value(buffer,length);
edamame22 0:29983394c6b6 279 if(buffer) {
edamame22 0:29983394c6b6 280 value = String::convert_array_to_integer(buffer,length);
edamame22 0:29983394c6b6 281 free(buffer);
edamame22 0:29983394c6b6 282 }
edamame22 0:29983394c6b6 283 }
edamame22 0:29983394c6b6 284 }
edamame22 0:29983394c6b6 285 return value;
edamame22 0:29983394c6b6 286 }
edamame22 0:29983394c6b6 287
edamame22 0:29983394c6b6 288 bool M2MSecurity::is_resource_present(SecurityResource resource) const
edamame22 0:29983394c6b6 289 {
edamame22 0:29983394c6b6 290 bool success = false;
edamame22 0:29983394c6b6 291 M2MResource *res = get_resource(resource);
edamame22 0:29983394c6b6 292 if(res) {
edamame22 0:29983394c6b6 293 success = true;
edamame22 0:29983394c6b6 294 }
edamame22 0:29983394c6b6 295 return success;
edamame22 0:29983394c6b6 296 }
edamame22 0:29983394c6b6 297
edamame22 0:29983394c6b6 298 uint16_t M2MSecurity::total_resource_count() const
edamame22 0:29983394c6b6 299 {
edamame22 0:29983394c6b6 300 uint16_t count = 0;
edamame22 0:29983394c6b6 301 if(_server_instance) {
edamame22 0:29983394c6b6 302 count = _server_instance->resources().size();
edamame22 0:29983394c6b6 303 }
edamame22 0:29983394c6b6 304 return count;
edamame22 0:29983394c6b6 305 }
edamame22 0:29983394c6b6 306
edamame22 0:29983394c6b6 307 M2MSecurity::ServerType M2MSecurity::server_type() const
edamame22 0:29983394c6b6 308 {
edamame22 0:29983394c6b6 309 return _server_type;
edamame22 0:29983394c6b6 310 }
edamame22 0:29983394c6b6 311
edamame22 0:29983394c6b6 312 M2MResource* M2MSecurity::get_resource(SecurityResource res) const
edamame22 0:29983394c6b6 313 {
edamame22 0:29983394c6b6 314 M2MResource* res_object = NULL;
edamame22 0:29983394c6b6 315 if(_server_instance) {
edamame22 0:29983394c6b6 316 const char* res_name_ptr = NULL;
edamame22 0:29983394c6b6 317 switch(res) {
edamame22 0:29983394c6b6 318 case M2MServerUri:
edamame22 0:29983394c6b6 319 res_name_ptr = SECURITY_M2M_SERVER_URI;
edamame22 0:29983394c6b6 320 break;
edamame22 0:29983394c6b6 321 case BootstrapServer:
edamame22 0:29983394c6b6 322 res_name_ptr = SECURITY_BOOTSTRAP_SERVER;
edamame22 0:29983394c6b6 323 break;
edamame22 0:29983394c6b6 324 case SecurityMode:
edamame22 0:29983394c6b6 325 res_name_ptr = SECURITY_SECURITY_MODE;
edamame22 0:29983394c6b6 326 break;
edamame22 0:29983394c6b6 327 case PublicKey:
edamame22 0:29983394c6b6 328 res_name_ptr = SECURITY_PUBLIC_KEY;
edamame22 0:29983394c6b6 329 break;
edamame22 0:29983394c6b6 330 case ServerPublicKey:
edamame22 0:29983394c6b6 331 res_name_ptr = SECURITY_SERVER_PUBLIC_KEY;
edamame22 0:29983394c6b6 332 break;
edamame22 0:29983394c6b6 333 case Secretkey:
edamame22 0:29983394c6b6 334 res_name_ptr = SECURITY_SECRET_KEY;
edamame22 0:29983394c6b6 335 break;
edamame22 0:29983394c6b6 336 case SMSSecurityMode:
edamame22 0:29983394c6b6 337 res_name_ptr = SECURITY_SMS_SECURITY_MODE;
edamame22 0:29983394c6b6 338 break;
edamame22 0:29983394c6b6 339 case SMSBindingKey:
edamame22 0:29983394c6b6 340 res_name_ptr = SECURITY_SMS_BINDING_KEY;
edamame22 0:29983394c6b6 341 break;
edamame22 0:29983394c6b6 342 case SMSBindingSecretKey:
edamame22 0:29983394c6b6 343 res_name_ptr = SECURITY_SMS_BINDING_SECRET_KEY;
edamame22 0:29983394c6b6 344 break;
edamame22 0:29983394c6b6 345 case M2MServerSMSNumber:
edamame22 0:29983394c6b6 346 res_name_ptr = SECURITY_M2M_SERVER_SMS_NUMBER;
edamame22 0:29983394c6b6 347 break;
edamame22 0:29983394c6b6 348 case ShortServerID:
edamame22 0:29983394c6b6 349 res_name_ptr = SECURITY_SHORT_SERVER_ID;
edamame22 0:29983394c6b6 350 break;
edamame22 0:29983394c6b6 351 case ClientHoldOffTime:
edamame22 0:29983394c6b6 352 res_name_ptr = SECURITY_CLIENT_HOLD_OFF_TIME;
edamame22 0:29983394c6b6 353 break;
edamame22 0:29983394c6b6 354 }
edamame22 0:29983394c6b6 355
edamame22 0:29983394c6b6 356 if (res_name_ptr) {
edamame22 0:29983394c6b6 357 res_object = _server_instance->resource(res_name_ptr);
edamame22 0:29983394c6b6 358 }
edamame22 0:29983394c6b6 359 }
edamame22 0:29983394c6b6 360 return res_object;
edamame22 0:29983394c6b6 361 }
edamame22 0:29983394c6b6 362
edamame22 0:29983394c6b6 363 void M2MSecurity::clear_resources()
edamame22 0:29983394c6b6 364 {
edamame22 0:29983394c6b6 365 for(int i = 0; i <= M2MSecurity::ClientHoldOffTime; i++) {
edamame22 0:29983394c6b6 366 M2MResource *res = get_resource((SecurityResource) i);
edamame22 0:29983394c6b6 367 if (res) {
edamame22 0:29983394c6b6 368 res->clear_value();
edamame22 0:29983394c6b6 369 }
edamame22 0:29983394c6b6 370 }
edamame22 0:29983394c6b6 371 }