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 "mbed-client/m2mserver.h"
djmeyers 0:06ee5f8a484a 18 #include "mbed-client/m2mconstants.h"
djmeyers 0:06ee5f8a484a 19 #include "mbed-client/m2mobject.h"
djmeyers 0:06ee5f8a484a 20 #include "mbed-client/m2mobjectinstance.h"
djmeyers 0:06ee5f8a484a 21 #include "mbed-client/m2mresource.h"
djmeyers 0:06ee5f8a484a 22 #include "mbed-client/m2mstring.h"
djmeyers 0:06ee5f8a484a 23
djmeyers 0:06ee5f8a484a 24 #define TRACE_GROUP "mClt"
djmeyers 0:06ee5f8a484a 25
djmeyers 0:06ee5f8a484a 26 #define BUFFER_SIZE 21
djmeyers 0:06ee5f8a484a 27
djmeyers 0:06ee5f8a484a 28 M2MServer::M2MServer()
djmeyers 0:06ee5f8a484a 29 : M2MObject(M2M_SERVER_ID, stringdup(M2M_SERVER_ID))
djmeyers 0:06ee5f8a484a 30 {
djmeyers 0:06ee5f8a484a 31 M2MObject::create_object_instance();
djmeyers 0:06ee5f8a484a 32
djmeyers 0:06ee5f8a484a 33 _server_instance = object_instance();
djmeyers 0:06ee5f8a484a 34
djmeyers 0:06ee5f8a484a 35 if(_server_instance) {
djmeyers 0:06ee5f8a484a 36
djmeyers 0:06ee5f8a484a 37 M2MResource* res = _server_instance->create_dynamic_resource(SERVER_SHORT_SERVER_ID,
djmeyers 0:06ee5f8a484a 38 OMA_RESOURCE_TYPE,
djmeyers 0:06ee5f8a484a 39 M2MResourceInstance::INTEGER,
djmeyers 0:06ee5f8a484a 40 true);
djmeyers 0:06ee5f8a484a 41 if(res) {
djmeyers 0:06ee5f8a484a 42 res->set_operation(M2MBase::GET_PUT_ALLOWED);
djmeyers 0:06ee5f8a484a 43 }
djmeyers 0:06ee5f8a484a 44 res = _server_instance->create_dynamic_resource(SERVER_LIFETIME,
djmeyers 0:06ee5f8a484a 45 OMA_RESOURCE_TYPE,
djmeyers 0:06ee5f8a484a 46 M2MResourceInstance::INTEGER,
djmeyers 0:06ee5f8a484a 47 true);
djmeyers 0:06ee5f8a484a 48 if(res) {
djmeyers 0:06ee5f8a484a 49 res->set_operation(M2MBase::GET_PUT_POST_ALLOWED);
djmeyers 0:06ee5f8a484a 50 }
djmeyers 0:06ee5f8a484a 51 res = _server_instance->create_dynamic_resource(SERVER_NOTIFICATION_STORAGE,
djmeyers 0:06ee5f8a484a 52 OMA_RESOURCE_TYPE,
djmeyers 0:06ee5f8a484a 53 M2MResourceInstance::BOOLEAN,
djmeyers 0:06ee5f8a484a 54 true);
djmeyers 0:06ee5f8a484a 55 if(res) {
djmeyers 0:06ee5f8a484a 56 res->set_operation(M2MBase::GET_PUT_POST_ALLOWED);
djmeyers 0:06ee5f8a484a 57 }
djmeyers 0:06ee5f8a484a 58 res = _server_instance->create_dynamic_resource(SERVER_BINDING,
djmeyers 0:06ee5f8a484a 59 OMA_RESOURCE_TYPE,
djmeyers 0:06ee5f8a484a 60 M2MResourceInstance::STRING,
djmeyers 0:06ee5f8a484a 61 true);
djmeyers 0:06ee5f8a484a 62 if(res) {
djmeyers 0:06ee5f8a484a 63 res->set_operation(M2MBase::GET_PUT_POST_ALLOWED);
djmeyers 0:06ee5f8a484a 64 }
djmeyers 0:06ee5f8a484a 65 res = _server_instance->create_dynamic_resource(SERVER_REGISTRATION_UPDATE,
djmeyers 0:06ee5f8a484a 66 OMA_RESOURCE_TYPE,
djmeyers 0:06ee5f8a484a 67 M2MResourceInstance::OPAQUE,
djmeyers 0:06ee5f8a484a 68 false);
djmeyers 0:06ee5f8a484a 69 if(res) {
djmeyers 0:06ee5f8a484a 70 res->set_operation(M2MBase::POST_ALLOWED);
djmeyers 0:06ee5f8a484a 71 }
djmeyers 0:06ee5f8a484a 72 }
djmeyers 0:06ee5f8a484a 73 }
djmeyers 0:06ee5f8a484a 74
djmeyers 0:06ee5f8a484a 75 M2MServer::~M2MServer()
djmeyers 0:06ee5f8a484a 76 {
djmeyers 0:06ee5f8a484a 77
djmeyers 0:06ee5f8a484a 78 }
djmeyers 0:06ee5f8a484a 79
djmeyers 0:06ee5f8a484a 80 M2MResource* M2MServer::create_resource(ServerResource resource, uint32_t value)
djmeyers 0:06ee5f8a484a 81 {
djmeyers 0:06ee5f8a484a 82 M2MResource* res = NULL;
djmeyers 0:06ee5f8a484a 83 const char* server_id_ptr = "";
djmeyers 0:06ee5f8a484a 84 if(!is_resource_present(resource)) {
djmeyers 0:06ee5f8a484a 85 switch(resource) {
djmeyers 0:06ee5f8a484a 86 case DefaultMinPeriod:
djmeyers 0:06ee5f8a484a 87 server_id_ptr = SERVER_DEFAULT_MIN_PERIOD;
djmeyers 0:06ee5f8a484a 88 break;
djmeyers 0:06ee5f8a484a 89 case DefaultMaxPeriod:
djmeyers 0:06ee5f8a484a 90 server_id_ptr = SERVER_DEFAULT_MAX_PERIOD;
djmeyers 0:06ee5f8a484a 91 break;
djmeyers 0:06ee5f8a484a 92 case DisableTimeout:
djmeyers 0:06ee5f8a484a 93 server_id_ptr = SERVER_DISABLE_TIMEOUT;
djmeyers 0:06ee5f8a484a 94 break;
djmeyers 0:06ee5f8a484a 95 default:
djmeyers 0:06ee5f8a484a 96 break;
djmeyers 0:06ee5f8a484a 97 }
djmeyers 0:06ee5f8a484a 98 }
djmeyers 0:06ee5f8a484a 99 String server_id(server_id_ptr);
djmeyers 0:06ee5f8a484a 100
djmeyers 0:06ee5f8a484a 101 if(!server_id.empty()) {
djmeyers 0:06ee5f8a484a 102 if(_server_instance) {
djmeyers 0:06ee5f8a484a 103 res = _server_instance->create_dynamic_resource(server_id,
djmeyers 0:06ee5f8a484a 104 OMA_RESOURCE_TYPE,
djmeyers 0:06ee5f8a484a 105 M2MResourceInstance::INTEGER,
djmeyers 0:06ee5f8a484a 106 true);
djmeyers 0:06ee5f8a484a 107 if(res) {
djmeyers 0:06ee5f8a484a 108 res->set_operation(M2MBase::GET_PUT_POST_ALLOWED);
djmeyers 0:06ee5f8a484a 109
djmeyers 0:06ee5f8a484a 110 res->set_value(value);
djmeyers 0:06ee5f8a484a 111 }
djmeyers 0:06ee5f8a484a 112 }
djmeyers 0:06ee5f8a484a 113 }
djmeyers 0:06ee5f8a484a 114 return res;
djmeyers 0:06ee5f8a484a 115 }
djmeyers 0:06ee5f8a484a 116
djmeyers 0:06ee5f8a484a 117 M2MResource* M2MServer::create_resource(ServerResource resource)
djmeyers 0:06ee5f8a484a 118 {
djmeyers 0:06ee5f8a484a 119 M2MResource* res = NULL;
djmeyers 0:06ee5f8a484a 120 if(!is_resource_present(resource)) {
djmeyers 0:06ee5f8a484a 121 if(M2MServer::Disable == resource) {
djmeyers 0:06ee5f8a484a 122 if(_server_instance) {
djmeyers 0:06ee5f8a484a 123 res = _server_instance->create_dynamic_resource(SERVER_DISABLE,
djmeyers 0:06ee5f8a484a 124 OMA_RESOURCE_TYPE,
djmeyers 0:06ee5f8a484a 125 M2MResourceInstance::OPAQUE,
djmeyers 0:06ee5f8a484a 126 false);
djmeyers 0:06ee5f8a484a 127 if(res) {
djmeyers 0:06ee5f8a484a 128 res->set_operation(M2MBase::POST_ALLOWED);
djmeyers 0:06ee5f8a484a 129 }
djmeyers 0:06ee5f8a484a 130 }
djmeyers 0:06ee5f8a484a 131 }
djmeyers 0:06ee5f8a484a 132 }
djmeyers 0:06ee5f8a484a 133 return res;
djmeyers 0:06ee5f8a484a 134 }
djmeyers 0:06ee5f8a484a 135
djmeyers 0:06ee5f8a484a 136 bool M2MServer::delete_resource(ServerResource resource)
djmeyers 0:06ee5f8a484a 137 {
djmeyers 0:06ee5f8a484a 138 bool success = false;
djmeyers 0:06ee5f8a484a 139 const char* server_id_ptr;
djmeyers 0:06ee5f8a484a 140 switch(resource) {
djmeyers 0:06ee5f8a484a 141 case DefaultMinPeriod:
djmeyers 0:06ee5f8a484a 142 server_id_ptr = SERVER_DEFAULT_MIN_PERIOD;
djmeyers 0:06ee5f8a484a 143 break;
djmeyers 0:06ee5f8a484a 144 case DefaultMaxPeriod:
djmeyers 0:06ee5f8a484a 145 server_id_ptr = SERVER_DEFAULT_MAX_PERIOD;
djmeyers 0:06ee5f8a484a 146 break;
djmeyers 0:06ee5f8a484a 147 case Disable:
djmeyers 0:06ee5f8a484a 148 server_id_ptr = SERVER_DISABLE;
djmeyers 0:06ee5f8a484a 149 break;
djmeyers 0:06ee5f8a484a 150 case DisableTimeout:
djmeyers 0:06ee5f8a484a 151 server_id_ptr = SERVER_DISABLE_TIMEOUT;
djmeyers 0:06ee5f8a484a 152 break;
djmeyers 0:06ee5f8a484a 153 default:
djmeyers 0:06ee5f8a484a 154 server_id_ptr = NULL;
djmeyers 0:06ee5f8a484a 155 break;
djmeyers 0:06ee5f8a484a 156 }
djmeyers 0:06ee5f8a484a 157
djmeyers 0:06ee5f8a484a 158 if(server_id_ptr) {
djmeyers 0:06ee5f8a484a 159 if(_server_instance) {
djmeyers 0:06ee5f8a484a 160 success = _server_instance->remove_resource(server_id_ptr);
djmeyers 0:06ee5f8a484a 161 }
djmeyers 0:06ee5f8a484a 162 }
djmeyers 0:06ee5f8a484a 163 return success;
djmeyers 0:06ee5f8a484a 164 }
djmeyers 0:06ee5f8a484a 165
djmeyers 0:06ee5f8a484a 166 bool M2MServer::set_resource_value(ServerResource resource,
djmeyers 0:06ee5f8a484a 167 const String &value)
djmeyers 0:06ee5f8a484a 168 {
djmeyers 0:06ee5f8a484a 169 bool success = false;
djmeyers 0:06ee5f8a484a 170 M2MResource* res = get_resource(resource);
djmeyers 0:06ee5f8a484a 171 if(res && (M2MServer::Binding == resource)) {
djmeyers 0:06ee5f8a484a 172 success = res->set_value((const uint8_t*)value.c_str(),(uint32_t)value.length());
djmeyers 0:06ee5f8a484a 173 }
djmeyers 0:06ee5f8a484a 174 return success;
djmeyers 0:06ee5f8a484a 175 }
djmeyers 0:06ee5f8a484a 176
djmeyers 0:06ee5f8a484a 177 bool M2MServer::set_resource_value(ServerResource resource,
djmeyers 0:06ee5f8a484a 178 uint32_t value)
djmeyers 0:06ee5f8a484a 179 {
djmeyers 0:06ee5f8a484a 180 bool success = false;
djmeyers 0:06ee5f8a484a 181 M2MResource* res = get_resource(resource);
djmeyers 0:06ee5f8a484a 182 if(res) {
djmeyers 0:06ee5f8a484a 183 if(M2MServer::ShortServerID == resource ||
djmeyers 0:06ee5f8a484a 184 M2MServer::Lifetime == resource ||
djmeyers 0:06ee5f8a484a 185 M2MServer::DefaultMinPeriod == resource ||
djmeyers 0:06ee5f8a484a 186 M2MServer::DefaultMaxPeriod == resource ||
djmeyers 0:06ee5f8a484a 187 M2MServer::DisableTimeout == resource ||
djmeyers 0:06ee5f8a484a 188 M2MServer::NotificationStorage == resource) {
djmeyers 0:06ee5f8a484a 189 // If it is any of the above resource
djmeyers 0:06ee5f8a484a 190 // set the value of the resource.
djmeyers 0:06ee5f8a484a 191
djmeyers 0:06ee5f8a484a 192 success = res->set_value(value);
djmeyers 0:06ee5f8a484a 193 }
djmeyers 0:06ee5f8a484a 194 }
djmeyers 0:06ee5f8a484a 195 return success;
djmeyers 0:06ee5f8a484a 196 }
djmeyers 0:06ee5f8a484a 197
djmeyers 0:06ee5f8a484a 198 String M2MServer::resource_value_string(ServerResource resource) const
djmeyers 0:06ee5f8a484a 199 {
djmeyers 0:06ee5f8a484a 200 String value = "";
djmeyers 0:06ee5f8a484a 201 M2MResource* res = get_resource(resource);
djmeyers 0:06ee5f8a484a 202 if(res && (M2MServer::Binding == resource)) {
djmeyers 0:06ee5f8a484a 203
djmeyers 0:06ee5f8a484a 204 value = res->get_value_string();
djmeyers 0:06ee5f8a484a 205 }
djmeyers 0:06ee5f8a484a 206 return value;
djmeyers 0:06ee5f8a484a 207 }
djmeyers 0:06ee5f8a484a 208
djmeyers 0:06ee5f8a484a 209
djmeyers 0:06ee5f8a484a 210 uint32_t M2MServer::resource_value_int(ServerResource resource) const
djmeyers 0:06ee5f8a484a 211 {
djmeyers 0:06ee5f8a484a 212 uint32_t value = 0;
djmeyers 0:06ee5f8a484a 213 M2MResource* res = get_resource(resource);
djmeyers 0:06ee5f8a484a 214 if(res) {
djmeyers 0:06ee5f8a484a 215 if(M2MServer::ShortServerID == resource ||
djmeyers 0:06ee5f8a484a 216 M2MServer::Lifetime == resource ||
djmeyers 0:06ee5f8a484a 217 M2MServer::DefaultMinPeriod == resource ||
djmeyers 0:06ee5f8a484a 218 M2MServer::DefaultMaxPeriod == resource ||
djmeyers 0:06ee5f8a484a 219 M2MServer::DisableTimeout == resource ||
djmeyers 0:06ee5f8a484a 220 M2MServer::NotificationStorage == resource) {
djmeyers 0:06ee5f8a484a 221
djmeyers 0:06ee5f8a484a 222 value = res->get_value_int();
djmeyers 0:06ee5f8a484a 223 }
djmeyers 0:06ee5f8a484a 224 }
djmeyers 0:06ee5f8a484a 225 return value;
djmeyers 0:06ee5f8a484a 226 }
djmeyers 0:06ee5f8a484a 227
djmeyers 0:06ee5f8a484a 228 bool M2MServer::is_resource_present(ServerResource resource) const
djmeyers 0:06ee5f8a484a 229 {
djmeyers 0:06ee5f8a484a 230 bool success = false;
djmeyers 0:06ee5f8a484a 231 M2MResource *res = get_resource(resource);
djmeyers 0:06ee5f8a484a 232 if(res) {
djmeyers 0:06ee5f8a484a 233 success = true;
djmeyers 0:06ee5f8a484a 234 }
djmeyers 0:06ee5f8a484a 235 return success;
djmeyers 0:06ee5f8a484a 236 }
djmeyers 0:06ee5f8a484a 237
djmeyers 0:06ee5f8a484a 238 uint16_t M2MServer::total_resource_count() const
djmeyers 0:06ee5f8a484a 239 {
djmeyers 0:06ee5f8a484a 240 uint16_t total_count = 0;
djmeyers 0:06ee5f8a484a 241 if(_server_instance) {
djmeyers 0:06ee5f8a484a 242 total_count = _server_instance->resources().size();
djmeyers 0:06ee5f8a484a 243 }
djmeyers 0:06ee5f8a484a 244 return total_count;
djmeyers 0:06ee5f8a484a 245 }
djmeyers 0:06ee5f8a484a 246
djmeyers 0:06ee5f8a484a 247 M2MResource* M2MServer::get_resource(ServerResource res) const
djmeyers 0:06ee5f8a484a 248 {
djmeyers 0:06ee5f8a484a 249 M2MResource* res_object = NULL;
djmeyers 0:06ee5f8a484a 250 const char* res_name_ptr = NULL;
djmeyers 0:06ee5f8a484a 251 switch(res) {
djmeyers 0:06ee5f8a484a 252 case ShortServerID:
djmeyers 0:06ee5f8a484a 253 res_name_ptr = SERVER_SHORT_SERVER_ID;
djmeyers 0:06ee5f8a484a 254 break;
djmeyers 0:06ee5f8a484a 255 case Lifetime:
djmeyers 0:06ee5f8a484a 256 res_name_ptr = SERVER_LIFETIME;
djmeyers 0:06ee5f8a484a 257 break;
djmeyers 0:06ee5f8a484a 258 case DefaultMinPeriod:
djmeyers 0:06ee5f8a484a 259 res_name_ptr = SERVER_DEFAULT_MIN_PERIOD;
djmeyers 0:06ee5f8a484a 260 break;
djmeyers 0:06ee5f8a484a 261 case DefaultMaxPeriod:
djmeyers 0:06ee5f8a484a 262 res_name_ptr = SERVER_DEFAULT_MAX_PERIOD;
djmeyers 0:06ee5f8a484a 263 break;
djmeyers 0:06ee5f8a484a 264 case Disable:
djmeyers 0:06ee5f8a484a 265 res_name_ptr = SERVER_DISABLE;
djmeyers 0:06ee5f8a484a 266 break;
djmeyers 0:06ee5f8a484a 267 case DisableTimeout:
djmeyers 0:06ee5f8a484a 268 res_name_ptr = SERVER_DISABLE_TIMEOUT;
djmeyers 0:06ee5f8a484a 269 break;
djmeyers 0:06ee5f8a484a 270 case NotificationStorage:
djmeyers 0:06ee5f8a484a 271 res_name_ptr = SERVER_NOTIFICATION_STORAGE;
djmeyers 0:06ee5f8a484a 272 break;
djmeyers 0:06ee5f8a484a 273 case Binding:
djmeyers 0:06ee5f8a484a 274 res_name_ptr = SERVER_BINDING;
djmeyers 0:06ee5f8a484a 275 break;
djmeyers 0:06ee5f8a484a 276 case RegistrationUpdate:
djmeyers 0:06ee5f8a484a 277 res_name_ptr = SERVER_REGISTRATION_UPDATE;
djmeyers 0:06ee5f8a484a 278 break;
djmeyers 0:06ee5f8a484a 279 }
djmeyers 0:06ee5f8a484a 280
djmeyers 0:06ee5f8a484a 281 if(res_name_ptr) {
djmeyers 0:06ee5f8a484a 282 if(_server_instance) {
djmeyers 0:06ee5f8a484a 283 res_object = _server_instance->resource(res_name_ptr);
djmeyers 0:06ee5f8a484a 284 }
djmeyers 0:06ee5f8a484a 285 }
djmeyers 0:06ee5f8a484a 286 return res_object;
djmeyers 0:06ee5f8a484a 287 }