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