Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of mbed-client by
source/m2msecurity.cpp@4:ae5178938864, 2016-04-02 (annotated)
- 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?
| User | Revision | Line number | New 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 <cstdio> |
| Christopher Haster |
1:79b6cc67d8b4 | 17 | #include "mbed-client/m2msecurity.h" |
| Christopher Haster |
1:79b6cc67d8b4 | 18 | #include "mbed-client/m2mconstants.h" |
| Christopher Haster |
1:79b6cc67d8b4 | 19 | #include "mbed-client/m2mobject.h" |
| Christopher Haster |
1:79b6cc67d8b4 | 20 | #include "mbed-client/m2mobjectinstance.h" |
| Christopher Haster |
1:79b6cc67d8b4 | 21 | #include "mbed-client/m2mresource.h" |
| Yogesh Pande |
4:ae5178938864 | 22 | #include "mbed-client/m2mstring.h" |
| Christopher Haster |
1:79b6cc67d8b4 | 23 | |
| Yogesh Pande |
4:ae5178938864 | 24 | #define TRACE_GROUP "mClt" |
| Yogesh Pande |
4:ae5178938864 | 25 | |
| Yogesh Pande |
4:ae5178938864 | 26 | #define BUFFER_SIZE 21 |
| Christopher Haster |
1:79b6cc67d8b4 | 27 | |
| Christopher Haster |
1:79b6cc67d8b4 | 28 | M2MSecurity::M2MSecurity(ServerType ser_type) |
| Christopher Haster |
1:79b6cc67d8b4 | 29 | : M2MObject(M2M_SECURITY_ID), |
| Christopher Haster |
1:79b6cc67d8b4 | 30 | _server_type(ser_type), |
| Christopher Haster |
1:79b6cc67d8b4 | 31 | _server_instance(NULL) |
| Christopher Haster |
1:79b6cc67d8b4 | 32 | { |
| Christopher Haster |
1:79b6cc67d8b4 | 33 | _server_instance = M2MObject::create_object_instance(); |
| Christopher Haster |
1:79b6cc67d8b4 | 34 | |
| Christopher Haster |
1:79b6cc67d8b4 | 35 | if(_server_instance) { |
| Christopher Haster |
1:79b6cc67d8b4 | 36 | |
| Christopher Haster |
1:79b6cc67d8b4 | 37 | M2MResource* res = _server_instance->create_dynamic_resource(SECURITY_M2M_SERVER_URI, |
| Christopher Haster |
1:79b6cc67d8b4 | 38 | OMA_RESOURCE_TYPE, |
| Christopher Haster |
1:79b6cc67d8b4 | 39 | M2MResourceInstance::STRING, |
| Christopher Haster |
1:79b6cc67d8b4 | 40 | false); |
| Christopher Haster |
1:79b6cc67d8b4 | 41 | if(res) { |
| Christopher Haster |
1:79b6cc67d8b4 | 42 | res->set_operation(M2MBase::NOT_ALLOWED); |
| Christopher Haster |
1:79b6cc67d8b4 | 43 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 44 | res = _server_instance->create_dynamic_resource(SECURITY_BOOTSTRAP_SERVER, |
| Christopher Haster |
1:79b6cc67d8b4 | 45 | OMA_RESOURCE_TYPE, |
| Christopher Haster |
1:79b6cc67d8b4 | 46 | M2MResourceInstance::BOOLEAN, |
| Christopher Haster |
1:79b6cc67d8b4 | 47 | false); |
| Christopher Haster |
1:79b6cc67d8b4 | 48 | if(res) { |
| Christopher Haster |
1:79b6cc67d8b4 | 49 | res->set_operation(M2MBase::NOT_ALLOWED); |
| Christopher Haster |
1:79b6cc67d8b4 | 50 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 51 | res = _server_instance->create_dynamic_resource(SECURITY_SECURITY_MODE, |
| Christopher Haster |
1:79b6cc67d8b4 | 52 | OMA_RESOURCE_TYPE, |
| Christopher Haster |
1:79b6cc67d8b4 | 53 | M2MResourceInstance::INTEGER, |
| Christopher Haster |
1:79b6cc67d8b4 | 54 | false); |
| Christopher Haster |
1:79b6cc67d8b4 | 55 | if(res) { |
| Christopher Haster |
1:79b6cc67d8b4 | 56 | res->set_operation(M2MBase::NOT_ALLOWED); |
| Christopher Haster |
1:79b6cc67d8b4 | 57 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 58 | res = _server_instance->create_dynamic_resource(SECURITY_PUBLIC_KEY, |
| Christopher Haster |
1:79b6cc67d8b4 | 59 | OMA_RESOURCE_TYPE, |
| Christopher Haster |
1:79b6cc67d8b4 | 60 | M2MResourceInstance::OPAQUE, |
| Christopher Haster |
1:79b6cc67d8b4 | 61 | false); |
| Christopher Haster |
1:79b6cc67d8b4 | 62 | if(res) { |
| Christopher Haster |
1:79b6cc67d8b4 | 63 | res->set_operation(M2MBase::NOT_ALLOWED); |
| Christopher Haster |
1:79b6cc67d8b4 | 64 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 65 | res = _server_instance->create_dynamic_resource(SECURITY_SERVER_PUBLIC_KEY, |
| Christopher Haster |
1:79b6cc67d8b4 | 66 | OMA_RESOURCE_TYPE, |
| Christopher Haster |
1:79b6cc67d8b4 | 67 | M2MResourceInstance::OPAQUE, |
| Christopher Haster |
1:79b6cc67d8b4 | 68 | false); |
| Christopher Haster |
1:79b6cc67d8b4 | 69 | if(res) { |
| Christopher Haster |
1:79b6cc67d8b4 | 70 | res->set_operation(M2MBase::NOT_ALLOWED); |
| Christopher Haster |
1:79b6cc67d8b4 | 71 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 72 | res = _server_instance->create_dynamic_resource(SECURITY_SECRET_KEY, |
| Christopher Haster |
1:79b6cc67d8b4 | 73 | OMA_RESOURCE_TYPE, |
| Christopher Haster |
1:79b6cc67d8b4 | 74 | M2MResourceInstance::OPAQUE, |
| Christopher Haster |
1:79b6cc67d8b4 | 75 | false); |
| Christopher Haster |
1:79b6cc67d8b4 | 76 | if(res) { |
| Christopher Haster |
1:79b6cc67d8b4 | 77 | res->set_operation(M2MBase::NOT_ALLOWED); |
| Christopher Haster |
1:79b6cc67d8b4 | 78 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 79 | if(M2MSecurity::M2MServer == ser_type) { |
| Christopher Haster |
1:79b6cc67d8b4 | 80 | res = _server_instance->create_dynamic_resource(SECURITY_SHORT_SERVER_ID, |
| Christopher Haster |
1:79b6cc67d8b4 | 81 | OMA_RESOURCE_TYPE, |
| Christopher Haster |
1:79b6cc67d8b4 | 82 | M2MResourceInstance::INTEGER, |
| Christopher Haster |
1:79b6cc67d8b4 | 83 | false); |
| Christopher Haster |
1:79b6cc67d8b4 | 84 | if(res) { |
| Christopher Haster |
1:79b6cc67d8b4 | 85 | res->set_operation(M2MBase::NOT_ALLOWED); |
| Christopher Haster |
1:79b6cc67d8b4 | 86 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 87 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 88 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 89 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 90 | |
| Christopher Haster |
1:79b6cc67d8b4 | 91 | M2MSecurity::~M2MSecurity() |
| Christopher Haster |
1:79b6cc67d8b4 | 92 | { |
| Christopher Haster |
1:79b6cc67d8b4 | 93 | _server_instance = NULL; |
| Christopher Haster |
1:79b6cc67d8b4 | 94 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 95 | |
| Christopher Haster |
1:79b6cc67d8b4 | 96 | M2MResource* M2MSecurity::create_resource(SecurityResource resource, uint32_t value) |
| Christopher Haster |
1:79b6cc67d8b4 | 97 | { |
| Christopher Haster |
1:79b6cc67d8b4 | 98 | M2MResource* res = NULL; |
| Christopher Haster |
1:79b6cc67d8b4 | 99 | String security_id = ""; |
| Christopher Haster |
1:79b6cc67d8b4 | 100 | if(!is_resource_present(resource)) { |
| Christopher Haster |
1:79b6cc67d8b4 | 101 | switch(resource) { |
| Christopher Haster |
1:79b6cc67d8b4 | 102 | case SMSSecurityMode: |
| Christopher Haster |
1:79b6cc67d8b4 | 103 | security_id = SECURITY_SMS_SECURITY_MODE; |
| Christopher Haster |
1:79b6cc67d8b4 | 104 | break; |
| Christopher Haster |
1:79b6cc67d8b4 | 105 | case M2MServerSMSNumber: |
| Christopher Haster |
1:79b6cc67d8b4 | 106 | security_id = SECURITY_M2M_SERVER_SMS_NUMBER; |
| Christopher Haster |
1:79b6cc67d8b4 | 107 | break; |
| Christopher Haster |
1:79b6cc67d8b4 | 108 | case ShortServerID: |
| Christopher Haster |
1:79b6cc67d8b4 | 109 | security_id = SECURITY_SHORT_SERVER_ID; |
| Christopher Haster |
1:79b6cc67d8b4 | 110 | break; |
| Christopher Haster |
1:79b6cc67d8b4 | 111 | case ClientHoldOffTime: |
| Christopher Haster |
1:79b6cc67d8b4 | 112 | security_id = SECURITY_CLIENT_HOLD_OFF_TIME; |
| Christopher Haster |
1:79b6cc67d8b4 | 113 | break; |
| Christopher Haster |
1:79b6cc67d8b4 | 114 | default: |
| Christopher Haster |
1:79b6cc67d8b4 | 115 | break; |
| Christopher Haster |
1:79b6cc67d8b4 | 116 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 117 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 118 | if(!security_id.empty()) { |
| Christopher Haster |
1:79b6cc67d8b4 | 119 | if(_server_instance) { |
| Christopher Haster |
1:79b6cc67d8b4 | 120 | |
| Christopher Haster |
1:79b6cc67d8b4 | 121 | res = _server_instance->create_dynamic_resource(security_id,OMA_RESOURCE_TYPE, |
| Christopher Haster |
1:79b6cc67d8b4 | 122 | M2MResourceInstance::INTEGER, |
| Christopher Haster |
1:79b6cc67d8b4 | 123 | false); |
| Christopher Haster |
1:79b6cc67d8b4 | 124 | |
| Christopher Haster |
1:79b6cc67d8b4 | 125 | if(res) { |
| Yogesh Pande |
4:ae5178938864 | 126 | res->set_operation(M2MBase::NOT_ALLOWED); |
| Yogesh Pande |
4:ae5178938864 | 127 | char *buffer = (char*)malloc(BUFFER_SIZE); |
| Christopher Haster |
1:79b6cc67d8b4 | 128 | if(buffer) { |
| Yogesh Pande |
4:ae5178938864 | 129 | uint32_t size = m2m::itoa_c(value, buffer); |
| Yogesh Pande |
4:ae5178938864 | 130 | if (size <= BUFFER_SIZE) { |
| Yogesh Pande |
4:ae5178938864 | 131 | res->set_value((const uint8_t*)buffer, size); |
| Yogesh Pande |
4:ae5178938864 | 132 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 133 | free(buffer); |
| Christopher Haster |
1:79b6cc67d8b4 | 134 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 135 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 136 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 137 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 138 | return res; |
| Christopher Haster |
1:79b6cc67d8b4 | 139 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 140 | |
| Christopher Haster |
1:79b6cc67d8b4 | 141 | bool M2MSecurity::delete_resource(SecurityResource resource) |
| Christopher Haster |
1:79b6cc67d8b4 | 142 | { |
| Christopher Haster |
1:79b6cc67d8b4 | 143 | bool success = false; |
| Christopher Haster |
1:79b6cc67d8b4 | 144 | String security_id = ""; |
| Christopher Haster |
1:79b6cc67d8b4 | 145 | switch(resource) { |
| Christopher Haster |
1:79b6cc67d8b4 | 146 | case SMSSecurityMode: |
| Christopher Haster |
1:79b6cc67d8b4 | 147 | security_id = SECURITY_SMS_SECURITY_MODE; |
| Christopher Haster |
1:79b6cc67d8b4 | 148 | break; |
| Christopher Haster |
1:79b6cc67d8b4 | 149 | case M2MServerSMSNumber: |
| Christopher Haster |
1:79b6cc67d8b4 | 150 | security_id = SECURITY_M2M_SERVER_SMS_NUMBER; |
| Christopher Haster |
1:79b6cc67d8b4 | 151 | break; |
| Christopher Haster |
1:79b6cc67d8b4 | 152 | case ShortServerID: |
| Christopher Haster |
1:79b6cc67d8b4 | 153 | if(M2MSecurity::Bootstrap == _server_type) { |
| Christopher Haster |
1:79b6cc67d8b4 | 154 | security_id = SECURITY_SHORT_SERVER_ID; |
| Christopher Haster |
1:79b6cc67d8b4 | 155 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 156 | break; |
| Christopher Haster |
1:79b6cc67d8b4 | 157 | case ClientHoldOffTime: |
| Christopher Haster |
1:79b6cc67d8b4 | 158 | security_id = SECURITY_CLIENT_HOLD_OFF_TIME; |
| Christopher Haster |
1:79b6cc67d8b4 | 159 | break; |
| Christopher Haster |
1:79b6cc67d8b4 | 160 | default: |
| Christopher Haster |
1:79b6cc67d8b4 | 161 | // Others are mandatory resources hence cannot be deleted. |
| Christopher Haster |
1:79b6cc67d8b4 | 162 | break; |
| Christopher Haster |
1:79b6cc67d8b4 | 163 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 164 | if(!security_id.empty()) { |
| Christopher Haster |
1:79b6cc67d8b4 | 165 | if(_server_instance) { |
| Christopher Haster |
1:79b6cc67d8b4 | 166 | success = _server_instance->remove_resource(security_id); |
| Christopher Haster |
1:79b6cc67d8b4 | 167 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 168 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 169 | return success; |
| Christopher Haster |
1:79b6cc67d8b4 | 170 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 171 | |
| Christopher Haster |
1:79b6cc67d8b4 | 172 | bool M2MSecurity::set_resource_value(SecurityResource resource, |
| Christopher Haster |
1:79b6cc67d8b4 | 173 | const String &value) |
| Christopher Haster |
1:79b6cc67d8b4 | 174 | { |
| Christopher Haster |
1:79b6cc67d8b4 | 175 | bool success = false; |
| Christopher Haster |
1:79b6cc67d8b4 | 176 | if(M2MSecurity::M2MServerUri == resource) { |
| Christopher Haster |
1:79b6cc67d8b4 | 177 | M2MResource* res = get_resource(resource); |
| Christopher Haster |
1:79b6cc67d8b4 | 178 | if(res) { |
| Christopher Haster |
1:79b6cc67d8b4 | 179 | success = res->set_value((const uint8_t*)value.c_str(),(uint32_t)value.length()); |
| Christopher Haster |
1:79b6cc67d8b4 | 180 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 181 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 182 | return success; |
| Christopher Haster |
1:79b6cc67d8b4 | 183 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 184 | |
| Christopher Haster |
1:79b6cc67d8b4 | 185 | bool M2MSecurity::set_resource_value(SecurityResource resource, |
| Christopher Haster |
1:79b6cc67d8b4 | 186 | uint32_t value) |
| Christopher Haster |
1:79b6cc67d8b4 | 187 | { |
| Christopher Haster |
1:79b6cc67d8b4 | 188 | bool success = false; |
| Christopher Haster |
1:79b6cc67d8b4 | 189 | M2MResource* res = get_resource(resource); |
| Christopher Haster |
1:79b6cc67d8b4 | 190 | if(res) { |
| Christopher Haster |
1:79b6cc67d8b4 | 191 | if(M2MSecurity::SecurityMode == resource || |
| Christopher Haster |
1:79b6cc67d8b4 | 192 | M2MSecurity::SMSSecurityMode == resource || |
| Christopher Haster |
1:79b6cc67d8b4 | 193 | M2MSecurity::M2MServerSMSNumber == resource || |
| Christopher Haster |
1:79b6cc67d8b4 | 194 | M2MSecurity::ShortServerID == resource || |
| Christopher Haster |
1:79b6cc67d8b4 | 195 | M2MSecurity::ClientHoldOffTime == resource) { |
| Christopher Haster |
1:79b6cc67d8b4 | 196 | // If it is any of the above resource |
| Yogesh Pande |
4:ae5178938864 | 197 | // set the value of the resource. |
| Yogesh Pande |
4:ae5178938864 | 198 | char *buffer = (char*)malloc(BUFFER_SIZE); |
| Christopher Haster |
1:79b6cc67d8b4 | 199 | if(buffer) { |
| Yogesh Pande |
4:ae5178938864 | 200 | uint32_t size = m2m::itoa_c(value, buffer); |
| Yogesh Pande |
4:ae5178938864 | 201 | if (size <= BUFFER_SIZE) { |
| Yogesh Pande |
4:ae5178938864 | 202 | success = res->set_value((const uint8_t*)buffer, size); |
| Yogesh Pande |
4:ae5178938864 | 203 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 204 | free(buffer); |
| Christopher Haster |
1:79b6cc67d8b4 | 205 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 206 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 207 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 208 | return success; |
| Christopher Haster |
1:79b6cc67d8b4 | 209 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 210 | |
| Christopher Haster |
1:79b6cc67d8b4 | 211 | bool M2MSecurity::set_resource_value(SecurityResource resource, |
| Christopher Haster |
1:79b6cc67d8b4 | 212 | const uint8_t *value, |
| Christopher Haster |
1:79b6cc67d8b4 | 213 | const uint16_t length) |
| Christopher Haster |
1:79b6cc67d8b4 | 214 | { |
| Christopher Haster |
1:79b6cc67d8b4 | 215 | bool success = false; |
| Christopher Haster |
1:79b6cc67d8b4 | 216 | M2MResource* res = get_resource(resource); |
| Christopher Haster |
1:79b6cc67d8b4 | 217 | if(res) { |
| Christopher Haster |
1:79b6cc67d8b4 | 218 | if(M2MSecurity::PublicKey == resource || |
| Christopher Haster |
1:79b6cc67d8b4 | 219 | M2MSecurity::ServerPublicKey == resource || |
| Christopher Haster |
1:79b6cc67d8b4 | 220 | M2MSecurity::Secretkey == resource) { |
| Christopher Haster |
1:79b6cc67d8b4 | 221 | success = res->set_value(value,length); |
| Christopher Haster |
1:79b6cc67d8b4 | 222 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 223 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 224 | return success; |
| Christopher Haster |
1:79b6cc67d8b4 | 225 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 226 | |
| Christopher Haster |
1:79b6cc67d8b4 | 227 | String M2MSecurity::resource_value_string(SecurityResource resource) const |
| Christopher Haster |
1:79b6cc67d8b4 | 228 | { |
| Christopher Haster |
1:79b6cc67d8b4 | 229 | String value = ""; |
| Christopher Haster |
1:79b6cc67d8b4 | 230 | M2MResource* res = get_resource(resource); |
| Christopher Haster |
1:79b6cc67d8b4 | 231 | if(res) { |
| Christopher Haster |
1:79b6cc67d8b4 | 232 | if(M2MSecurity::M2MServerUri == resource) { |
| Christopher Haster |
1:79b6cc67d8b4 | 233 | uint8_t* buffer = NULL; |
| Christopher Haster |
1:79b6cc67d8b4 | 234 | uint32_t length = 0; |
| Christopher Haster |
1:79b6cc67d8b4 | 235 | res->get_value(buffer,length); |
| Christopher Haster |
1:79b6cc67d8b4 | 236 | |
| Christopher Haster |
1:79b6cc67d8b4 | 237 | char *char_buffer = (char*)malloc(length+1); |
| Christopher Haster |
1:79b6cc67d8b4 | 238 | if(char_buffer) { |
| Christopher Haster |
1:79b6cc67d8b4 | 239 | memset(char_buffer,0,length+1); |
| Christopher Haster |
1:79b6cc67d8b4 | 240 | if(buffer) { |
| Christopher Haster |
1:79b6cc67d8b4 | 241 | memcpy(char_buffer,(char*)buffer,length); |
| Christopher Haster |
1:79b6cc67d8b4 | 242 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 243 | String s_name(char_buffer); |
| Christopher Haster |
1:79b6cc67d8b4 | 244 | value = s_name; |
| Christopher Haster |
1:79b6cc67d8b4 | 245 | free(char_buffer); |
| Christopher Haster |
1:79b6cc67d8b4 | 246 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 247 | if(buffer) { |
| Christopher Haster |
1:79b6cc67d8b4 | 248 | free(buffer); |
| Christopher Haster |
1:79b6cc67d8b4 | 249 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 250 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 251 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 252 | return value; |
| Christopher Haster |
1:79b6cc67d8b4 | 253 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 254 | |
| Christopher Haster |
1:79b6cc67d8b4 | 255 | uint32_t M2MSecurity::resource_value_buffer(SecurityResource resource, |
| Christopher Haster |
1:79b6cc67d8b4 | 256 | uint8_t *&data) const |
| Christopher Haster |
1:79b6cc67d8b4 | 257 | { |
| Christopher Haster |
1:79b6cc67d8b4 | 258 | uint32_t size = 0; |
| Christopher Haster |
1:79b6cc67d8b4 | 259 | M2MResource* res = get_resource(resource); |
| Christopher Haster |
1:79b6cc67d8b4 | 260 | if(res) { |
| Christopher Haster |
1:79b6cc67d8b4 | 261 | if(M2MSecurity::PublicKey == resource || |
| Christopher Haster |
1:79b6cc67d8b4 | 262 | M2MSecurity::ServerPublicKey == resource || |
| Christopher Haster |
1:79b6cc67d8b4 | 263 | M2MSecurity::Secretkey == resource) { |
| Christopher Haster |
1:79b6cc67d8b4 | 264 | res->get_value(data,size); |
| Christopher Haster |
1:79b6cc67d8b4 | 265 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 266 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 267 | return size; |
| Christopher Haster |
1:79b6cc67d8b4 | 268 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 269 | |
| Christopher Haster |
1:79b6cc67d8b4 | 270 | |
| Christopher Haster |
1:79b6cc67d8b4 | 271 | uint32_t M2MSecurity::resource_value_int(SecurityResource resource) const |
| Christopher Haster |
1:79b6cc67d8b4 | 272 | { |
| Christopher Haster |
1:79b6cc67d8b4 | 273 | uint32_t value = 0; |
| Christopher Haster |
1:79b6cc67d8b4 | 274 | M2MResource* res = get_resource(resource); |
| Christopher Haster |
1:79b6cc67d8b4 | 275 | if(res) { |
| Christopher Haster |
1:79b6cc67d8b4 | 276 | if(M2MSecurity::SecurityMode == resource || |
| Christopher Haster |
1:79b6cc67d8b4 | 277 | M2MSecurity::SMSSecurityMode == resource || |
| Christopher Haster |
1:79b6cc67d8b4 | 278 | M2MSecurity::M2MServerSMSNumber == resource || |
| Christopher Haster |
1:79b6cc67d8b4 | 279 | M2MSecurity::ShortServerID == resource || |
| Christopher Haster |
1:79b6cc67d8b4 | 280 | M2MSecurity::ClientHoldOffTime == resource) { |
| Christopher Haster |
1:79b6cc67d8b4 | 281 | // Get the value and convert it into integer |
| Christopher Haster |
1:79b6cc67d8b4 | 282 | uint8_t* buffer = NULL; |
| Christopher Haster |
1:79b6cc67d8b4 | 283 | uint32_t length = 0; |
| Christopher Haster |
1:79b6cc67d8b4 | 284 | res->get_value(buffer,length); |
| Christopher Haster |
1:79b6cc67d8b4 | 285 | if(buffer) { |
| Christopher Haster |
1:79b6cc67d8b4 | 286 | value = atoi((const char*)buffer); |
| Christopher Haster |
1:79b6cc67d8b4 | 287 | free(buffer); |
| Christopher Haster |
1:79b6cc67d8b4 | 288 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 289 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 290 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 291 | return value; |
| Christopher Haster |
1:79b6cc67d8b4 | 292 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 293 | |
| Christopher Haster |
1:79b6cc67d8b4 | 294 | bool M2MSecurity::is_resource_present(SecurityResource resource) const |
| Christopher Haster |
1:79b6cc67d8b4 | 295 | { |
| Christopher Haster |
1:79b6cc67d8b4 | 296 | bool success = false; |
| Christopher Haster |
1:79b6cc67d8b4 | 297 | M2MResource *res = get_resource(resource); |
| Christopher Haster |
1:79b6cc67d8b4 | 298 | if(res) { |
| Christopher Haster |
1:79b6cc67d8b4 | 299 | success = true; |
| Christopher Haster |
1:79b6cc67d8b4 | 300 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 301 | return success; |
| Christopher Haster |
1:79b6cc67d8b4 | 302 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 303 | |
| Christopher Haster |
1:79b6cc67d8b4 | 304 | uint16_t M2MSecurity::total_resource_count() const |
| Christopher Haster |
1:79b6cc67d8b4 | 305 | { |
| Christopher Haster |
1:79b6cc67d8b4 | 306 | uint16_t count = 0; |
| Christopher Haster |
1:79b6cc67d8b4 | 307 | if(_server_instance) { |
| Christopher Haster |
1:79b6cc67d8b4 | 308 | count = _server_instance->resources().size(); |
| Christopher Haster |
1:79b6cc67d8b4 | 309 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 310 | return count; |
| Christopher Haster |
1:79b6cc67d8b4 | 311 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 312 | |
| Christopher Haster |
1:79b6cc67d8b4 | 313 | M2MSecurity::ServerType M2MSecurity::server_type() const |
| Christopher Haster |
1:79b6cc67d8b4 | 314 | { |
| Christopher Haster |
1:79b6cc67d8b4 | 315 | return _server_type; |
| Christopher Haster |
1:79b6cc67d8b4 | 316 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 317 | |
| Christopher Haster |
1:79b6cc67d8b4 | 318 | M2MResource* M2MSecurity::get_resource(SecurityResource res) const |
| Christopher Haster |
1:79b6cc67d8b4 | 319 | { |
| Christopher Haster |
1:79b6cc67d8b4 | 320 | M2MResource* res_object = NULL; |
| Christopher Haster |
1:79b6cc67d8b4 | 321 | if(_server_instance) { |
| Christopher Haster |
1:79b6cc67d8b4 | 322 | String res_name = ""; |
| Christopher Haster |
1:79b6cc67d8b4 | 323 | switch(res) { |
| Christopher Haster |
1:79b6cc67d8b4 | 324 | case M2MServerUri: |
| Christopher Haster |
1:79b6cc67d8b4 | 325 | res_name = SECURITY_M2M_SERVER_URI; |
| Christopher Haster |
1:79b6cc67d8b4 | 326 | break; |
| Christopher Haster |
1:79b6cc67d8b4 | 327 | case BootstrapServer: |
| Christopher Haster |
1:79b6cc67d8b4 | 328 | res_name = SECURITY_BOOTSTRAP_SERVER; |
| Christopher Haster |
1:79b6cc67d8b4 | 329 | break; |
| Christopher Haster |
1:79b6cc67d8b4 | 330 | case SecurityMode: |
| Christopher Haster |
1:79b6cc67d8b4 | 331 | res_name = SECURITY_SECURITY_MODE; |
| Christopher Haster |
1:79b6cc67d8b4 | 332 | break; |
| Christopher Haster |
1:79b6cc67d8b4 | 333 | case PublicKey: |
| Christopher Haster |
1:79b6cc67d8b4 | 334 | res_name = SECURITY_PUBLIC_KEY; |
| Christopher Haster |
1:79b6cc67d8b4 | 335 | break; |
| Christopher Haster |
1:79b6cc67d8b4 | 336 | case ServerPublicKey: |
| Christopher Haster |
1:79b6cc67d8b4 | 337 | res_name = SECURITY_SERVER_PUBLIC_KEY; |
| Christopher Haster |
1:79b6cc67d8b4 | 338 | break; |
| Christopher Haster |
1:79b6cc67d8b4 | 339 | case Secretkey: |
| Christopher Haster |
1:79b6cc67d8b4 | 340 | res_name = SECURITY_SECRET_KEY; |
| Christopher Haster |
1:79b6cc67d8b4 | 341 | break; |
| Christopher Haster |
1:79b6cc67d8b4 | 342 | case SMSSecurityMode: |
| Christopher Haster |
1:79b6cc67d8b4 | 343 | res_name = SECURITY_SMS_SECURITY_MODE; |
| Christopher Haster |
1:79b6cc67d8b4 | 344 | break; |
| Christopher Haster |
1:79b6cc67d8b4 | 345 | case SMSBindingKey: |
| Christopher Haster |
1:79b6cc67d8b4 | 346 | res_name = SECURITY_SMS_BINDING_KEY; |
| Christopher Haster |
1:79b6cc67d8b4 | 347 | break; |
| Christopher Haster |
1:79b6cc67d8b4 | 348 | case SMSBindingSecretKey: |
| Christopher Haster |
1:79b6cc67d8b4 | 349 | res_name = SECURITY_SMS_BINDING_SECRET_KEY; |
| Christopher Haster |
1:79b6cc67d8b4 | 350 | break; |
| Christopher Haster |
1:79b6cc67d8b4 | 351 | case M2MServerSMSNumber: |
| Christopher Haster |
1:79b6cc67d8b4 | 352 | res_name = SECURITY_M2M_SERVER_SMS_NUMBER; |
| Christopher Haster |
1:79b6cc67d8b4 | 353 | break; |
| Christopher Haster |
1:79b6cc67d8b4 | 354 | case ShortServerID: |
| Christopher Haster |
1:79b6cc67d8b4 | 355 | res_name = SECURITY_SHORT_SERVER_ID; |
| Christopher Haster |
1:79b6cc67d8b4 | 356 | break; |
| Christopher Haster |
1:79b6cc67d8b4 | 357 | case ClientHoldOffTime: |
| Christopher Haster |
1:79b6cc67d8b4 | 358 | res_name = SECURITY_CLIENT_HOLD_OFF_TIME; |
| Christopher Haster |
1:79b6cc67d8b4 | 359 | break; |
| Christopher Haster |
1:79b6cc67d8b4 | 360 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 361 | res_object = _server_instance->resource(res_name); |
| Christopher Haster |
1:79b6cc67d8b4 | 362 | } |
| Christopher Haster |
1:79b6cc67d8b4 | 363 | return res_object; |
| Christopher Haster |
1:79b6cc67d8b4 | 364 | } |
