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 #ifndef M2MNSDLINTERFACE_H
djmeyers 0:06ee5f8a484a 17 #define M2MNSDLINTERFACE_H
djmeyers 0:06ee5f8a484a 18
djmeyers 0:06ee5f8a484a 19 #include "mbed-client/m2mvector.h"
djmeyers 0:06ee5f8a484a 20 #include "mbed-client/m2mconfig.h"
djmeyers 0:06ee5f8a484a 21 #include "mbed-client/m2minterface.h"
djmeyers 0:06ee5f8a484a 22 #include "mbed-client/m2mtimerobserver.h"
djmeyers 0:06ee5f8a484a 23 #include "mbed-client/m2mobservationhandler.h"
djmeyers 0:06ee5f8a484a 24 #include "mbed-client/m2mbase.h"
djmeyers 0:06ee5f8a484a 25 #include "mbed-client/m2mserver.h"
djmeyers 0:06ee5f8a484a 26 #include "include/nsdllinker.h"
djmeyers 0:06ee5f8a484a 27
djmeyers 0:06ee5f8a484a 28 //FORWARD DECLARARTION
djmeyers 0:06ee5f8a484a 29 class M2MSecurity;
djmeyers 0:06ee5f8a484a 30 class M2MObject;
djmeyers 0:06ee5f8a484a 31 class M2MObjectInstance;
djmeyers 0:06ee5f8a484a 32 class M2MResource;
djmeyers 0:06ee5f8a484a 33 class M2MResourceInstance;
djmeyers 0:06ee5f8a484a 34 class M2MNsdlObserver;
djmeyers 0:06ee5f8a484a 35 class M2MServer;
djmeyers 0:06ee5f8a484a 36 class M2MTimer;
djmeyers 0:06ee5f8a484a 37
djmeyers 0:06ee5f8a484a 38 typedef Vector<M2MObject *> M2MObjectList;
djmeyers 0:06ee5f8a484a 39
djmeyers 0:06ee5f8a484a 40 /**
djmeyers 0:06ee5f8a484a 41 * @brief M2MNsdlInterface
djmeyers 0:06ee5f8a484a 42 * Class which interacts between mbed Client C++ Library and mbed-client-c library.
djmeyers 0:06ee5f8a484a 43 */
djmeyers 0:06ee5f8a484a 44 class M2MNsdlInterface : public M2MTimerObserver,
djmeyers 0:06ee5f8a484a 45 public M2MObservationHandler
djmeyers 0:06ee5f8a484a 46 {
djmeyers 0:06ee5f8a484a 47 private:
djmeyers 0:06ee5f8a484a 48 // Prevents the use of assignment operator by accident.
djmeyers 0:06ee5f8a484a 49 M2MNsdlInterface& operator=( const M2MNsdlInterface& /*other*/ );
djmeyers 0:06ee5f8a484a 50
djmeyers 0:06ee5f8a484a 51 // Prevents the use of copy constructor by accident
djmeyers 0:06ee5f8a484a 52 M2MNsdlInterface( const M2MNsdlInterface& /*other*/ );
djmeyers 0:06ee5f8a484a 53
djmeyers 0:06ee5f8a484a 54 public:
djmeyers 0:06ee5f8a484a 55 /**
djmeyers 0:06ee5f8a484a 56 * @brief Constructor
djmeyers 0:06ee5f8a484a 57 * @param observer, Observer to pass the event callbacks from nsdl library.
djmeyers 0:06ee5f8a484a 58 */
djmeyers 0:06ee5f8a484a 59 M2MNsdlInterface(M2MNsdlObserver &observer);
djmeyers 0:06ee5f8a484a 60
djmeyers 0:06ee5f8a484a 61 /**
djmeyers 0:06ee5f8a484a 62 * @brief Destructor
djmeyers 0:06ee5f8a484a 63 */
djmeyers 0:06ee5f8a484a 64 virtual ~M2MNsdlInterface();
djmeyers 0:06ee5f8a484a 65
djmeyers 0:06ee5f8a484a 66 /**
djmeyers 0:06ee5f8a484a 67 * @brief Creates endpoint object for the nsdl stack.
djmeyers 0:06ee5f8a484a 68 * @param endpoint_name, Endpoint name of the client.
djmeyers 0:06ee5f8a484a 69 * @param endpoint_type, Endpoint type of the client.
djmeyers 0:06ee5f8a484a 70 * @param life_time, Life time of the client in seconds
djmeyers 0:06ee5f8a484a 71 * @param domain, Domain of the client.
djmeyers 0:06ee5f8a484a 72 * @param mode, Binding mode of the client, default is UDP
djmeyers 0:06ee5f8a484a 73 * @param context_address, Context address default is empty.
djmeyers 0:06ee5f8a484a 74 */
djmeyers 0:06ee5f8a484a 75 void create_endpoint(const String &endpoint_name,
djmeyers 0:06ee5f8a484a 76 const String &endpoint_type,
djmeyers 0:06ee5f8a484a 77 const int32_t life_time,
djmeyers 0:06ee5f8a484a 78 const String &domain,
djmeyers 0:06ee5f8a484a 79 const uint8_t mode,
djmeyers 0:06ee5f8a484a 80 const String &context_address);
djmeyers 0:06ee5f8a484a 81
djmeyers 0:06ee5f8a484a 82 /**
djmeyers 0:06ee5f8a484a 83 * @brief Deletes the endpoint.
djmeyers 0:06ee5f8a484a 84 */
djmeyers 0:06ee5f8a484a 85 void delete_endpoint();
djmeyers 0:06ee5f8a484a 86
djmeyers 0:06ee5f8a484a 87 /**
djmeyers 0:06ee5f8a484a 88 * @brief Creates the NSDL structure for the registered objectlist.
djmeyers 0:06ee5f8a484a 89 * @param object_list, List of objects to be registered.
djmeyers 0:06ee5f8a484a 90 * @return true if structure created successfully else false.
djmeyers 0:06ee5f8a484a 91 */
djmeyers 0:06ee5f8a484a 92 bool create_nsdl_list_structure(const M2MObjectList &object_list);
djmeyers 0:06ee5f8a484a 93
djmeyers 0:06ee5f8a484a 94 /**
djmeyers 0:06ee5f8a484a 95 * @brief Removed the NSDL resource for the given resource.
djmeyers 0:06ee5f8a484a 96 * @param base, Resource to be removed.
djmeyers 0:06ee5f8a484a 97 * @return true if removed successfully else false.
djmeyers 0:06ee5f8a484a 98 */
djmeyers 0:06ee5f8a484a 99 bool remove_nsdl_resource(M2MBase *base);
djmeyers 0:06ee5f8a484a 100
djmeyers 0:06ee5f8a484a 101 /**
djmeyers 0:06ee5f8a484a 102 * @brief Creates the bootstrap object.
djmeyers 0:06ee5f8a484a 103 * @param address Bootstrap address.
djmeyers 0:06ee5f8a484a 104 * @return true if created and sent successfully else false.
djmeyers 0:06ee5f8a484a 105 */
djmeyers 0:06ee5f8a484a 106 bool create_bootstrap_resource(sn_nsdl_addr_s *address, const String &bootstrap_endpoint_name);
djmeyers 0:06ee5f8a484a 107
djmeyers 0:06ee5f8a484a 108 /**
djmeyers 0:06ee5f8a484a 109 * @brief Sends the register message to the server.
djmeyers 0:06ee5f8a484a 110 * @param address M2MServer address.
djmeyers 0:06ee5f8a484a 111 * @param address_length M2MServer address length.
djmeyers 0:06ee5f8a484a 112 * @param port M2MServer port.
djmeyers 0:06ee5f8a484a 113 * @param address_type IP Address type.
djmeyers 0:06ee5f8a484a 114 * @return true if register sent successfully else false.
djmeyers 0:06ee5f8a484a 115 */
djmeyers 0:06ee5f8a484a 116 bool send_register_message(uint8_t* address,
djmeyers 0:06ee5f8a484a 117 uint8_t address_length,
djmeyers 0:06ee5f8a484a 118 const uint16_t port,
djmeyers 0:06ee5f8a484a 119 sn_nsdl_addr_type_e address_type);
djmeyers 0:06ee5f8a484a 120
djmeyers 0:06ee5f8a484a 121 /**
djmeyers 0:06ee5f8a484a 122 * @brief Sends the update registration message to the server.
djmeyers 0:06ee5f8a484a 123 * @param lifetime, Updated lifetime value in seconds.
djmeyers 0:06ee5f8a484a 124 * @return true if sent successfully else false.
djmeyers 0:06ee5f8a484a 125 *
djmeyers 0:06ee5f8a484a 126 */
djmeyers 0:06ee5f8a484a 127 bool send_update_registration(const uint32_t lifetime = 0);
djmeyers 0:06ee5f8a484a 128
djmeyers 0:06ee5f8a484a 129 /**
djmeyers 0:06ee5f8a484a 130 * @brief Sends unregister message to the server.
djmeyers 0:06ee5f8a484a 131 * @return true if unregister sent successfully else false.
djmeyers 0:06ee5f8a484a 132 */
djmeyers 0:06ee5f8a484a 133 bool send_unregister_message();
djmeyers 0:06ee5f8a484a 134
djmeyers 0:06ee5f8a484a 135 /**
djmeyers 0:06ee5f8a484a 136 * @brief Memory Allocation required for libCoap.
djmeyers 0:06ee5f8a484a 137 * @param size, Size of memory to be reserved.
djmeyers 0:06ee5f8a484a 138 */
djmeyers 0:06ee5f8a484a 139 static void* memory_alloc(uint16_t size);
djmeyers 0:06ee5f8a484a 140
djmeyers 0:06ee5f8a484a 141 /**
djmeyers 0:06ee5f8a484a 142 * @brief Memory free functions required for libCoap
djmeyers 0:06ee5f8a484a 143 * @param ptr, Object whose memory needs to be freed.
djmeyers 0:06ee5f8a484a 144 */
djmeyers 0:06ee5f8a484a 145 static void memory_free(void *ptr);
djmeyers 0:06ee5f8a484a 146
djmeyers 0:06ee5f8a484a 147 /**
djmeyers 0:06ee5f8a484a 148 * @brief Callback from nsdl library to inform the data is ready
djmeyers 0:06ee5f8a484a 149 * to be sent to server.
djmeyers 0:06ee5f8a484a 150 * @param nsdl_handle, Handler for the nsdl structure for this endpoint
djmeyers 0:06ee5f8a484a 151 * @param protocol, Protocol format of the data
djmeyers 0:06ee5f8a484a 152 * @param data, Data to be sent.
djmeyers 0:06ee5f8a484a 153 * @param data_len, Size of the data to be sent
djmeyers 0:06ee5f8a484a 154 * @param address, server address where data has to be sent.
djmeyers 0:06ee5f8a484a 155 * @return 1 if successful else 0.
djmeyers 0:06ee5f8a484a 156 */
djmeyers 0:06ee5f8a484a 157 uint8_t send_to_server_callback(struct nsdl_s * nsdl_handle,
djmeyers 0:06ee5f8a484a 158 sn_nsdl_capab_e protocol,
djmeyers 0:06ee5f8a484a 159 uint8_t *data,
djmeyers 0:06ee5f8a484a 160 uint16_t data_len,
djmeyers 0:06ee5f8a484a 161 sn_nsdl_addr_s *address);
djmeyers 0:06ee5f8a484a 162
djmeyers 0:06ee5f8a484a 163 /**
djmeyers 0:06ee5f8a484a 164 * @brief Callback from nsdl library to inform the data which is
djmeyers 0:06ee5f8a484a 165 * received from server for the client has been converted to coap message.
djmeyers 0:06ee5f8a484a 166 * @param nsdl_handle, Handler for the nsdl structure for this endpoint
djmeyers 0:06ee5f8a484a 167 * @param coap_header, Coap message formed from data.
djmeyers 0:06ee5f8a484a 168 * @param address, Server address from where the data is received.
djmeyers 0:06ee5f8a484a 169 * @return 1 if successful else 0.
djmeyers 0:06ee5f8a484a 170 */
djmeyers 0:06ee5f8a484a 171 uint8_t received_from_server_callback(struct nsdl_s * nsdl_handle,
djmeyers 0:06ee5f8a484a 172 sn_coap_hdr_s *coap_header,
djmeyers 0:06ee5f8a484a 173 sn_nsdl_addr_s *address);
djmeyers 0:06ee5f8a484a 174
djmeyers 0:06ee5f8a484a 175 /**
djmeyers 0:06ee5f8a484a 176 * @brief Callback from nsdl library to inform the data which is
djmeyers 0:06ee5f8a484a 177 * received from server for the resources has been converted to coap message.
djmeyers 0:06ee5f8a484a 178 * @param nsdl_handle, Handler for the nsdl resource structure for this endpoint..
djmeyers 0:06ee5f8a484a 179 * @param coap_header, Coap message formed from data.
djmeyers 0:06ee5f8a484a 180 * @param address, Server address from where the data is received.
djmeyers 0:06ee5f8a484a 181 * @param nsdl_capab, Protocol for the message, currently only coap is supported.
djmeyers 0:06ee5f8a484a 182 * @return 1 if successful else 0.
djmeyers 0:06ee5f8a484a 183 */
djmeyers 0:06ee5f8a484a 184 uint8_t resource_callback(struct nsdl_s *nsdl_handle, sn_coap_hdr_s *coap,
djmeyers 0:06ee5f8a484a 185 sn_nsdl_addr_s *address,
djmeyers 0:06ee5f8a484a 186 sn_nsdl_capab_e nsdl_capab);
djmeyers 0:06ee5f8a484a 187
djmeyers 0:06ee5f8a484a 188 /**
djmeyers 0:06ee5f8a484a 189 * @brief Callback when there is data received from server and needs to be processed.
djmeyers 0:06ee5f8a484a 190 * @param data, data received from server.
djmeyers 0:06ee5f8a484a 191 * @param data_size, data size received from server.
djmeyers 0:06ee5f8a484a 192 * @param addres, address structure of the server.
djmeyers 0:06ee5f8a484a 193 * @return true if successfully processed else false.
djmeyers 0:06ee5f8a484a 194 */
djmeyers 0:06ee5f8a484a 195 bool process_received_data(uint8_t *data,
djmeyers 0:06ee5f8a484a 196 uint16_t data_size,
djmeyers 0:06ee5f8a484a 197 sn_nsdl_addr_s *address);
djmeyers 0:06ee5f8a484a 198
djmeyers 0:06ee5f8a484a 199 /**
djmeyers 0:06ee5f8a484a 200 * @brief Stops all the timers in case there is any errors.
djmeyers 0:06ee5f8a484a 201 */
djmeyers 0:06ee5f8a484a 202 void stop_timers();
djmeyers 0:06ee5f8a484a 203
djmeyers 0:06ee5f8a484a 204 /**
djmeyers 0:06ee5f8a484a 205 * @brief Returns nsdl handle.
djmeyers 0:06ee5f8a484a 206 * @return ndsl handle
djmeyers 0:06ee5f8a484a 207 */
djmeyers 0:06ee5f8a484a 208 nsdl_s* get_nsdl_handle();
djmeyers 0:06ee5f8a484a 209
djmeyers 0:06ee5f8a484a 210 /**
djmeyers 0:06ee5f8a484a 211 * @brief Get endpoint name
djmeyers 0:06ee5f8a484a 212 * @return endpoint name
djmeyers 0:06ee5f8a484a 213 */
djmeyers 0:06ee5f8a484a 214 const String& endpoint_name() const;
djmeyers 0:06ee5f8a484a 215
djmeyers 0:06ee5f8a484a 216 protected: // from M2MTimerObserver
djmeyers 0:06ee5f8a484a 217
djmeyers 0:06ee5f8a484a 218 virtual void timer_expired(M2MTimerObserver::Type type);
djmeyers 0:06ee5f8a484a 219
djmeyers 0:06ee5f8a484a 220 protected: // from M2MObservationHandler
djmeyers 0:06ee5f8a484a 221
djmeyers 0:06ee5f8a484a 222 virtual void observation_to_be_sent(M2MBase *object,
djmeyers 0:06ee5f8a484a 223 uint16_t obs_number,
djmeyers 0:06ee5f8a484a 224 m2m::Vector<uint16_t> changed_instance_ids,
djmeyers 0:06ee5f8a484a 225 bool send_object = false);
djmeyers 0:06ee5f8a484a 226
djmeyers 0:06ee5f8a484a 227 virtual void resource_to_be_deleted(M2MBase* base);
djmeyers 0:06ee5f8a484a 228
djmeyers 0:06ee5f8a484a 229 virtual void value_updated(M2MBase *base, const String &object_name);
djmeyers 0:06ee5f8a484a 230
djmeyers 0:06ee5f8a484a 231 virtual void remove_object(M2MBase *object);
djmeyers 0:06ee5f8a484a 232
djmeyers 0:06ee5f8a484a 233 virtual void send_delayed_response(M2MBase *base);
djmeyers 0:06ee5f8a484a 234
djmeyers 0:06ee5f8a484a 235 private:
djmeyers 0:06ee5f8a484a 236
djmeyers 0:06ee5f8a484a 237 /**
djmeyers 0:06ee5f8a484a 238 * @brief Initializes all the nsdl library component to be usable.
djmeyers 0:06ee5f8a484a 239 * @return true if initialization is successful else false.
djmeyers 0:06ee5f8a484a 240 */
djmeyers 0:06ee5f8a484a 241 bool initialize();
djmeyers 0:06ee5f8a484a 242
djmeyers 0:06ee5f8a484a 243 bool add_object_to_list(M2MObject *object);
djmeyers 0:06ee5f8a484a 244
djmeyers 0:06ee5f8a484a 245 bool create_nsdl_object_structure(M2MObject *object);
djmeyers 0:06ee5f8a484a 246
djmeyers 0:06ee5f8a484a 247 bool create_nsdl_object_instance_structure(M2MObjectInstance *object_instance);
djmeyers 0:06ee5f8a484a 248
djmeyers 0:06ee5f8a484a 249 bool create_nsdl_resource_structure(M2MResource *resource,
djmeyers 0:06ee5f8a484a 250 bool multiple_instances = false);
djmeyers 0:06ee5f8a484a 251
djmeyers 0:06ee5f8a484a 252 bool create_nsdl_resource(M2MBase *base);
djmeyers 0:06ee5f8a484a 253
djmeyers 0:06ee5f8a484a 254 String coap_to_string(uint8_t *coap_data_ptr,
djmeyers 0:06ee5f8a484a 255 int coap_data_ptr_length);
djmeyers 0:06ee5f8a484a 256
djmeyers 0:06ee5f8a484a 257 void execute_nsdl_process_loop();
djmeyers 0:06ee5f8a484a 258
djmeyers 0:06ee5f8a484a 259 uint64_t registration_time();
djmeyers 0:06ee5f8a484a 260
djmeyers 0:06ee5f8a484a 261 M2MBase* find_resource(const String &object,
djmeyers 0:06ee5f8a484a 262 uint8_t *token = NULL,
djmeyers 0:06ee5f8a484a 263 uint8_t token_len = 0);
djmeyers 0:06ee5f8a484a 264
djmeyers 0:06ee5f8a484a 265 M2MBase* find_resource(const M2MObject *object,
djmeyers 0:06ee5f8a484a 266 const String &object_instance,
djmeyers 0:06ee5f8a484a 267 uint8_t *token = NULL,
djmeyers 0:06ee5f8a484a 268 uint8_t token_len = 0);
djmeyers 0:06ee5f8a484a 269
djmeyers 0:06ee5f8a484a 270 M2MBase* find_resource(const M2MObjectInstance *object_instance,
djmeyers 0:06ee5f8a484a 271 const String &resource_instance,
djmeyers 0:06ee5f8a484a 272 uint8_t *token = NULL,
djmeyers 0:06ee5f8a484a 273 uint8_t token_len = 0);
djmeyers 0:06ee5f8a484a 274
djmeyers 0:06ee5f8a484a 275 M2MBase* find_resource(const M2MResource *resource,
djmeyers 0:06ee5f8a484a 276 const String &object_name,
djmeyers 0:06ee5f8a484a 277 const String &resource_instance,
djmeyers 0:06ee5f8a484a 278 uint8_t *token = NULL,
djmeyers 0:06ee5f8a484a 279 uint8_t token_len = 0);
djmeyers 0:06ee5f8a484a 280
djmeyers 0:06ee5f8a484a 281 bool object_present(M2MObject * object) const;
djmeyers 0:06ee5f8a484a 282
djmeyers 0:06ee5f8a484a 283 M2MInterface::Error interface_error(sn_coap_hdr_s *coap_header);
djmeyers 0:06ee5f8a484a 284
djmeyers 0:06ee5f8a484a 285 void send_object_observation(M2MObject *object,
djmeyers 0:06ee5f8a484a 286 uint16_t obs_number,
djmeyers 0:06ee5f8a484a 287 m2m::Vector<uint16_t> changed_instance_ids,
djmeyers 0:06ee5f8a484a 288 bool send_object);
djmeyers 0:06ee5f8a484a 289
djmeyers 0:06ee5f8a484a 290 void send_object_instance_observation(M2MObjectInstance *object_instance,
djmeyers 0:06ee5f8a484a 291 uint16_t obs_number);
djmeyers 0:06ee5f8a484a 292
djmeyers 0:06ee5f8a484a 293 void send_resource_observation(M2MResource *resource, uint16_t obs_number);
djmeyers 0:06ee5f8a484a 294
djmeyers 0:06ee5f8a484a 295 void send_notification(uint8_t *token,
djmeyers 0:06ee5f8a484a 296 uint8_t token_length,
djmeyers 0:06ee5f8a484a 297 uint8_t *value,
djmeyers 0:06ee5f8a484a 298 uint32_t value_length,
djmeyers 0:06ee5f8a484a 299 uint16_t observation,
djmeyers 0:06ee5f8a484a 300 uint32_t max_age,
djmeyers 0:06ee5f8a484a 301 uint8_t coap_content_type);
djmeyers 0:06ee5f8a484a 302
djmeyers 0:06ee5f8a484a 303 /**
djmeyers 0:06ee5f8a484a 304 * @brief Allocate (size + 1) amount of memory, copy size bytes into
djmeyers 0:06ee5f8a484a 305 * it and add zero termination.
djmeyers 0:06ee5f8a484a 306 * @param source Source string to copy, may not be NULL.
djmeyers 0:06ee5f8a484a 307 * @param size The size of memory to be reserved.
djmeyers 0:06ee5f8a484a 308 */
djmeyers 0:06ee5f8a484a 309 static uint8_t* alloc_string_copy(const uint8_t* source, uint16_t size);
djmeyers 0:06ee5f8a484a 310
djmeyers 0:06ee5f8a484a 311 /**
djmeyers 0:06ee5f8a484a 312 * @brief Utility method to convert given lifetime int to ascii
djmeyers 0:06ee5f8a484a 313 * and allocate a buffer for it and set it to _endpoint->lifetime_ptr.
djmeyers 0:06ee5f8a484a 314 * @param lifetime A new value for lifetime.
djmeyers 0:06ee5f8a484a 315 */
djmeyers 0:06ee5f8a484a 316 void set_endpoint_lifetime_buffer(int lifetime);
djmeyers 0:06ee5f8a484a 317
djmeyers 0:06ee5f8a484a 318 /**
djmeyers 0:06ee5f8a484a 319 * @brief Handle incoming bootstrap PUT message.
djmeyers 0:06ee5f8a484a 320 * @param coap_header, Received CoAP message
djmeyers 0:06ee5f8a484a 321 * @param address, Server address
djmeyers 0:06ee5f8a484a 322 */
djmeyers 0:06ee5f8a484a 323 void handle_bootstrap_put_message(sn_coap_hdr_s *coap_header, sn_nsdl_addr_s *address);
djmeyers 0:06ee5f8a484a 324
djmeyers 0:06ee5f8a484a 325 /**
djmeyers 0:06ee5f8a484a 326 * @brief Handle bootstrap finished message.
djmeyers 0:06ee5f8a484a 327 * @param coap_header, Received CoAP message
djmeyers 0:06ee5f8a484a 328 * @param address, Server address
djmeyers 0:06ee5f8a484a 329 */
djmeyers 0:06ee5f8a484a 330 void handle_bootstrap_finished(sn_coap_hdr_s *coap_header,sn_nsdl_addr_s *address);
djmeyers 0:06ee5f8a484a 331
djmeyers 0:06ee5f8a484a 332 /**
djmeyers 0:06ee5f8a484a 333 * @brief Handle bootstrap delete message.
djmeyers 0:06ee5f8a484a 334 * @param coap_header, Received CoAP message
djmeyers 0:06ee5f8a484a 335 * @param address, Server address
djmeyers 0:06ee5f8a484a 336 */
djmeyers 0:06ee5f8a484a 337 void handle_bootstrap_delete(sn_coap_hdr_s *coap_header,sn_nsdl_addr_s *address);
djmeyers 0:06ee5f8a484a 338
djmeyers 0:06ee5f8a484a 339 /**
djmeyers 0:06ee5f8a484a 340 * @brief Parse bootstrap TLV message.
djmeyers 0:06ee5f8a484a 341 * @param coap_header, Received CoAP message
djmeyers 0:06ee5f8a484a 342 * @return True if parsing was succesful else false
djmeyers 0:06ee5f8a484a 343 */
djmeyers 0:06ee5f8a484a 344 bool parse_bootstrap_message(sn_coap_hdr_s *coap_header, bool is_security_object);
djmeyers 0:06ee5f8a484a 345
djmeyers 0:06ee5f8a484a 346 /**
djmeyers 0:06ee5f8a484a 347 * @brief Parse bootstrap TLV message.
djmeyers 0:06ee5f8a484a 348 * @param coap_header, Received CoAP message
djmeyers 0:06ee5f8a484a 349 * @return True if parsing was succesful else false
djmeyers 0:06ee5f8a484a 350 */
djmeyers 0:06ee5f8a484a 351 bool validate_security_object();
djmeyers 0:06ee5f8a484a 352
djmeyers 0:06ee5f8a484a 353 /**
djmeyers 0:06ee5f8a484a 354 * @brief Handle bootstrap errors.
djmeyers 0:06ee5f8a484a 355 */
djmeyers 0:06ee5f8a484a 356 void handle_bootstrap_error();
djmeyers 0:06ee5f8a484a 357
djmeyers 0:06ee5f8a484a 358 private:
djmeyers 0:06ee5f8a484a 359
djmeyers 0:06ee5f8a484a 360 M2MNsdlObserver &_observer;
djmeyers 0:06ee5f8a484a 361 M2MObjectList _object_list;
djmeyers 0:06ee5f8a484a 362 sn_nsdl_ep_parameters_s *_endpoint;
djmeyers 0:06ee5f8a484a 363 nsdl_s *_nsdl_handle;
djmeyers 0:06ee5f8a484a 364 M2MSecurity *_security; // Not owned
djmeyers 0:06ee5f8a484a 365 M2MServer _server;
djmeyers 0:06ee5f8a484a 366 M2MTimer *_nsdl_exceution_timer;
djmeyers 0:06ee5f8a484a 367 M2MTimer *_registration_timer;
djmeyers 0:06ee5f8a484a 368 sn_nsdl_addr_s _sn_nsdl_address;
djmeyers 0:06ee5f8a484a 369 String _endpoint_name;
djmeyers 0:06ee5f8a484a 370 uint32_t _counter_for_nsdl;
djmeyers 0:06ee5f8a484a 371 uint16_t _bootstrap_id;
djmeyers 0:06ee5f8a484a 372 bool _unregister_ongoing;
djmeyers 0:06ee5f8a484a 373 bool _identity_accepted;
djmeyers 0:06ee5f8a484a 374
djmeyers 0:06ee5f8a484a 375 friend class Test_M2MNsdlInterface;
djmeyers 0:06ee5f8a484a 376
djmeyers 0:06ee5f8a484a 377 };
djmeyers 0:06ee5f8a484a 378
djmeyers 0:06ee5f8a484a 379 #endif // M2MNSDLINTERFACE_H
djmeyers 0:06ee5f8a484a 380