Toyomasa Watarai / simple-mbed-cloud-client

Dependents:  

Committer:
MACRUM
Date:
Mon Jul 02 06:30:39 2018 +0000
Revision:
0:276e7a263c35
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MACRUM 0:276e7a263c35 1 /*
MACRUM 0:276e7a263c35 2 * Copyright (c) 2015 ARM Limited. All rights reserved.
MACRUM 0:276e7a263c35 3 * SPDX-License-Identifier: Apache-2.0
MACRUM 0:276e7a263c35 4 * Licensed under the Apache License, Version 2.0 (the License); you may
MACRUM 0:276e7a263c35 5 * not use this file except in compliance with the License.
MACRUM 0:276e7a263c35 6 * You may obtain a copy of the License at
MACRUM 0:276e7a263c35 7 *
MACRUM 0:276e7a263c35 8 * http://www.apache.org/licenses/LICENSE-2.0
MACRUM 0:276e7a263c35 9 *
MACRUM 0:276e7a263c35 10 * Unless required by applicable law or agreed to in writing, software
MACRUM 0:276e7a263c35 11 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
MACRUM 0:276e7a263c35 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
MACRUM 0:276e7a263c35 13 * See the License for the specific language governing permissions and
MACRUM 0:276e7a263c35 14 * limitations under the License.
MACRUM 0:276e7a263c35 15 */
MACRUM 0:276e7a263c35 16
MACRUM 0:276e7a263c35 17 #include "mbed-client/m2mserver.h"
MACRUM 0:276e7a263c35 18 #include "mbed-client/m2mconstants.h"
MACRUM 0:276e7a263c35 19 #include "mbed-client/m2mobject.h"
MACRUM 0:276e7a263c35 20 #include "mbed-client/m2mobjectinstance.h"
MACRUM 0:276e7a263c35 21 #include "mbed-client/m2mresource.h"
MACRUM 0:276e7a263c35 22 #include "mbed-client/m2mstring.h"
MACRUM 0:276e7a263c35 23
MACRUM 0:276e7a263c35 24 #define TRACE_GROUP "mClt"
MACRUM 0:276e7a263c35 25
MACRUM 0:276e7a263c35 26 #define BUFFER_SIZE 21
MACRUM 0:276e7a263c35 27
MACRUM 0:276e7a263c35 28 M2MServer::M2MServer()
MACRUM 0:276e7a263c35 29 : M2MObject(M2M_SERVER_ID, stringdup(M2M_SERVER_ID))
MACRUM 0:276e7a263c35 30 {
MACRUM 0:276e7a263c35 31 M2MObject::create_object_instance();
MACRUM 0:276e7a263c35 32
MACRUM 0:276e7a263c35 33 _server_instance = object_instance();
MACRUM 0:276e7a263c35 34
MACRUM 0:276e7a263c35 35 if(_server_instance) {
MACRUM 0:276e7a263c35 36
MACRUM 0:276e7a263c35 37 M2MResource* res = _server_instance->create_dynamic_resource(SERVER_SHORT_SERVER_ID,
MACRUM 0:276e7a263c35 38 OMA_RESOURCE_TYPE,
MACRUM 0:276e7a263c35 39 M2MResourceInstance::INTEGER,
MACRUM 0:276e7a263c35 40 true);
MACRUM 0:276e7a263c35 41 if(res) {
MACRUM 0:276e7a263c35 42 res->set_operation(M2MBase::GET_PUT_ALLOWED);
MACRUM 0:276e7a263c35 43 }
MACRUM 0:276e7a263c35 44 res = _server_instance->create_dynamic_resource(SERVER_LIFETIME,
MACRUM 0:276e7a263c35 45 OMA_RESOURCE_TYPE,
MACRUM 0:276e7a263c35 46 M2MResourceInstance::INTEGER,
MACRUM 0:276e7a263c35 47 true);
MACRUM 0:276e7a263c35 48 if(res) {
MACRUM 0:276e7a263c35 49 res->set_operation(M2MBase::GET_PUT_POST_ALLOWED);
MACRUM 0:276e7a263c35 50 }
MACRUM 0:276e7a263c35 51 res = _server_instance->create_dynamic_resource(SERVER_NOTIFICATION_STORAGE,
MACRUM 0:276e7a263c35 52 OMA_RESOURCE_TYPE,
MACRUM 0:276e7a263c35 53 M2MResourceInstance::BOOLEAN,
MACRUM 0:276e7a263c35 54 true);
MACRUM 0:276e7a263c35 55 if(res) {
MACRUM 0:276e7a263c35 56 res->set_operation(M2MBase::GET_PUT_POST_ALLOWED);
MACRUM 0:276e7a263c35 57 }
MACRUM 0:276e7a263c35 58 res = _server_instance->create_dynamic_resource(SERVER_BINDING,
MACRUM 0:276e7a263c35 59 OMA_RESOURCE_TYPE,
MACRUM 0:276e7a263c35 60 M2MResourceInstance::STRING,
MACRUM 0:276e7a263c35 61 true);
MACRUM 0:276e7a263c35 62 if(res) {
MACRUM 0:276e7a263c35 63 res->set_operation(M2MBase::GET_PUT_POST_ALLOWED);
MACRUM 0:276e7a263c35 64 }
MACRUM 0:276e7a263c35 65 res = _server_instance->create_dynamic_resource(SERVER_REGISTRATION_UPDATE,
MACRUM 0:276e7a263c35 66 OMA_RESOURCE_TYPE,
MACRUM 0:276e7a263c35 67 M2MResourceInstance::OPAQUE,
MACRUM 0:276e7a263c35 68 false);
MACRUM 0:276e7a263c35 69 if(res) {
MACRUM 0:276e7a263c35 70 res->set_operation(M2MBase::POST_ALLOWED);
MACRUM 0:276e7a263c35 71 }
MACRUM 0:276e7a263c35 72 }
MACRUM 0:276e7a263c35 73 }
MACRUM 0:276e7a263c35 74
MACRUM 0:276e7a263c35 75 M2MServer::~M2MServer()
MACRUM 0:276e7a263c35 76 {
MACRUM 0:276e7a263c35 77
MACRUM 0:276e7a263c35 78 }
MACRUM 0:276e7a263c35 79
MACRUM 0:276e7a263c35 80 M2MResource* M2MServer::create_resource(ServerResource resource, uint32_t value)
MACRUM 0:276e7a263c35 81 {
MACRUM 0:276e7a263c35 82 M2MResource* res = NULL;
MACRUM 0:276e7a263c35 83 const char* server_id_ptr = "";
MACRUM 0:276e7a263c35 84 if(!is_resource_present(resource)) {
MACRUM 0:276e7a263c35 85 switch(resource) {
MACRUM 0:276e7a263c35 86 case DefaultMinPeriod:
MACRUM 0:276e7a263c35 87 server_id_ptr = SERVER_DEFAULT_MIN_PERIOD;
MACRUM 0:276e7a263c35 88 break;
MACRUM 0:276e7a263c35 89 case DefaultMaxPeriod:
MACRUM 0:276e7a263c35 90 server_id_ptr = SERVER_DEFAULT_MAX_PERIOD;
MACRUM 0:276e7a263c35 91 break;
MACRUM 0:276e7a263c35 92 case DisableTimeout:
MACRUM 0:276e7a263c35 93 server_id_ptr = SERVER_DISABLE_TIMEOUT;
MACRUM 0:276e7a263c35 94 break;
MACRUM 0:276e7a263c35 95 default:
MACRUM 0:276e7a263c35 96 break;
MACRUM 0:276e7a263c35 97 }
MACRUM 0:276e7a263c35 98 }
MACRUM 0:276e7a263c35 99 String server_id(server_id_ptr);
MACRUM 0:276e7a263c35 100
MACRUM 0:276e7a263c35 101 if(!server_id.empty()) {
MACRUM 0:276e7a263c35 102 if(_server_instance) {
MACRUM 0:276e7a263c35 103 res = _server_instance->create_dynamic_resource(server_id,
MACRUM 0:276e7a263c35 104 OMA_RESOURCE_TYPE,
MACRUM 0:276e7a263c35 105 M2MResourceInstance::INTEGER,
MACRUM 0:276e7a263c35 106 true);
MACRUM 0:276e7a263c35 107 if(res) {
MACRUM 0:276e7a263c35 108 res->set_operation(M2MBase::GET_PUT_POST_ALLOWED);
MACRUM 0:276e7a263c35 109
MACRUM 0:276e7a263c35 110 res->set_value(value);
MACRUM 0:276e7a263c35 111 }
MACRUM 0:276e7a263c35 112 }
MACRUM 0:276e7a263c35 113 }
MACRUM 0:276e7a263c35 114 return res;
MACRUM 0:276e7a263c35 115 }
MACRUM 0:276e7a263c35 116
MACRUM 0:276e7a263c35 117 M2MResource* M2MServer::create_resource(ServerResource resource)
MACRUM 0:276e7a263c35 118 {
MACRUM 0:276e7a263c35 119 M2MResource* res = NULL;
MACRUM 0:276e7a263c35 120 if(!is_resource_present(resource)) {
MACRUM 0:276e7a263c35 121 if(M2MServer::Disable == resource) {
MACRUM 0:276e7a263c35 122 if(_server_instance) {
MACRUM 0:276e7a263c35 123 res = _server_instance->create_dynamic_resource(SERVER_DISABLE,
MACRUM 0:276e7a263c35 124 OMA_RESOURCE_TYPE,
MACRUM 0:276e7a263c35 125 M2MResourceInstance::OPAQUE,
MACRUM 0:276e7a263c35 126 false);
MACRUM 0:276e7a263c35 127 if(res) {
MACRUM 0:276e7a263c35 128 res->set_operation(M2MBase::POST_ALLOWED);
MACRUM 0:276e7a263c35 129 }
MACRUM 0:276e7a263c35 130 }
MACRUM 0:276e7a263c35 131 }
MACRUM 0:276e7a263c35 132 }
MACRUM 0:276e7a263c35 133 return res;
MACRUM 0:276e7a263c35 134 }
MACRUM 0:276e7a263c35 135
MACRUM 0:276e7a263c35 136 bool M2MServer::delete_resource(ServerResource resource)
MACRUM 0:276e7a263c35 137 {
MACRUM 0:276e7a263c35 138 bool success = false;
MACRUM 0:276e7a263c35 139 const char* server_id_ptr;
MACRUM 0:276e7a263c35 140 switch(resource) {
MACRUM 0:276e7a263c35 141 case DefaultMinPeriod:
MACRUM 0:276e7a263c35 142 server_id_ptr = SERVER_DEFAULT_MIN_PERIOD;
MACRUM 0:276e7a263c35 143 break;
MACRUM 0:276e7a263c35 144 case DefaultMaxPeriod:
MACRUM 0:276e7a263c35 145 server_id_ptr = SERVER_DEFAULT_MAX_PERIOD;
MACRUM 0:276e7a263c35 146 break;
MACRUM 0:276e7a263c35 147 case Disable:
MACRUM 0:276e7a263c35 148 server_id_ptr = SERVER_DISABLE;
MACRUM 0:276e7a263c35 149 break;
MACRUM 0:276e7a263c35 150 case DisableTimeout:
MACRUM 0:276e7a263c35 151 server_id_ptr = SERVER_DISABLE_TIMEOUT;
MACRUM 0:276e7a263c35 152 break;
MACRUM 0:276e7a263c35 153 default:
MACRUM 0:276e7a263c35 154 server_id_ptr = NULL;
MACRUM 0:276e7a263c35 155 break;
MACRUM 0:276e7a263c35 156 }
MACRUM 0:276e7a263c35 157
MACRUM 0:276e7a263c35 158 if(server_id_ptr) {
MACRUM 0:276e7a263c35 159 if(_server_instance) {
MACRUM 0:276e7a263c35 160 success = _server_instance->remove_resource(server_id_ptr);
MACRUM 0:276e7a263c35 161 }
MACRUM 0:276e7a263c35 162 }
MACRUM 0:276e7a263c35 163 return success;
MACRUM 0:276e7a263c35 164 }
MACRUM 0:276e7a263c35 165
MACRUM 0:276e7a263c35 166 bool M2MServer::set_resource_value(ServerResource resource,
MACRUM 0:276e7a263c35 167 const String &value)
MACRUM 0:276e7a263c35 168 {
MACRUM 0:276e7a263c35 169 bool success = false;
MACRUM 0:276e7a263c35 170 M2MResource* res = get_resource(resource);
MACRUM 0:276e7a263c35 171 if(res && (M2MServer::Binding == resource)) {
MACRUM 0:276e7a263c35 172 success = res->set_value((const uint8_t*)value.c_str(),(uint32_t)value.length());
MACRUM 0:276e7a263c35 173 }
MACRUM 0:276e7a263c35 174 return success;
MACRUM 0:276e7a263c35 175 }
MACRUM 0:276e7a263c35 176
MACRUM 0:276e7a263c35 177 bool M2MServer::set_resource_value(ServerResource resource,
MACRUM 0:276e7a263c35 178 uint32_t value)
MACRUM 0:276e7a263c35 179 {
MACRUM 0:276e7a263c35 180 bool success = false;
MACRUM 0:276e7a263c35 181 M2MResource* res = get_resource(resource);
MACRUM 0:276e7a263c35 182 if(res) {
MACRUM 0:276e7a263c35 183 if(M2MServer::ShortServerID == resource ||
MACRUM 0:276e7a263c35 184 M2MServer::Lifetime == resource ||
MACRUM 0:276e7a263c35 185 M2MServer::DefaultMinPeriod == resource ||
MACRUM 0:276e7a263c35 186 M2MServer::DefaultMaxPeriod == resource ||
MACRUM 0:276e7a263c35 187 M2MServer::DisableTimeout == resource ||
MACRUM 0:276e7a263c35 188 M2MServer::NotificationStorage == resource) {
MACRUM 0:276e7a263c35 189 // If it is any of the above resource
MACRUM 0:276e7a263c35 190 // set the value of the resource.
MACRUM 0:276e7a263c35 191
MACRUM 0:276e7a263c35 192 success = res->set_value(value);
MACRUM 0:276e7a263c35 193 }
MACRUM 0:276e7a263c35 194 }
MACRUM 0:276e7a263c35 195 return success;
MACRUM 0:276e7a263c35 196 }
MACRUM 0:276e7a263c35 197
MACRUM 0:276e7a263c35 198 String M2MServer::resource_value_string(ServerResource resource) const
MACRUM 0:276e7a263c35 199 {
MACRUM 0:276e7a263c35 200 String value = "";
MACRUM 0:276e7a263c35 201 M2MResource* res = get_resource(resource);
MACRUM 0:276e7a263c35 202 if(res && (M2MServer::Binding == resource)) {
MACRUM 0:276e7a263c35 203
MACRUM 0:276e7a263c35 204 value = res->get_value_string();
MACRUM 0:276e7a263c35 205 }
MACRUM 0:276e7a263c35 206 return value;
MACRUM 0:276e7a263c35 207 }
MACRUM 0:276e7a263c35 208
MACRUM 0:276e7a263c35 209
MACRUM 0:276e7a263c35 210 uint32_t M2MServer::resource_value_int(ServerResource resource) const
MACRUM 0:276e7a263c35 211 {
MACRUM 0:276e7a263c35 212 uint32_t value = 0;
MACRUM 0:276e7a263c35 213 M2MResource* res = get_resource(resource);
MACRUM 0:276e7a263c35 214 if(res) {
MACRUM 0:276e7a263c35 215 if(M2MServer::ShortServerID == resource ||
MACRUM 0:276e7a263c35 216 M2MServer::Lifetime == resource ||
MACRUM 0:276e7a263c35 217 M2MServer::DefaultMinPeriod == resource ||
MACRUM 0:276e7a263c35 218 M2MServer::DefaultMaxPeriod == resource ||
MACRUM 0:276e7a263c35 219 M2MServer::DisableTimeout == resource ||
MACRUM 0:276e7a263c35 220 M2MServer::NotificationStorage == resource) {
MACRUM 0:276e7a263c35 221
MACRUM 0:276e7a263c35 222 value = res->get_value_int();
MACRUM 0:276e7a263c35 223 }
MACRUM 0:276e7a263c35 224 }
MACRUM 0:276e7a263c35 225 return value;
MACRUM 0:276e7a263c35 226 }
MACRUM 0:276e7a263c35 227
MACRUM 0:276e7a263c35 228 bool M2MServer::is_resource_present(ServerResource resource) const
MACRUM 0:276e7a263c35 229 {
MACRUM 0:276e7a263c35 230 bool success = false;
MACRUM 0:276e7a263c35 231 M2MResource *res = get_resource(resource);
MACRUM 0:276e7a263c35 232 if(res) {
MACRUM 0:276e7a263c35 233 success = true;
MACRUM 0:276e7a263c35 234 }
MACRUM 0:276e7a263c35 235 return success;
MACRUM 0:276e7a263c35 236 }
MACRUM 0:276e7a263c35 237
MACRUM 0:276e7a263c35 238 uint16_t M2MServer::total_resource_count() const
MACRUM 0:276e7a263c35 239 {
MACRUM 0:276e7a263c35 240 uint16_t total_count = 0;
MACRUM 0:276e7a263c35 241 if(_server_instance) {
MACRUM 0:276e7a263c35 242 total_count = _server_instance->resources().size();
MACRUM 0:276e7a263c35 243 }
MACRUM 0:276e7a263c35 244 return total_count;
MACRUM 0:276e7a263c35 245 }
MACRUM 0:276e7a263c35 246
MACRUM 0:276e7a263c35 247 M2MResource* M2MServer::get_resource(ServerResource res) const
MACRUM 0:276e7a263c35 248 {
MACRUM 0:276e7a263c35 249 M2MResource* res_object = NULL;
MACRUM 0:276e7a263c35 250 const char* res_name_ptr = NULL;
MACRUM 0:276e7a263c35 251 switch(res) {
MACRUM 0:276e7a263c35 252 case ShortServerID:
MACRUM 0:276e7a263c35 253 res_name_ptr = SERVER_SHORT_SERVER_ID;
MACRUM 0:276e7a263c35 254 break;
MACRUM 0:276e7a263c35 255 case Lifetime:
MACRUM 0:276e7a263c35 256 res_name_ptr = SERVER_LIFETIME;
MACRUM 0:276e7a263c35 257 break;
MACRUM 0:276e7a263c35 258 case DefaultMinPeriod:
MACRUM 0:276e7a263c35 259 res_name_ptr = SERVER_DEFAULT_MIN_PERIOD;
MACRUM 0:276e7a263c35 260 break;
MACRUM 0:276e7a263c35 261 case DefaultMaxPeriod:
MACRUM 0:276e7a263c35 262 res_name_ptr = SERVER_DEFAULT_MAX_PERIOD;
MACRUM 0:276e7a263c35 263 break;
MACRUM 0:276e7a263c35 264 case Disable:
MACRUM 0:276e7a263c35 265 res_name_ptr = SERVER_DISABLE;
MACRUM 0:276e7a263c35 266 break;
MACRUM 0:276e7a263c35 267 case DisableTimeout:
MACRUM 0:276e7a263c35 268 res_name_ptr = SERVER_DISABLE_TIMEOUT;
MACRUM 0:276e7a263c35 269 break;
MACRUM 0:276e7a263c35 270 case NotificationStorage:
MACRUM 0:276e7a263c35 271 res_name_ptr = SERVER_NOTIFICATION_STORAGE;
MACRUM 0:276e7a263c35 272 break;
MACRUM 0:276e7a263c35 273 case Binding:
MACRUM 0:276e7a263c35 274 res_name_ptr = SERVER_BINDING;
MACRUM 0:276e7a263c35 275 break;
MACRUM 0:276e7a263c35 276 case RegistrationUpdate:
MACRUM 0:276e7a263c35 277 res_name_ptr = SERVER_REGISTRATION_UPDATE;
MACRUM 0:276e7a263c35 278 break;
MACRUM 0:276e7a263c35 279 }
MACRUM 0:276e7a263c35 280
MACRUM 0:276e7a263c35 281 if(res_name_ptr) {
MACRUM 0:276e7a263c35 282 if(_server_instance) {
MACRUM 0:276e7a263c35 283 res_object = _server_instance->resource(res_name_ptr);
MACRUM 0:276e7a263c35 284 }
MACRUM 0:276e7a263c35 285 }
MACRUM 0:276e7a263c35 286 return res_object;
MACRUM 0:276e7a263c35 287 }