Simple interface for Mbed Cloud Client
Embed:
(wiki syntax)
Show/hide line numbers
m2mserver.cpp
00001 /* 00002 * Copyright (c) 2015 ARM Limited. All rights reserved. 00003 * SPDX-License-Identifier: Apache-2.0 00004 * Licensed under the Apache License, Version 2.0 (the License); you may 00005 * not use this file except in compliance with the License. 00006 * You may obtain a copy of the License at 00007 * 00008 * http://www.apache.org/licenses/LICENSE-2.0 00009 * 00010 * Unless required by applicable law or agreed to in writing, software 00011 * distributed under the License is distributed on an AS IS BASIS, WITHOUT 00012 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00013 * See the License for the specific language governing permissions and 00014 * limitations under the License. 00015 */ 00016 00017 #include "mbed-client/m2mserver.h" 00018 #include "mbed-client/m2mconstants.h" 00019 #include "mbed-client/m2mobject.h" 00020 #include "mbed-client/m2mobjectinstance.h" 00021 #include "mbed-client/m2mresource.h" 00022 #include "mbed-client/m2mstring.h" 00023 00024 #define TRACE_GROUP "mClt" 00025 00026 #define BUFFER_SIZE 21 00027 00028 M2MServer::M2MServer() 00029 : M2MObject(M2M_SERVER_ID, stringdup(M2M_SERVER_ID)) 00030 { 00031 M2MObject::create_object_instance(); 00032 00033 _server_instance = object_instance(); 00034 00035 if(_server_instance) { 00036 00037 M2MResource* res = _server_instance->create_dynamic_resource(SERVER_SHORT_SERVER_ID, 00038 OMA_RESOURCE_TYPE, 00039 M2MResourceInstance::INTEGER, 00040 true); 00041 if(res) { 00042 res->set_operation(M2MBase::GET_PUT_ALLOWED); 00043 } 00044 res = _server_instance->create_dynamic_resource(SERVER_LIFETIME, 00045 OMA_RESOURCE_TYPE, 00046 M2MResourceInstance::INTEGER, 00047 true); 00048 if(res) { 00049 res->set_operation(M2MBase::GET_PUT_POST_ALLOWED); 00050 } 00051 res = _server_instance->create_dynamic_resource(SERVER_NOTIFICATION_STORAGE, 00052 OMA_RESOURCE_TYPE, 00053 M2MResourceInstance::BOOLEAN, 00054 true); 00055 if(res) { 00056 res->set_operation(M2MBase::GET_PUT_POST_ALLOWED); 00057 } 00058 res = _server_instance->create_dynamic_resource(SERVER_BINDING, 00059 OMA_RESOURCE_TYPE, 00060 M2MResourceInstance::STRING, 00061 true); 00062 if(res) { 00063 res->set_operation(M2MBase::GET_PUT_POST_ALLOWED); 00064 } 00065 res = _server_instance->create_dynamic_resource(SERVER_REGISTRATION_UPDATE, 00066 OMA_RESOURCE_TYPE, 00067 M2MResourceInstance::OPAQUE, 00068 false); 00069 if(res) { 00070 res->set_operation(M2MBase::POST_ALLOWED); 00071 } 00072 } 00073 } 00074 00075 M2MServer::~M2MServer() 00076 { 00077 00078 } 00079 00080 M2MResource* M2MServer::create_resource(ServerResource resource, uint32_t value) 00081 { 00082 M2MResource* res = NULL; 00083 const char* server_id_ptr = ""; 00084 if(!is_resource_present(resource)) { 00085 switch(resource) { 00086 case DefaultMinPeriod: 00087 server_id_ptr = SERVER_DEFAULT_MIN_PERIOD; 00088 break; 00089 case DefaultMaxPeriod: 00090 server_id_ptr = SERVER_DEFAULT_MAX_PERIOD; 00091 break; 00092 case DisableTimeout: 00093 server_id_ptr = SERVER_DISABLE_TIMEOUT; 00094 break; 00095 default: 00096 break; 00097 } 00098 } 00099 String server_id(server_id_ptr); 00100 00101 if(!server_id.empty()) { 00102 if(_server_instance) { 00103 res = _server_instance->create_dynamic_resource(server_id, 00104 OMA_RESOURCE_TYPE, 00105 M2MResourceInstance::INTEGER, 00106 true); 00107 if(res) { 00108 res->set_operation(M2MBase::GET_PUT_POST_ALLOWED); 00109 00110 res->set_value(value); 00111 } 00112 } 00113 } 00114 return res; 00115 } 00116 00117 M2MResource* M2MServer::create_resource(ServerResource resource) 00118 { 00119 M2MResource* res = NULL; 00120 if(!is_resource_present(resource)) { 00121 if(M2MServer::Disable == resource) { 00122 if(_server_instance) { 00123 res = _server_instance->create_dynamic_resource(SERVER_DISABLE, 00124 OMA_RESOURCE_TYPE, 00125 M2MResourceInstance::OPAQUE, 00126 false); 00127 if(res) { 00128 res->set_operation(M2MBase::POST_ALLOWED); 00129 } 00130 } 00131 } 00132 } 00133 return res; 00134 } 00135 00136 bool M2MServer::delete_resource(ServerResource resource) 00137 { 00138 bool success = false; 00139 const char* server_id_ptr; 00140 switch(resource) { 00141 case DefaultMinPeriod: 00142 server_id_ptr = SERVER_DEFAULT_MIN_PERIOD; 00143 break; 00144 case DefaultMaxPeriod: 00145 server_id_ptr = SERVER_DEFAULT_MAX_PERIOD; 00146 break; 00147 case Disable: 00148 server_id_ptr = SERVER_DISABLE; 00149 break; 00150 case DisableTimeout: 00151 server_id_ptr = SERVER_DISABLE_TIMEOUT; 00152 break; 00153 default: 00154 server_id_ptr = NULL; 00155 break; 00156 } 00157 00158 if(server_id_ptr) { 00159 if(_server_instance) { 00160 success = _server_instance->remove_resource(server_id_ptr); 00161 } 00162 } 00163 return success; 00164 } 00165 00166 bool M2MServer::set_resource_value(ServerResource resource, 00167 const String &value) 00168 { 00169 bool success = false; 00170 M2MResource* res = get_resource(resource); 00171 if(res && (M2MServer::Binding == resource)) { 00172 success = res->set_value((const uint8_t*)value.c_str(),(uint32_t)value.length()); 00173 } 00174 return success; 00175 } 00176 00177 bool M2MServer::set_resource_value(ServerResource resource, 00178 uint32_t value) 00179 { 00180 bool success = false; 00181 M2MResource* res = get_resource(resource); 00182 if(res) { 00183 if(M2MServer::ShortServerID == resource || 00184 M2MServer::Lifetime == resource || 00185 M2MServer::DefaultMinPeriod == resource || 00186 M2MServer::DefaultMaxPeriod == resource || 00187 M2MServer::DisableTimeout == resource || 00188 M2MServer::NotificationStorage == resource) { 00189 // If it is any of the above resource 00190 // set the value of the resource. 00191 00192 success = res->set_value(value); 00193 } 00194 } 00195 return success; 00196 } 00197 00198 String M2MServer::resource_value_string(ServerResource resource) const 00199 { 00200 String value = ""; 00201 M2MResource* res = get_resource(resource); 00202 if(res && (M2MServer::Binding == resource)) { 00203 00204 value = res->get_value_string(); 00205 } 00206 return value; 00207 } 00208 00209 00210 uint32_t M2MServer::resource_value_int(ServerResource resource) const 00211 { 00212 uint32_t value = 0; 00213 M2MResource* res = get_resource(resource); 00214 if(res) { 00215 if(M2MServer::ShortServerID == resource || 00216 M2MServer::Lifetime == resource || 00217 M2MServer::DefaultMinPeriod == resource || 00218 M2MServer::DefaultMaxPeriod == resource || 00219 M2MServer::DisableTimeout == resource || 00220 M2MServer::NotificationStorage == resource) { 00221 00222 value = res->get_value_int(); 00223 } 00224 } 00225 return value; 00226 } 00227 00228 bool M2MServer::is_resource_present(ServerResource resource) const 00229 { 00230 bool success = false; 00231 M2MResource *res = get_resource(resource); 00232 if(res) { 00233 success = true; 00234 } 00235 return success; 00236 } 00237 00238 uint16_t M2MServer::total_resource_count() const 00239 { 00240 uint16_t total_count = 0; 00241 if(_server_instance) { 00242 total_count = _server_instance->resources().size(); 00243 } 00244 return total_count; 00245 } 00246 00247 M2MResource* M2MServer::get_resource(ServerResource res) const 00248 { 00249 M2MResource* res_object = NULL; 00250 const char* res_name_ptr = NULL; 00251 switch(res) { 00252 case ShortServerID: 00253 res_name_ptr = SERVER_SHORT_SERVER_ID; 00254 break; 00255 case Lifetime: 00256 res_name_ptr = SERVER_LIFETIME; 00257 break; 00258 case DefaultMinPeriod: 00259 res_name_ptr = SERVER_DEFAULT_MIN_PERIOD; 00260 break; 00261 case DefaultMaxPeriod: 00262 res_name_ptr = SERVER_DEFAULT_MAX_PERIOD; 00263 break; 00264 case Disable: 00265 res_name_ptr = SERVER_DISABLE; 00266 break; 00267 case DisableTimeout: 00268 res_name_ptr = SERVER_DISABLE_TIMEOUT; 00269 break; 00270 case NotificationStorage: 00271 res_name_ptr = SERVER_NOTIFICATION_STORAGE; 00272 break; 00273 case Binding: 00274 res_name_ptr = SERVER_BINDING; 00275 break; 00276 case RegistrationUpdate: 00277 res_name_ptr = SERVER_REGISTRATION_UPDATE; 00278 break; 00279 } 00280 00281 if(res_name_ptr) { 00282 if(_server_instance) { 00283 res_object = _server_instance->resource(res_name_ptr); 00284 } 00285 } 00286 return res_object; 00287 }
Generated on Tue Jul 12 2022 19:01:35 by 1.7.2