Preliminary main mbed library for nexpaq development
features/FEATURE_CLIENT/mbed-client/source/m2minterfaceimpl.cpp@0:6c56fb4bc5f0, 2016-11-04 (annotated)
- Committer:
- nexpaq
- Date:
- Fri Nov 04 20:27:58 2016 +0000
- Revision:
- 0:6c56fb4bc5f0
Moving to library for sharing updates
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
nexpaq | 0:6c56fb4bc5f0 | 1 | /* |
nexpaq | 0:6c56fb4bc5f0 | 2 | * Copyright (c) 2015 ARM Limited. All rights reserved. |
nexpaq | 0:6c56fb4bc5f0 | 3 | * SPDX-License-Identifier: Apache-2.0 |
nexpaq | 0:6c56fb4bc5f0 | 4 | * Licensed under the Apache License, Version 2.0 (the License); you may |
nexpaq | 0:6c56fb4bc5f0 | 5 | * not use this file except in compliance with the License. |
nexpaq | 0:6c56fb4bc5f0 | 6 | * You may obtain a copy of the License at |
nexpaq | 0:6c56fb4bc5f0 | 7 | * |
nexpaq | 0:6c56fb4bc5f0 | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
nexpaq | 0:6c56fb4bc5f0 | 9 | * |
nexpaq | 0:6c56fb4bc5f0 | 10 | * Unless required by applicable law or agreed to in writing, software |
nexpaq | 0:6c56fb4bc5f0 | 11 | * distributed under the License is distributed on an AS IS BASIS, WITHOUT |
nexpaq | 0:6c56fb4bc5f0 | 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
nexpaq | 0:6c56fb4bc5f0 | 13 | * See the License for the specific language governing permissions and |
nexpaq | 0:6c56fb4bc5f0 | 14 | * limitations under the License. |
nexpaq | 0:6c56fb4bc5f0 | 15 | */ |
nexpaq | 0:6c56fb4bc5f0 | 16 | #include <assert.h> |
nexpaq | 0:6c56fb4bc5f0 | 17 | #include "include/m2minterfaceimpl.h" |
nexpaq | 0:6c56fb4bc5f0 | 18 | #include "include/eventdata.h" |
nexpaq | 0:6c56fb4bc5f0 | 19 | #include "mbed-client/m2minterfaceobserver.h" |
nexpaq | 0:6c56fb4bc5f0 | 20 | #include "mbed-client/m2mconnectionhandler.h" |
nexpaq | 0:6c56fb4bc5f0 | 21 | #include "mbed-client/m2mconnectionsecurity.h" |
nexpaq | 0:6c56fb4bc5f0 | 22 | #include "include/m2mnsdlinterface.h" |
nexpaq | 0:6c56fb4bc5f0 | 23 | #include "include/nsdlaccesshelper.h" |
nexpaq | 0:6c56fb4bc5f0 | 24 | #include "mbed-client/m2msecurity.h" |
nexpaq | 0:6c56fb4bc5f0 | 25 | #include "mbed-client/m2mconstants.h" |
nexpaq | 0:6c56fb4bc5f0 | 26 | #include "mbed-client/m2mtimer.h" |
nexpaq | 0:6c56fb4bc5f0 | 27 | #include "mbed-trace/mbed_trace.h" |
nexpaq | 0:6c56fb4bc5f0 | 28 | |
nexpaq | 0:6c56fb4bc5f0 | 29 | #define TRACE_GROUP "mClt" |
nexpaq | 0:6c56fb4bc5f0 | 30 | |
nexpaq | 0:6c56fb4bc5f0 | 31 | M2MInterfaceImpl::M2MInterfaceImpl(M2MInterfaceObserver& observer, |
nexpaq | 0:6c56fb4bc5f0 | 32 | const String &ep_name, |
nexpaq | 0:6c56fb4bc5f0 | 33 | const String &ep_type, |
nexpaq | 0:6c56fb4bc5f0 | 34 | const int32_t l_time, |
nexpaq | 0:6c56fb4bc5f0 | 35 | const uint16_t listen_port, |
nexpaq | 0:6c56fb4bc5f0 | 36 | const String &dmn, |
nexpaq | 0:6c56fb4bc5f0 | 37 | M2MInterface::BindingMode mode, |
nexpaq | 0:6c56fb4bc5f0 | 38 | M2MInterface::NetworkStack stack, |
nexpaq | 0:6c56fb4bc5f0 | 39 | const String &con_addr) |
nexpaq | 0:6c56fb4bc5f0 | 40 | : _observer(observer), |
nexpaq | 0:6c56fb4bc5f0 | 41 | _nsdl_interface(new M2MNsdlInterface(*this)), |
nexpaq | 0:6c56fb4bc5f0 | 42 | _current_state(0), |
nexpaq | 0:6c56fb4bc5f0 | 43 | _max_states( STATE_MAX_STATES ), |
nexpaq | 0:6c56fb4bc5f0 | 44 | _event_generated(false), |
nexpaq | 0:6c56fb4bc5f0 | 45 | _event_data(NULL), |
nexpaq | 0:6c56fb4bc5f0 | 46 | _endpoint_type(ep_type), |
nexpaq | 0:6c56fb4bc5f0 | 47 | _domain( dmn), |
nexpaq | 0:6c56fb4bc5f0 | 48 | _life_time(l_time), |
nexpaq | 0:6c56fb4bc5f0 | 49 | _binding_mode(mode), |
nexpaq | 0:6c56fb4bc5f0 | 50 | _context_address(con_addr), |
nexpaq | 0:6c56fb4bc5f0 | 51 | _listen_port(listen_port), |
nexpaq | 0:6c56fb4bc5f0 | 52 | _server_port(0), |
nexpaq | 0:6c56fb4bc5f0 | 53 | _register_server(NULL), |
nexpaq | 0:6c56fb4bc5f0 | 54 | _event_ignored(false), |
nexpaq | 0:6c56fb4bc5f0 | 55 | _register_ongoing(false), |
nexpaq | 0:6c56fb4bc5f0 | 56 | _update_register_ongoing(false), |
nexpaq | 0:6c56fb4bc5f0 | 57 | _queue_sleep_timer(new M2MTimer(*this)), |
nexpaq | 0:6c56fb4bc5f0 | 58 | _retry_timer(new M2MTimer(*this)), |
nexpaq | 0:6c56fb4bc5f0 | 59 | _bootstrap_timer(NULL), |
nexpaq | 0:6c56fb4bc5f0 | 60 | _callback_handler(NULL), |
nexpaq | 0:6c56fb4bc5f0 | 61 | _security(NULL), |
nexpaq | 0:6c56fb4bc5f0 | 62 | _retry_count(0), |
nexpaq | 0:6c56fb4bc5f0 | 63 | _reconnecting(false), |
nexpaq | 0:6c56fb4bc5f0 | 64 | _retry_timer_expired(false) |
nexpaq | 0:6c56fb4bc5f0 | 65 | { |
nexpaq | 0:6c56fb4bc5f0 | 66 | M2MConnectionSecurity::SecurityMode sec_mode = M2MConnectionSecurity::DTLS; |
nexpaq | 0:6c56fb4bc5f0 | 67 | //Hack for now |
nexpaq | 0:6c56fb4bc5f0 | 68 | if( _binding_mode == M2MInterface::TCP ){ |
nexpaq | 0:6c56fb4bc5f0 | 69 | _binding_mode = M2MInterface::UDP; |
nexpaq | 0:6c56fb4bc5f0 | 70 | sec_mode = M2MConnectionSecurity::TLS; |
nexpaq | 0:6c56fb4bc5f0 | 71 | }else if( _binding_mode == M2MInterface::TCP_QUEUE ){ |
nexpaq | 0:6c56fb4bc5f0 | 72 | _binding_mode = M2MInterface::UDP_QUEUE; |
nexpaq | 0:6c56fb4bc5f0 | 73 | sec_mode = M2MConnectionSecurity::TLS; |
nexpaq | 0:6c56fb4bc5f0 | 74 | } |
nexpaq | 0:6c56fb4bc5f0 | 75 | tr_debug("M2MInterfaceImpl::M2MInterfaceImpl() -IN"); |
nexpaq | 0:6c56fb4bc5f0 | 76 | _nsdl_interface->create_endpoint(ep_name, |
nexpaq | 0:6c56fb4bc5f0 | 77 | _endpoint_type, |
nexpaq | 0:6c56fb4bc5f0 | 78 | _life_time, |
nexpaq | 0:6c56fb4bc5f0 | 79 | _domain, |
nexpaq | 0:6c56fb4bc5f0 | 80 | (uint8_t)_binding_mode, |
nexpaq | 0:6c56fb4bc5f0 | 81 | _context_address); |
nexpaq | 0:6c56fb4bc5f0 | 82 | |
nexpaq | 0:6c56fb4bc5f0 | 83 | //Doesn't own, ownership is passed to ConnectionHandler class |
nexpaq | 0:6c56fb4bc5f0 | 84 | _security_connection = new M2MConnectionSecurity(sec_mode); |
nexpaq | 0:6c56fb4bc5f0 | 85 | //Here we must use TCP still |
nexpaq | 0:6c56fb4bc5f0 | 86 | _connection_handler = new M2MConnectionHandler(*this, _security_connection, mode, stack); |
nexpaq | 0:6c56fb4bc5f0 | 87 | __connection_handler = _connection_handler; |
nexpaq | 0:6c56fb4bc5f0 | 88 | _connection_handler->bind_connection(_listen_port); |
nexpaq | 0:6c56fb4bc5f0 | 89 | #ifndef MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE |
nexpaq | 0:6c56fb4bc5f0 | 90 | _bootstrap_timer = new M2MTimer(*this); |
nexpaq | 0:6c56fb4bc5f0 | 91 | #endif |
nexpaq | 0:6c56fb4bc5f0 | 92 | tr_debug("M2MInterfaceImpl::M2MInterfaceImpl() -OUT"); |
nexpaq | 0:6c56fb4bc5f0 | 93 | } |
nexpaq | 0:6c56fb4bc5f0 | 94 | |
nexpaq | 0:6c56fb4bc5f0 | 95 | |
nexpaq | 0:6c56fb4bc5f0 | 96 | M2MInterfaceImpl::~M2MInterfaceImpl() |
nexpaq | 0:6c56fb4bc5f0 | 97 | { |
nexpaq | 0:6c56fb4bc5f0 | 98 | tr_debug("M2MInterfaceImpl::~M2MInterfaceImpl() - IN"); |
nexpaq | 0:6c56fb4bc5f0 | 99 | delete _queue_sleep_timer; |
nexpaq | 0:6c56fb4bc5f0 | 100 | delete _nsdl_interface; |
nexpaq | 0:6c56fb4bc5f0 | 101 | _connection_handler->stop_listening(); |
nexpaq | 0:6c56fb4bc5f0 | 102 | __connection_handler = NULL; |
nexpaq | 0:6c56fb4bc5f0 | 103 | delete _connection_handler; |
nexpaq | 0:6c56fb4bc5f0 | 104 | delete _retry_timer; |
nexpaq | 0:6c56fb4bc5f0 | 105 | delete _bootstrap_timer; |
nexpaq | 0:6c56fb4bc5f0 | 106 | _security_connection = NULL; |
nexpaq | 0:6c56fb4bc5f0 | 107 | tr_debug("M2MInterfaceImpl::~M2MInterfaceImpl() - OUT"); |
nexpaq | 0:6c56fb4bc5f0 | 108 | } |
nexpaq | 0:6c56fb4bc5f0 | 109 | |
nexpaq | 0:6c56fb4bc5f0 | 110 | void M2MInterfaceImpl::bootstrap(M2MSecurity *security) |
nexpaq | 0:6c56fb4bc5f0 | 111 | { |
nexpaq | 0:6c56fb4bc5f0 | 112 | #ifndef MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE |
nexpaq | 0:6c56fb4bc5f0 | 113 | tr_debug("M2MInterfaceImpl::bootstrap(M2MSecurity *security) - IN"); |
nexpaq | 0:6c56fb4bc5f0 | 114 | // Transition to a new state based upon |
nexpaq | 0:6c56fb4bc5f0 | 115 | // the current state of the state machine |
nexpaq | 0:6c56fb4bc5f0 | 116 | M2MSecurityData* data = new M2MSecurityData(); |
nexpaq | 0:6c56fb4bc5f0 | 117 | data->_object = security; |
nexpaq | 0:6c56fb4bc5f0 | 118 | BEGIN_TRANSITION_MAP // - Current State - |
nexpaq | 0:6c56fb4bc5f0 | 119 | TRANSITION_MAP_ENTRY (STATE_BOOTSTRAP) // state_idle |
nexpaq | 0:6c56fb4bc5f0 | 120 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_bootstrap |
nexpaq | 0:6c56fb4bc5f0 | 121 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state__bootstrap_address_resolved |
nexpaq | 0:6c56fb4bc5f0 | 122 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_bootstrap_resource_created |
nexpaq | 0:6c56fb4bc5f0 | 123 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_bootstrapped |
nexpaq | 0:6c56fb4bc5f0 | 124 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_register |
nexpaq | 0:6c56fb4bc5f0 | 125 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_register_address_resolved |
nexpaq | 0:6c56fb4bc5f0 | 126 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_register_resource_created |
nexpaq | 0:6c56fb4bc5f0 | 127 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_registered |
nexpaq | 0:6c56fb4bc5f0 | 128 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_update_registration |
nexpaq | 0:6c56fb4bc5f0 | 129 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_unregister |
nexpaq | 0:6c56fb4bc5f0 | 130 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_unregistered |
nexpaq | 0:6c56fb4bc5f0 | 131 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_sending_coap_data |
nexpaq | 0:6c56fb4bc5f0 | 132 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_coap_data_sent |
nexpaq | 0:6c56fb4bc5f0 | 133 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_coap_data_received |
nexpaq | 0:6c56fb4bc5f0 | 134 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_processing_coap_data |
nexpaq | 0:6c56fb4bc5f0 | 135 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_coap_data_processed |
nexpaq | 0:6c56fb4bc5f0 | 136 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_waiting |
nexpaq | 0:6c56fb4bc5f0 | 137 | END_TRANSITION_MAP(data) |
nexpaq | 0:6c56fb4bc5f0 | 138 | if(_event_ignored) { |
nexpaq | 0:6c56fb4bc5f0 | 139 | _event_ignored = false; |
nexpaq | 0:6c56fb4bc5f0 | 140 | _observer.error(M2MInterface::NotAllowed); |
nexpaq | 0:6c56fb4bc5f0 | 141 | } |
nexpaq | 0:6c56fb4bc5f0 | 142 | tr_debug("M2MInterfaceImpl::bootstrap(M2MSecurity *security) - OUT"); |
nexpaq | 0:6c56fb4bc5f0 | 143 | #else |
nexpaq | 0:6c56fb4bc5f0 | 144 | _observer.error(M2MInterface::NotAllowed); |
nexpaq | 0:6c56fb4bc5f0 | 145 | #endif //MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE |
nexpaq | 0:6c56fb4bc5f0 | 146 | } |
nexpaq | 0:6c56fb4bc5f0 | 147 | |
nexpaq | 0:6c56fb4bc5f0 | 148 | void M2MInterfaceImpl::cancel_bootstrap() |
nexpaq | 0:6c56fb4bc5f0 | 149 | { |
nexpaq | 0:6c56fb4bc5f0 | 150 | #ifndef MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE |
nexpaq | 0:6c56fb4bc5f0 | 151 | //TODO: Do we need this ? |
nexpaq | 0:6c56fb4bc5f0 | 152 | #endif //MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE |
nexpaq | 0:6c56fb4bc5f0 | 153 | } |
nexpaq | 0:6c56fb4bc5f0 | 154 | |
nexpaq | 0:6c56fb4bc5f0 | 155 | void M2MInterfaceImpl::register_object(M2MSecurity *security, const M2MObjectList &object_list) |
nexpaq | 0:6c56fb4bc5f0 | 156 | { |
nexpaq | 0:6c56fb4bc5f0 | 157 | tr_debug("M2MInterfaceImpl::register_object - IN"); |
nexpaq | 0:6c56fb4bc5f0 | 158 | // Transition to a new state based upon |
nexpaq | 0:6c56fb4bc5f0 | 159 | // the current state of the state machine |
nexpaq | 0:6c56fb4bc5f0 | 160 | //TODO: manage register object in a list. |
nexpaq | 0:6c56fb4bc5f0 | 161 | if(!_register_ongoing) { |
nexpaq | 0:6c56fb4bc5f0 | 162 | _register_ongoing = true; |
nexpaq | 0:6c56fb4bc5f0 | 163 | _register_server = security; |
nexpaq | 0:6c56fb4bc5f0 | 164 | M2MRegisterData *data = new M2MRegisterData(); |
nexpaq | 0:6c56fb4bc5f0 | 165 | data->_object = security; |
nexpaq | 0:6c56fb4bc5f0 | 166 | data->_object_list = object_list; |
nexpaq | 0:6c56fb4bc5f0 | 167 | BEGIN_TRANSITION_MAP // - Current State - |
nexpaq | 0:6c56fb4bc5f0 | 168 | TRANSITION_MAP_ENTRY (STATE_REGISTER) // state_idle |
nexpaq | 0:6c56fb4bc5f0 | 169 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_bootstrap |
nexpaq | 0:6c56fb4bc5f0 | 170 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state__bootstrap_address_resolved |
nexpaq | 0:6c56fb4bc5f0 | 171 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_bootstrap_resource_created |
nexpaq | 0:6c56fb4bc5f0 | 172 | TRANSITION_MAP_ENTRY (STATE_REGISTER) // state_bootstrapped |
nexpaq | 0:6c56fb4bc5f0 | 173 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_register |
nexpaq | 0:6c56fb4bc5f0 | 174 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_register_address_resolved |
nexpaq | 0:6c56fb4bc5f0 | 175 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_register_resource_created |
nexpaq | 0:6c56fb4bc5f0 | 176 | TRANSITION_MAP_ENTRY (STATE_REGISTER) // state_registered |
nexpaq | 0:6c56fb4bc5f0 | 177 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_update_registration |
nexpaq | 0:6c56fb4bc5f0 | 178 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_unregister |
nexpaq | 0:6c56fb4bc5f0 | 179 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_unregistered |
nexpaq | 0:6c56fb4bc5f0 | 180 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_sending_coap_data |
nexpaq | 0:6c56fb4bc5f0 | 181 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_coap_data_sent |
nexpaq | 0:6c56fb4bc5f0 | 182 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_coap_data_received |
nexpaq | 0:6c56fb4bc5f0 | 183 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_processing_coap_data |
nexpaq | 0:6c56fb4bc5f0 | 184 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_coap_data_processed |
nexpaq | 0:6c56fb4bc5f0 | 185 | TRANSITION_MAP_ENTRY (STATE_REGISTER) // state_waiting |
nexpaq | 0:6c56fb4bc5f0 | 186 | END_TRANSITION_MAP(data) |
nexpaq | 0:6c56fb4bc5f0 | 187 | if(_event_ignored) { |
nexpaq | 0:6c56fb4bc5f0 | 188 | _event_ignored = false; |
nexpaq | 0:6c56fb4bc5f0 | 189 | _observer.error(M2MInterface::NotAllowed); |
nexpaq | 0:6c56fb4bc5f0 | 190 | } |
nexpaq | 0:6c56fb4bc5f0 | 191 | } else { |
nexpaq | 0:6c56fb4bc5f0 | 192 | tr_debug("M2MInterfaceImpl::register_object - NOT ALLOWED"); |
nexpaq | 0:6c56fb4bc5f0 | 193 | _observer.error(M2MInterface::NotAllowed); |
nexpaq | 0:6c56fb4bc5f0 | 194 | } |
nexpaq | 0:6c56fb4bc5f0 | 195 | tr_debug("M2MInterfaceImpl::register_object - OUT"); |
nexpaq | 0:6c56fb4bc5f0 | 196 | } |
nexpaq | 0:6c56fb4bc5f0 | 197 | |
nexpaq | 0:6c56fb4bc5f0 | 198 | void M2MInterfaceImpl::update_registration(M2MSecurity *security_object, const uint32_t lifetime) |
nexpaq | 0:6c56fb4bc5f0 | 199 | { |
nexpaq | 0:6c56fb4bc5f0 | 200 | tr_debug("M2MInterfaceImpl::update_registration - IN"); |
nexpaq | 0:6c56fb4bc5f0 | 201 | // Transition to a new state based upon |
nexpaq | 0:6c56fb4bc5f0 | 202 | // the current state of the state machine |
nexpaq | 0:6c56fb4bc5f0 | 203 | if(lifetime != 0 && (lifetime < MINIMUM_REGISTRATION_TIME)) { |
nexpaq | 0:6c56fb4bc5f0 | 204 | _observer.error(M2MInterface::InvalidParameters); |
nexpaq | 0:6c56fb4bc5f0 | 205 | } else if(!_update_register_ongoing){ |
nexpaq | 0:6c56fb4bc5f0 | 206 | tr_debug("M2MInterfaceImpl::update_registration - already ongoing"); |
nexpaq | 0:6c56fb4bc5f0 | 207 | _update_register_ongoing = true; |
nexpaq | 0:6c56fb4bc5f0 | 208 | M2MUpdateRegisterData *data = new M2MUpdateRegisterData(); |
nexpaq | 0:6c56fb4bc5f0 | 209 | data->_object = security_object; |
nexpaq | 0:6c56fb4bc5f0 | 210 | data->_lifetime = lifetime; |
nexpaq | 0:6c56fb4bc5f0 | 211 | BEGIN_TRANSITION_MAP // - Current State - |
nexpaq | 0:6c56fb4bc5f0 | 212 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_idle |
nexpaq | 0:6c56fb4bc5f0 | 213 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_bootstrap |
nexpaq | 0:6c56fb4bc5f0 | 214 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state__bootstrap_address_resolved |
nexpaq | 0:6c56fb4bc5f0 | 215 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_bootstrap_resource_created |
nexpaq | 0:6c56fb4bc5f0 | 216 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_bootstrapped |
nexpaq | 0:6c56fb4bc5f0 | 217 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_register |
nexpaq | 0:6c56fb4bc5f0 | 218 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_register_address_resolved |
nexpaq | 0:6c56fb4bc5f0 | 219 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_register_resource_created |
nexpaq | 0:6c56fb4bc5f0 | 220 | TRANSITION_MAP_ENTRY (STATE_UPDATE_REGISTRATION) // state_registered |
nexpaq | 0:6c56fb4bc5f0 | 221 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_update_registration |
nexpaq | 0:6c56fb4bc5f0 | 222 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_unregister |
nexpaq | 0:6c56fb4bc5f0 | 223 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_unregistered |
nexpaq | 0:6c56fb4bc5f0 | 224 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_sending_coap_data |
nexpaq | 0:6c56fb4bc5f0 | 225 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_coap_data_sent |
nexpaq | 0:6c56fb4bc5f0 | 226 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_coap_data_received |
nexpaq | 0:6c56fb4bc5f0 | 227 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_processing_coap_data |
nexpaq | 0:6c56fb4bc5f0 | 228 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_coap_data_processed |
nexpaq | 0:6c56fb4bc5f0 | 229 | TRANSITION_MAP_ENTRY (STATE_UPDATE_REGISTRATION) // state_waiting |
nexpaq | 0:6c56fb4bc5f0 | 230 | END_TRANSITION_MAP(data) |
nexpaq | 0:6c56fb4bc5f0 | 231 | if(_event_ignored) { |
nexpaq | 0:6c56fb4bc5f0 | 232 | _event_ignored = false; |
nexpaq | 0:6c56fb4bc5f0 | 233 | if (!_reconnecting) |
nexpaq | 0:6c56fb4bc5f0 | 234 | _observer.error(M2MInterface::NotAllowed); |
nexpaq | 0:6c56fb4bc5f0 | 235 | } |
nexpaq | 0:6c56fb4bc5f0 | 236 | } else if(!_reconnecting) { |
nexpaq | 0:6c56fb4bc5f0 | 237 | tr_debug("M2MInterfaceImpl::update_registration - NOT ALLOWED"); |
nexpaq | 0:6c56fb4bc5f0 | 238 | _observer.error(M2MInterface::NotAllowed); |
nexpaq | 0:6c56fb4bc5f0 | 239 | } else { |
nexpaq | 0:6c56fb4bc5f0 | 240 | tr_debug("M2MInterfaceImpl::update_registration - reconnecting"); |
nexpaq | 0:6c56fb4bc5f0 | 241 | } |
nexpaq | 0:6c56fb4bc5f0 | 242 | tr_debug("M2MInterfaceImpl::update_registration - OUT"); |
nexpaq | 0:6c56fb4bc5f0 | 243 | } |
nexpaq | 0:6c56fb4bc5f0 | 244 | |
nexpaq | 0:6c56fb4bc5f0 | 245 | void M2MInterfaceImpl::unregister_object(M2MSecurity* /*security*/) |
nexpaq | 0:6c56fb4bc5f0 | 246 | { |
nexpaq | 0:6c56fb4bc5f0 | 247 | tr_debug("M2MInterfaceImpl::unregister_object - IN"); |
nexpaq | 0:6c56fb4bc5f0 | 248 | // Transition to a new state based upon |
nexpaq | 0:6c56fb4bc5f0 | 249 | // the current state of the state machine |
nexpaq | 0:6c56fb4bc5f0 | 250 | BEGIN_TRANSITION_MAP // - Current State - |
nexpaq | 0:6c56fb4bc5f0 | 251 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_idle |
nexpaq | 0:6c56fb4bc5f0 | 252 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_bootstrap |
nexpaq | 0:6c56fb4bc5f0 | 253 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state__bootstrap_address_resolved |
nexpaq | 0:6c56fb4bc5f0 | 254 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_bootstrap_resource_created |
nexpaq | 0:6c56fb4bc5f0 | 255 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_bootstrapped |
nexpaq | 0:6c56fb4bc5f0 | 256 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_register |
nexpaq | 0:6c56fb4bc5f0 | 257 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_register_address_resolved |
nexpaq | 0:6c56fb4bc5f0 | 258 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_register_resource_created |
nexpaq | 0:6c56fb4bc5f0 | 259 | TRANSITION_MAP_ENTRY (STATE_UNREGISTER) // state_registered |
nexpaq | 0:6c56fb4bc5f0 | 260 | TRANSITION_MAP_ENTRY (STATE_UNREGISTER) // state_update_registration |
nexpaq | 0:6c56fb4bc5f0 | 261 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_unregister |
nexpaq | 0:6c56fb4bc5f0 | 262 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_unregistered |
nexpaq | 0:6c56fb4bc5f0 | 263 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_sending_coap_data |
nexpaq | 0:6c56fb4bc5f0 | 264 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_coap_data_sent |
nexpaq | 0:6c56fb4bc5f0 | 265 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_coap_data_received |
nexpaq | 0:6c56fb4bc5f0 | 266 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_processing_coap_data |
nexpaq | 0:6c56fb4bc5f0 | 267 | TRANSITION_MAP_ENTRY (EVENT_IGNORED) // state_coap_data_processed |
nexpaq | 0:6c56fb4bc5f0 | 268 | TRANSITION_MAP_ENTRY (STATE_UNREGISTER) // state_waiting |
nexpaq | 0:6c56fb4bc5f0 | 269 | END_TRANSITION_MAP(NULL) |
nexpaq | 0:6c56fb4bc5f0 | 270 | if(_event_ignored) { |
nexpaq | 0:6c56fb4bc5f0 | 271 | _event_ignored = false; |
nexpaq | 0:6c56fb4bc5f0 | 272 | _observer.error(M2MInterface::NotAllowed); |
nexpaq | 0:6c56fb4bc5f0 | 273 | } |
nexpaq | 0:6c56fb4bc5f0 | 274 | tr_debug("M2MInterfaceImpl::unregister_object - OUT"); |
nexpaq | 0:6c56fb4bc5f0 | 275 | } |
nexpaq | 0:6c56fb4bc5f0 | 276 | |
nexpaq | 0:6c56fb4bc5f0 | 277 | void M2MInterfaceImpl::set_queue_sleep_handler(callback_handler handler) |
nexpaq | 0:6c56fb4bc5f0 | 278 | { |
nexpaq | 0:6c56fb4bc5f0 | 279 | tr_debug("M2MInterfaceImpl::set_queue_sleep_handler()"); |
nexpaq | 0:6c56fb4bc5f0 | 280 | _callback_handler = handler; |
nexpaq | 0:6c56fb4bc5f0 | 281 | } |
nexpaq | 0:6c56fb4bc5f0 | 282 | |
nexpaq | 0:6c56fb4bc5f0 | 283 | void M2MInterfaceImpl::set_random_number_callback(random_number_cb callback) |
nexpaq | 0:6c56fb4bc5f0 | 284 | { |
nexpaq | 0:6c56fb4bc5f0 | 285 | if(_security_connection) { |
nexpaq | 0:6c56fb4bc5f0 | 286 | _security_connection->set_random_number_callback(callback); |
nexpaq | 0:6c56fb4bc5f0 | 287 | } |
nexpaq | 0:6c56fb4bc5f0 | 288 | } |
nexpaq | 0:6c56fb4bc5f0 | 289 | |
nexpaq | 0:6c56fb4bc5f0 | 290 | void M2MInterfaceImpl::set_entropy_callback(entropy_cb callback) |
nexpaq | 0:6c56fb4bc5f0 | 291 | { |
nexpaq | 0:6c56fb4bc5f0 | 292 | if(_security_connection) { |
nexpaq | 0:6c56fb4bc5f0 | 293 | _security_connection->set_entropy_callback(callback); |
nexpaq | 0:6c56fb4bc5f0 | 294 | } |
nexpaq | 0:6c56fb4bc5f0 | 295 | } |
nexpaq | 0:6c56fb4bc5f0 | 296 | |
nexpaq | 0:6c56fb4bc5f0 | 297 | void M2MInterfaceImpl::set_platform_network_handler(void *handler) |
nexpaq | 0:6c56fb4bc5f0 | 298 | { |
nexpaq | 0:6c56fb4bc5f0 | 299 | tr_debug("M2MInterfaceImpl::set_platform_network_handler()"); |
nexpaq | 0:6c56fb4bc5f0 | 300 | if(_connection_handler) { |
nexpaq | 0:6c56fb4bc5f0 | 301 | _connection_handler->set_platform_network_handler(handler); |
nexpaq | 0:6c56fb4bc5f0 | 302 | } |
nexpaq | 0:6c56fb4bc5f0 | 303 | } |
nexpaq | 0:6c56fb4bc5f0 | 304 | |
nexpaq | 0:6c56fb4bc5f0 | 305 | void M2MInterfaceImpl::coap_message_ready(uint8_t *data_ptr, |
nexpaq | 0:6c56fb4bc5f0 | 306 | uint16_t data_len, |
nexpaq | 0:6c56fb4bc5f0 | 307 | sn_nsdl_addr_s *address_ptr) |
nexpaq | 0:6c56fb4bc5f0 | 308 | { |
nexpaq | 0:6c56fb4bc5f0 | 309 | tr_debug("M2MInterfaceImpl::coap_message_ready"); |
nexpaq | 0:6c56fb4bc5f0 | 310 | internal_event(STATE_SENDING_COAP_DATA); |
nexpaq | 0:6c56fb4bc5f0 | 311 | if(!_connection_handler->send_data(data_ptr,data_len,address_ptr)) { |
nexpaq | 0:6c56fb4bc5f0 | 312 | internal_event( STATE_IDLE); |
nexpaq | 0:6c56fb4bc5f0 | 313 | tr_error("M2MInterfaceImpl::coap_message_ready() - M2MInterface::NetworkError"); |
nexpaq | 0:6c56fb4bc5f0 | 314 | if (!_reconnecting) { |
nexpaq | 0:6c56fb4bc5f0 | 315 | _observer.error(M2MInterface::NetworkError); |
nexpaq | 0:6c56fb4bc5f0 | 316 | } |
nexpaq | 0:6c56fb4bc5f0 | 317 | } |
nexpaq | 0:6c56fb4bc5f0 | 318 | } |
nexpaq | 0:6c56fb4bc5f0 | 319 | |
nexpaq | 0:6c56fb4bc5f0 | 320 | void M2MInterfaceImpl::client_registered(M2MServer *server_object) |
nexpaq | 0:6c56fb4bc5f0 | 321 | { |
nexpaq | 0:6c56fb4bc5f0 | 322 | tr_debug("M2MInterfaceImpl::client_registered"); |
nexpaq | 0:6c56fb4bc5f0 | 323 | _retry_count = 0; |
nexpaq | 0:6c56fb4bc5f0 | 324 | internal_event(STATE_REGISTERED); |
nexpaq | 0:6c56fb4bc5f0 | 325 | //Inform client is registered. |
nexpaq | 0:6c56fb4bc5f0 | 326 | //TODO: manage register object in a list. |
nexpaq | 0:6c56fb4bc5f0 | 327 | _observer.object_registered(_register_server,*server_object); |
nexpaq | 0:6c56fb4bc5f0 | 328 | } |
nexpaq | 0:6c56fb4bc5f0 | 329 | |
nexpaq | 0:6c56fb4bc5f0 | 330 | void M2MInterfaceImpl::registration_updated(const M2MServer &server_object) |
nexpaq | 0:6c56fb4bc5f0 | 331 | { |
nexpaq | 0:6c56fb4bc5f0 | 332 | tr_debug("M2MInterfaceImpl::registration_updated"); |
nexpaq | 0:6c56fb4bc5f0 | 333 | internal_event(STATE_REGISTERED); |
nexpaq | 0:6c56fb4bc5f0 | 334 | _observer.registration_updated(_register_server,server_object); |
nexpaq | 0:6c56fb4bc5f0 | 335 | } |
nexpaq | 0:6c56fb4bc5f0 | 336 | |
nexpaq | 0:6c56fb4bc5f0 | 337 | void M2MInterfaceImpl::registration_error(uint8_t error_code, bool retry) |
nexpaq | 0:6c56fb4bc5f0 | 338 | { |
nexpaq | 0:6c56fb4bc5f0 | 339 | tr_debug("M2MInterfaceImpl::registration_error code [%d]", error_code); |
nexpaq | 0:6c56fb4bc5f0 | 340 | // Try to register again |
nexpaq | 0:6c56fb4bc5f0 | 341 | if (retry) { |
nexpaq | 0:6c56fb4bc5f0 | 342 | socket_error(M2MConnectionHandler::SOCKET_SEND_ERROR); |
nexpaq | 0:6c56fb4bc5f0 | 343 | } else { |
nexpaq | 0:6c56fb4bc5f0 | 344 | internal_event(STATE_IDLE); |
nexpaq | 0:6c56fb4bc5f0 | 345 | _observer.error((M2MInterface::Error)error_code); |
nexpaq | 0:6c56fb4bc5f0 | 346 | } |
nexpaq | 0:6c56fb4bc5f0 | 347 | } |
nexpaq | 0:6c56fb4bc5f0 | 348 | |
nexpaq | 0:6c56fb4bc5f0 | 349 | void M2MInterfaceImpl::client_unregistered() |
nexpaq | 0:6c56fb4bc5f0 | 350 | { |
nexpaq | 0:6c56fb4bc5f0 | 351 | tr_debug("M2MInterfaceImpl::client_unregistered()"); |
nexpaq | 0:6c56fb4bc5f0 | 352 | internal_event(STATE_UNREGISTERED); |
nexpaq | 0:6c56fb4bc5f0 | 353 | //TODO: manage register object in a list. |
nexpaq | 0:6c56fb4bc5f0 | 354 | _observer.object_unregistered(_register_server); |
nexpaq | 0:6c56fb4bc5f0 | 355 | } |
nexpaq | 0:6c56fb4bc5f0 | 356 | |
nexpaq | 0:6c56fb4bc5f0 | 357 | void M2MInterfaceImpl::bootstrap_done(M2MSecurity *security_object) |
nexpaq | 0:6c56fb4bc5f0 | 358 | { |
nexpaq | 0:6c56fb4bc5f0 | 359 | #ifndef MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE |
nexpaq | 0:6c56fb4bc5f0 | 360 | tr_debug("M2MInterfaceImpl::bootstrap_done"); |
nexpaq | 0:6c56fb4bc5f0 | 361 | _bootstrap_timer->stop_timer(); |
nexpaq | 0:6c56fb4bc5f0 | 362 | internal_event(STATE_BOOTSTRAPPED); |
nexpaq | 0:6c56fb4bc5f0 | 363 | _observer.bootstrap_done(security_object); |
nexpaq | 0:6c56fb4bc5f0 | 364 | #endif //MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE |
nexpaq | 0:6c56fb4bc5f0 | 365 | } |
nexpaq | 0:6c56fb4bc5f0 | 366 | |
nexpaq | 0:6c56fb4bc5f0 | 367 | void M2MInterfaceImpl::bootstrap_error() |
nexpaq | 0:6c56fb4bc5f0 | 368 | { |
nexpaq | 0:6c56fb4bc5f0 | 369 | #ifndef MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE |
nexpaq | 0:6c56fb4bc5f0 | 370 | tr_debug("M2MInterfaceImpl::bootstrap_error()"); |
nexpaq | 0:6c56fb4bc5f0 | 371 | _bootstrap_timer->stop_timer(); |
nexpaq | 0:6c56fb4bc5f0 | 372 | internal_event(STATE_IDLE); |
nexpaq | 0:6c56fb4bc5f0 | 373 | _observer.error(M2MInterface::BootstrapFailed); |
nexpaq | 0:6c56fb4bc5f0 | 374 | #endif //MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE |
nexpaq | 0:6c56fb4bc5f0 | 375 | } |
nexpaq | 0:6c56fb4bc5f0 | 376 | |
nexpaq | 0:6c56fb4bc5f0 | 377 | void M2MInterfaceImpl::coap_data_processed() |
nexpaq | 0:6c56fb4bc5f0 | 378 | { |
nexpaq | 0:6c56fb4bc5f0 | 379 | tr_debug("M2MInterfaceImpl::coap_data_processed()"); |
nexpaq | 0:6c56fb4bc5f0 | 380 | internal_event(STATE_COAP_DATA_PROCESSED); |
nexpaq | 0:6c56fb4bc5f0 | 381 | } |
nexpaq | 0:6c56fb4bc5f0 | 382 | |
nexpaq | 0:6c56fb4bc5f0 | 383 | void M2MInterfaceImpl::value_updated(M2MBase *base) |
nexpaq | 0:6c56fb4bc5f0 | 384 | { |
nexpaq | 0:6c56fb4bc5f0 | 385 | tr_debug("M2MInterfaceImpl::value_updated(M2MBase *base)"); |
nexpaq | 0:6c56fb4bc5f0 | 386 | if(base) { |
nexpaq | 0:6c56fb4bc5f0 | 387 | M2MBase::BaseType type = base->base_type(); |
nexpaq | 0:6c56fb4bc5f0 | 388 | _observer.value_updated(base, type); |
nexpaq | 0:6c56fb4bc5f0 | 389 | } |
nexpaq | 0:6c56fb4bc5f0 | 390 | } |
nexpaq | 0:6c56fb4bc5f0 | 391 | |
nexpaq | 0:6c56fb4bc5f0 | 392 | void M2MInterfaceImpl::data_available(uint8_t* data, |
nexpaq | 0:6c56fb4bc5f0 | 393 | uint16_t data_size, |
nexpaq | 0:6c56fb4bc5f0 | 394 | const M2MConnectionObserver::SocketAddress &address) |
nexpaq | 0:6c56fb4bc5f0 | 395 | { |
nexpaq | 0:6c56fb4bc5f0 | 396 | tr_debug("M2MInterfaceImpl::data_available"); |
nexpaq | 0:6c56fb4bc5f0 | 397 | ReceivedData *event = new ReceivedData(); |
nexpaq | 0:6c56fb4bc5f0 | 398 | event->_data = data; |
nexpaq | 0:6c56fb4bc5f0 | 399 | event->_size = data_size; |
nexpaq | 0:6c56fb4bc5f0 | 400 | event->_address = &address; |
nexpaq | 0:6c56fb4bc5f0 | 401 | internal_event(STATE_COAP_DATA_RECEIVED, event); |
nexpaq | 0:6c56fb4bc5f0 | 402 | } |
nexpaq | 0:6c56fb4bc5f0 | 403 | |
nexpaq | 0:6c56fb4bc5f0 | 404 | void M2MInterfaceImpl::socket_error(uint8_t error_code, bool retry) |
nexpaq | 0:6c56fb4bc5f0 | 405 | { |
nexpaq | 0:6c56fb4bc5f0 | 406 | tr_debug("M2MInterfaceImpl::socket_error: (%d), retry (%d), reconnecting (%d)", error_code, retry, _reconnecting); |
nexpaq | 0:6c56fb4bc5f0 | 407 | if (!_retry_timer_expired && _reconnecting) { |
nexpaq | 0:6c56fb4bc5f0 | 408 | tr_debug("M2MInterfaceImpl::socket_error - retry timer running - return"); |
nexpaq | 0:6c56fb4bc5f0 | 409 | return; |
nexpaq | 0:6c56fb4bc5f0 | 410 | } |
nexpaq | 0:6c56fb4bc5f0 | 411 | M2MInterface::Error error = M2MInterface::ErrorNone; |
nexpaq | 0:6c56fb4bc5f0 | 412 | switch (error_code) { |
nexpaq | 0:6c56fb4bc5f0 | 413 | case M2MConnectionHandler::SSL_CONNECTION_ERROR: |
nexpaq | 0:6c56fb4bc5f0 | 414 | error = M2MInterface::SecureConnectionFailed; |
nexpaq | 0:6c56fb4bc5f0 | 415 | break; |
nexpaq | 0:6c56fb4bc5f0 | 416 | case M2MConnectionHandler::DNS_RESOLVING_ERROR: |
nexpaq | 0:6c56fb4bc5f0 | 417 | error = M2MInterface::DnsResolvingFailed; |
nexpaq | 0:6c56fb4bc5f0 | 418 | break; |
nexpaq | 0:6c56fb4bc5f0 | 419 | case M2MConnectionHandler::SOCKET_READ_ERROR: |
nexpaq | 0:6c56fb4bc5f0 | 420 | error = M2MInterface::NetworkError; |
nexpaq | 0:6c56fb4bc5f0 | 421 | break; |
nexpaq | 0:6c56fb4bc5f0 | 422 | case M2MConnectionHandler::SOCKET_SEND_ERROR: |
nexpaq | 0:6c56fb4bc5f0 | 423 | error = M2MInterface::NetworkError; |
nexpaq | 0:6c56fb4bc5f0 | 424 | break; |
nexpaq | 0:6c56fb4bc5f0 | 425 | case M2MConnectionHandler::SSL_HANDSHAKE_ERROR: |
nexpaq | 0:6c56fb4bc5f0 | 426 | error = M2MInterface::SecureConnectionFailed; |
nexpaq | 0:6c56fb4bc5f0 | 427 | break; |
nexpaq | 0:6c56fb4bc5f0 | 428 | case M2MConnectionHandler::SOCKET_ABORT: |
nexpaq | 0:6c56fb4bc5f0 | 429 | error = M2MInterface::NetworkError; |
nexpaq | 0:6c56fb4bc5f0 | 430 | break; |
nexpaq | 0:6c56fb4bc5f0 | 431 | default: |
nexpaq | 0:6c56fb4bc5f0 | 432 | break; |
nexpaq | 0:6c56fb4bc5f0 | 433 | } |
nexpaq | 0:6c56fb4bc5f0 | 434 | |
nexpaq | 0:6c56fb4bc5f0 | 435 | // Try to do reconnecting |
nexpaq | 0:6c56fb4bc5f0 | 436 | if (retry) { |
nexpaq | 0:6c56fb4bc5f0 | 437 | if (_retry_count < MBED_CLIENT_RECONNECTION_COUNT) { |
nexpaq | 0:6c56fb4bc5f0 | 438 | internal_event(STATE_IDLE); |
nexpaq | 0:6c56fb4bc5f0 | 439 | _reconnecting = true; |
nexpaq | 0:6c56fb4bc5f0 | 440 | _retry_count++; |
nexpaq | 0:6c56fb4bc5f0 | 441 | _connection_handler->stop_listening(); |
nexpaq | 0:6c56fb4bc5f0 | 442 | int retry_time = MBED_CLIENT_RECONNECTION_INTERVAL * |
nexpaq | 0:6c56fb4bc5f0 | 443 | MBED_CLIENT_RECONNECTION_COUNT * _retry_count * 1000; |
nexpaq | 0:6c56fb4bc5f0 | 444 | _retry_timer_expired = false; |
nexpaq | 0:6c56fb4bc5f0 | 445 | _retry_timer->start_timer(retry_time, |
nexpaq | 0:6c56fb4bc5f0 | 446 | M2MTimerObserver::RetryTimer); |
nexpaq | 0:6c56fb4bc5f0 | 447 | tr_debug("M2MInterfaceImpl::socket_error - reconnecting in %d(s), count %d/%d", retry_time / 1000, |
nexpaq | 0:6c56fb4bc5f0 | 448 | _retry_count, MBED_CLIENT_RECONNECTION_COUNT); |
nexpaq | 0:6c56fb4bc5f0 | 449 | } else { |
nexpaq | 0:6c56fb4bc5f0 | 450 | tr_debug("M2MInterfaceImpl::socket_error - no more retries"); |
nexpaq | 0:6c56fb4bc5f0 | 451 | _connection_handler->stop_listening(); |
nexpaq | 0:6c56fb4bc5f0 | 452 | _retry_timer->stop_timer(); |
nexpaq | 0:6c56fb4bc5f0 | 453 | retry = false; |
nexpaq | 0:6c56fb4bc5f0 | 454 | } |
nexpaq | 0:6c56fb4bc5f0 | 455 | } |
nexpaq | 0:6c56fb4bc5f0 | 456 | // Inform application |
nexpaq | 0:6c56fb4bc5f0 | 457 | if (!retry && M2MInterface::ErrorNone != error) { |
nexpaq | 0:6c56fb4bc5f0 | 458 | tr_debug("M2MInterfaceImpl::socket_error - send error to application"); |
nexpaq | 0:6c56fb4bc5f0 | 459 | _connection_handler->stop_listening(); |
nexpaq | 0:6c56fb4bc5f0 | 460 | _retry_timer->stop_timer(); |
nexpaq | 0:6c56fb4bc5f0 | 461 | _retry_count = 0; |
nexpaq | 0:6c56fb4bc5f0 | 462 | _reconnecting = false; |
nexpaq | 0:6c56fb4bc5f0 | 463 | _observer.error(error); |
nexpaq | 0:6c56fb4bc5f0 | 464 | internal_event(STATE_IDLE); |
nexpaq | 0:6c56fb4bc5f0 | 465 | } |
nexpaq | 0:6c56fb4bc5f0 | 466 | } |
nexpaq | 0:6c56fb4bc5f0 | 467 | |
nexpaq | 0:6c56fb4bc5f0 | 468 | void M2MInterfaceImpl::address_ready(const M2MConnectionObserver::SocketAddress &address, |
nexpaq | 0:6c56fb4bc5f0 | 469 | M2MConnectionObserver::ServerType server_type, |
nexpaq | 0:6c56fb4bc5f0 | 470 | const uint16_t server_port) |
nexpaq | 0:6c56fb4bc5f0 | 471 | { |
nexpaq | 0:6c56fb4bc5f0 | 472 | tr_debug("M2MInterfaceImpl::address_ready"); |
nexpaq | 0:6c56fb4bc5f0 | 473 | ResolvedAddressData *data = new ResolvedAddressData(); |
nexpaq | 0:6c56fb4bc5f0 | 474 | data->_address = &address; |
nexpaq | 0:6c56fb4bc5f0 | 475 | data->_port = server_port; |
nexpaq | 0:6c56fb4bc5f0 | 476 | if( M2MConnectionObserver::Bootstrap == server_type) { |
nexpaq | 0:6c56fb4bc5f0 | 477 | tr_debug("M2MInterfaceImpl::address_ready() Server Type Bootstrap"); |
nexpaq | 0:6c56fb4bc5f0 | 478 | internal_event(STATE_BOOTSTRAP_ADDRESS_RESOLVED, data); |
nexpaq | 0:6c56fb4bc5f0 | 479 | } else { |
nexpaq | 0:6c56fb4bc5f0 | 480 | tr_debug("M2MInterfaceImpl::address_ready() Server Type LWM2M"); |
nexpaq | 0:6c56fb4bc5f0 | 481 | internal_event(STATE_REGISTER_ADDRESS_RESOLVED, data); |
nexpaq | 0:6c56fb4bc5f0 | 482 | } |
nexpaq | 0:6c56fb4bc5f0 | 483 | } |
nexpaq | 0:6c56fb4bc5f0 | 484 | |
nexpaq | 0:6c56fb4bc5f0 | 485 | void M2MInterfaceImpl::data_sent() |
nexpaq | 0:6c56fb4bc5f0 | 486 | { |
nexpaq | 0:6c56fb4bc5f0 | 487 | tr_debug("M2MInterfaceImpl::data_sent()"); |
nexpaq | 0:6c56fb4bc5f0 | 488 | if(_binding_mode == M2MInterface::UDP_QUEUE || |
nexpaq | 0:6c56fb4bc5f0 | 489 | _binding_mode == M2MInterface::TCP_QUEUE || |
nexpaq | 0:6c56fb4bc5f0 | 490 | _binding_mode == M2MInterface::SMS_QUEUE || |
nexpaq | 0:6c56fb4bc5f0 | 491 | _binding_mode == M2MInterface::UDP_SMS_QUEUE) { |
nexpaq | 0:6c56fb4bc5f0 | 492 | if(_callback_handler) { |
nexpaq | 0:6c56fb4bc5f0 | 493 | _queue_sleep_timer->stop_timer(); |
nexpaq | 0:6c56fb4bc5f0 | 494 | _queue_sleep_timer->start_timer(MBED_CLIENT_RECONNECTION_COUNT*MBED_CLIENT_RECONNECTION_INTERVAL*1000, |
nexpaq | 0:6c56fb4bc5f0 | 495 | M2MTimerObserver::QueueSleep); |
nexpaq | 0:6c56fb4bc5f0 | 496 | } |
nexpaq | 0:6c56fb4bc5f0 | 497 | } |
nexpaq | 0:6c56fb4bc5f0 | 498 | internal_event(STATE_COAP_DATA_SENT); |
nexpaq | 0:6c56fb4bc5f0 | 499 | } |
nexpaq | 0:6c56fb4bc5f0 | 500 | |
nexpaq | 0:6c56fb4bc5f0 | 501 | void M2MInterfaceImpl::timer_expired(M2MTimerObserver::Type type) |
nexpaq | 0:6c56fb4bc5f0 | 502 | { |
nexpaq | 0:6c56fb4bc5f0 | 503 | tr_debug("M2MInterfaceImpl::timer_expired()"); |
nexpaq | 0:6c56fb4bc5f0 | 504 | if(M2MTimerObserver::QueueSleep == type) { |
nexpaq | 0:6c56fb4bc5f0 | 505 | if(_callback_handler) { |
nexpaq | 0:6c56fb4bc5f0 | 506 | _callback_handler(); |
nexpaq | 0:6c56fb4bc5f0 | 507 | } |
nexpaq | 0:6c56fb4bc5f0 | 508 | } |
nexpaq | 0:6c56fb4bc5f0 | 509 | else if (M2MTimerObserver::RetryTimer == type) { |
nexpaq | 0:6c56fb4bc5f0 | 510 | _retry_timer_expired = true; |
nexpaq | 0:6c56fb4bc5f0 | 511 | _listen_port = rand() % 64511 + 1024; |
nexpaq | 0:6c56fb4bc5f0 | 512 | tr_debug("M2MInterfaceImpl::timer_expired() - new port: %d", _listen_port); |
nexpaq | 0:6c56fb4bc5f0 | 513 | _connection_handler->bind_connection(_listen_port); |
nexpaq | 0:6c56fb4bc5f0 | 514 | internal_event(STATE_REGISTER); |
nexpaq | 0:6c56fb4bc5f0 | 515 | } |
nexpaq | 0:6c56fb4bc5f0 | 516 | else if (M2MTimerObserver::BootstrapTimer == type) { |
nexpaq | 0:6c56fb4bc5f0 | 517 | bootstrap_error(); |
nexpaq | 0:6c56fb4bc5f0 | 518 | } |
nexpaq | 0:6c56fb4bc5f0 | 519 | } |
nexpaq | 0:6c56fb4bc5f0 | 520 | |
nexpaq | 0:6c56fb4bc5f0 | 521 | // state machine sits here. |
nexpaq | 0:6c56fb4bc5f0 | 522 | void M2MInterfaceImpl::state_idle(EventData* /*data*/) |
nexpaq | 0:6c56fb4bc5f0 | 523 | { |
nexpaq | 0:6c56fb4bc5f0 | 524 | tr_debug("M2MInterfaceImpl::state_idle"); |
nexpaq | 0:6c56fb4bc5f0 | 525 | _nsdl_interface->stop_timers(); |
nexpaq | 0:6c56fb4bc5f0 | 526 | _register_ongoing = false; |
nexpaq | 0:6c56fb4bc5f0 | 527 | _update_register_ongoing = false; |
nexpaq | 0:6c56fb4bc5f0 | 528 | } |
nexpaq | 0:6c56fb4bc5f0 | 529 | |
nexpaq | 0:6c56fb4bc5f0 | 530 | void M2MInterfaceImpl::state_bootstrap( EventData *data) |
nexpaq | 0:6c56fb4bc5f0 | 531 | { |
nexpaq | 0:6c56fb4bc5f0 | 532 | #ifndef MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE |
nexpaq | 0:6c56fb4bc5f0 | 533 | tr_debug("M2MInterfaceImpl::state_bootstrap"); |
nexpaq | 0:6c56fb4bc5f0 | 534 | // Start with bootstrapping preparation |
nexpaq | 0:6c56fb4bc5f0 | 535 | bool success = false; |
nexpaq | 0:6c56fb4bc5f0 | 536 | if(data) { |
nexpaq | 0:6c56fb4bc5f0 | 537 | M2MSecurityData *event = static_cast<M2MSecurityData *> (data); |
nexpaq | 0:6c56fb4bc5f0 | 538 | M2MSecurity *security = event->_object; |
nexpaq | 0:6c56fb4bc5f0 | 539 | if(security) { |
nexpaq | 0:6c56fb4bc5f0 | 540 | if(M2MSecurity::Bootstrap == security->server_type()) { |
nexpaq | 0:6c56fb4bc5f0 | 541 | tr_debug("M2MInterfaceImpl::state_bootstrap - server_type : M2MSecurity::Bootstrap"); |
nexpaq | 0:6c56fb4bc5f0 | 542 | String server_address = security->resource_value_string(M2MSecurity::M2MServerUri); |
nexpaq | 0:6c56fb4bc5f0 | 543 | tr_debug("M2MInterfaceImpl::state_bootstrap - server_address %s", server_address.c_str()); |
nexpaq | 0:6c56fb4bc5f0 | 544 | _bootstrap_timer->start_timer(MBED_CLIENT_RECONNECTION_COUNT * MBED_CLIENT_RECONNECTION_INTERVAL * 8 * 1000, |
nexpaq | 0:6c56fb4bc5f0 | 545 | M2MTimerObserver::BootstrapTimer); |
nexpaq | 0:6c56fb4bc5f0 | 546 | String ip_address; |
nexpaq | 0:6c56fb4bc5f0 | 547 | String coap; |
nexpaq | 0:6c56fb4bc5f0 | 548 | if(server_address.compare(0,sizeof(COAP)-1,COAP) == 0) { |
nexpaq | 0:6c56fb4bc5f0 | 549 | coap = COAP; |
nexpaq | 0:6c56fb4bc5f0 | 550 | } |
nexpaq | 0:6c56fb4bc5f0 | 551 | else if(server_address.compare(0,sizeof(COAPS)-1,COAPS) == 0) { |
nexpaq | 0:6c56fb4bc5f0 | 552 | security->resource_value_int(M2MSecurity::SecurityMode) != M2MSecurity::NoSecurity ? coap = COAPS: coap = ""; |
nexpaq | 0:6c56fb4bc5f0 | 553 | } |
nexpaq | 0:6c56fb4bc5f0 | 554 | if(!coap.empty()) { |
nexpaq | 0:6c56fb4bc5f0 | 555 | server_address = server_address.substr(coap.size(), |
nexpaq | 0:6c56fb4bc5f0 | 556 | server_address.size()-coap.size()); |
nexpaq | 0:6c56fb4bc5f0 | 557 | |
nexpaq | 0:6c56fb4bc5f0 | 558 | process_address(server_address, ip_address, _server_port); |
nexpaq | 0:6c56fb4bc5f0 | 559 | |
nexpaq | 0:6c56fb4bc5f0 | 560 | tr_debug("M2MInterfaceImpl::state_bootstrap - IP address %s , Port %d", ip_address.c_str(), _server_port); |
nexpaq | 0:6c56fb4bc5f0 | 561 | // If bind and resolving server address succeed then proceed else |
nexpaq | 0:6c56fb4bc5f0 | 562 | // return error to the application and go to Idle state. |
nexpaq | 0:6c56fb4bc5f0 | 563 | if(ip_address.empty()) { |
nexpaq | 0:6c56fb4bc5f0 | 564 | tr_error("M2MInterfaceImpl::state_bootstrap - set error as M2MInterface::InvalidParameters"); |
nexpaq | 0:6c56fb4bc5f0 | 565 | success = false; |
nexpaq | 0:6c56fb4bc5f0 | 566 | } else if(_connection_handler->resolve_server_address(ip_address, |
nexpaq | 0:6c56fb4bc5f0 | 567 | _server_port, |
nexpaq | 0:6c56fb4bc5f0 | 568 | M2MConnectionObserver::Bootstrap, |
nexpaq | 0:6c56fb4bc5f0 | 569 | security)) { |
nexpaq | 0:6c56fb4bc5f0 | 570 | tr_debug("M2MInterfaceImpl::state_bootstrap - resolve_server_address - success"); |
nexpaq | 0:6c56fb4bc5f0 | 571 | success = true; |
nexpaq | 0:6c56fb4bc5f0 | 572 | } |
nexpaq | 0:6c56fb4bc5f0 | 573 | } |
nexpaq | 0:6c56fb4bc5f0 | 574 | } |
nexpaq | 0:6c56fb4bc5f0 | 575 | } |
nexpaq | 0:6c56fb4bc5f0 | 576 | } |
nexpaq | 0:6c56fb4bc5f0 | 577 | if(!success) { |
nexpaq | 0:6c56fb4bc5f0 | 578 | tr_error("M2MInterfaceImpl::state_bootstrap - M2MInterface::InvalidParameters"); |
nexpaq | 0:6c56fb4bc5f0 | 579 | _observer.error(M2MInterface::InvalidParameters); |
nexpaq | 0:6c56fb4bc5f0 | 580 | internal_event(STATE_IDLE); |
nexpaq | 0:6c56fb4bc5f0 | 581 | } |
nexpaq | 0:6c56fb4bc5f0 | 582 | #endif //MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE |
nexpaq | 0:6c56fb4bc5f0 | 583 | } |
nexpaq | 0:6c56fb4bc5f0 | 584 | |
nexpaq | 0:6c56fb4bc5f0 | 585 | void M2MInterfaceImpl::state_bootstrap_address_resolved( EventData *data) |
nexpaq | 0:6c56fb4bc5f0 | 586 | { |
nexpaq | 0:6c56fb4bc5f0 | 587 | #ifndef MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE |
nexpaq | 0:6c56fb4bc5f0 | 588 | tr_debug("M2MInterfaceImpl::state_bootstrap_address_resolved"); |
nexpaq | 0:6c56fb4bc5f0 | 589 | ResolvedAddressData *event = static_cast<ResolvedAddressData *> (data); |
nexpaq | 0:6c56fb4bc5f0 | 590 | sn_nsdl_addr_s address; |
nexpaq | 0:6c56fb4bc5f0 | 591 | |
nexpaq | 0:6c56fb4bc5f0 | 592 | M2MInterface::NetworkStack stack = event->_address->_stack; |
nexpaq | 0:6c56fb4bc5f0 | 593 | |
nexpaq | 0:6c56fb4bc5f0 | 594 | if(M2MInterface::LwIP_IPv4 == stack) { |
nexpaq | 0:6c56fb4bc5f0 | 595 | tr_debug("M2MInterfaceImpl::state_bootstrap_address_resolved : IPv4 address"); |
nexpaq | 0:6c56fb4bc5f0 | 596 | address.type = SN_NSDL_ADDRESS_TYPE_IPV4; |
nexpaq | 0:6c56fb4bc5f0 | 597 | address.addr_len = 4; |
nexpaq | 0:6c56fb4bc5f0 | 598 | } else if((M2MInterface::LwIP_IPv6 == stack) || |
nexpaq | 0:6c56fb4bc5f0 | 599 | (M2MInterface::Nanostack_IPv6 == stack)) { |
nexpaq | 0:6c56fb4bc5f0 | 600 | tr_debug("M2MInterfaceImpl::state_bootstrap_address_resolved : IPv6 address"); |
nexpaq | 0:6c56fb4bc5f0 | 601 | address.type = SN_NSDL_ADDRESS_TYPE_IPV6; |
nexpaq | 0:6c56fb4bc5f0 | 602 | address.addr_len = 16; |
nexpaq | 0:6c56fb4bc5f0 | 603 | } |
nexpaq | 0:6c56fb4bc5f0 | 604 | address.port = event->_port; |
nexpaq | 0:6c56fb4bc5f0 | 605 | address.addr_ptr = (uint8_t*)event->_address->_address; |
nexpaq | 0:6c56fb4bc5f0 | 606 | address.addr_len = event->_address->_length; |
nexpaq | 0:6c56fb4bc5f0 | 607 | _connection_handler->start_listening_for_data(); |
nexpaq | 0:6c56fb4bc5f0 | 608 | |
nexpaq | 0:6c56fb4bc5f0 | 609 | // Include domain id to be part of endpoint name |
nexpaq | 0:6c56fb4bc5f0 | 610 | String new_ep_name; |
nexpaq | 0:6c56fb4bc5f0 | 611 | new_ep_name += _nsdl_interface->endpoint_name(); |
nexpaq | 0:6c56fb4bc5f0 | 612 | if (!_domain.empty()) { |
nexpaq | 0:6c56fb4bc5f0 | 613 | new_ep_name += '@'; |
nexpaq | 0:6c56fb4bc5f0 | 614 | new_ep_name += _domain; |
nexpaq | 0:6c56fb4bc5f0 | 615 | } |
nexpaq | 0:6c56fb4bc5f0 | 616 | if(_nsdl_interface->create_bootstrap_resource(&address, new_ep_name)) { |
nexpaq | 0:6c56fb4bc5f0 | 617 | tr_debug("M2MInterfaceImpl::state_bootstrap_address_resolved : create_bootstrap_resource - success"); |
nexpaq | 0:6c56fb4bc5f0 | 618 | internal_event(STATE_BOOTSTRAP_RESOURCE_CREATED); |
nexpaq | 0:6c56fb4bc5f0 | 619 | } else{ |
nexpaq | 0:6c56fb4bc5f0 | 620 | // If resource creation fails then inform error to application |
nexpaq | 0:6c56fb4bc5f0 | 621 | tr_error("M2MInterfaceImpl::state_bootstrap_address_resolved : M2MInterface::InvalidParameters"); |
nexpaq | 0:6c56fb4bc5f0 | 622 | internal_event(STATE_IDLE); |
nexpaq | 0:6c56fb4bc5f0 | 623 | _observer.error(M2MInterface::InvalidParameters); |
nexpaq | 0:6c56fb4bc5f0 | 624 | } |
nexpaq | 0:6c56fb4bc5f0 | 625 | #endif //MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE |
nexpaq | 0:6c56fb4bc5f0 | 626 | } |
nexpaq | 0:6c56fb4bc5f0 | 627 | |
nexpaq | 0:6c56fb4bc5f0 | 628 | void M2MInterfaceImpl::state_bootstrap_resource_created( EventData */*data*/) |
nexpaq | 0:6c56fb4bc5f0 | 629 | { |
nexpaq | 0:6c56fb4bc5f0 | 630 | #ifndef MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE |
nexpaq | 0:6c56fb4bc5f0 | 631 | tr_debug("M2MInterfaceImpl::state_bootstrap_resource_created"); |
nexpaq | 0:6c56fb4bc5f0 | 632 | #endif //MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE |
nexpaq | 0:6c56fb4bc5f0 | 633 | } |
nexpaq | 0:6c56fb4bc5f0 | 634 | |
nexpaq | 0:6c56fb4bc5f0 | 635 | void M2MInterfaceImpl::state_bootstrapped( EventData */*data*/) |
nexpaq | 0:6c56fb4bc5f0 | 636 | { |
nexpaq | 0:6c56fb4bc5f0 | 637 | #ifndef MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE |
nexpaq | 0:6c56fb4bc5f0 | 638 | tr_debug("M2MInterfaceImpl::state_bootstrapped"); |
nexpaq | 0:6c56fb4bc5f0 | 639 | #endif //MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE |
nexpaq | 0:6c56fb4bc5f0 | 640 | } |
nexpaq | 0:6c56fb4bc5f0 | 641 | |
nexpaq | 0:6c56fb4bc5f0 | 642 | void M2MInterfaceImpl::state_register( EventData *data) |
nexpaq | 0:6c56fb4bc5f0 | 643 | { |
nexpaq | 0:6c56fb4bc5f0 | 644 | tr_debug("M2MInterfaceImpl::state_register"); |
nexpaq | 0:6c56fb4bc5f0 | 645 | if (!_security) { |
nexpaq | 0:6c56fb4bc5f0 | 646 | M2MInterface::Error error = M2MInterface::InvalidParameters; |
nexpaq | 0:6c56fb4bc5f0 | 647 | // Start with registration preparation |
nexpaq | 0:6c56fb4bc5f0 | 648 | if(data) { |
nexpaq | 0:6c56fb4bc5f0 | 649 | M2MRegisterData *event = static_cast<M2MRegisterData *> (data); |
nexpaq | 0:6c56fb4bc5f0 | 650 | _security = event->_object; |
nexpaq | 0:6c56fb4bc5f0 | 651 | if(_security) { |
nexpaq | 0:6c56fb4bc5f0 | 652 | if(M2MSecurity::M2MServer == _security->server_type()) { |
nexpaq | 0:6c56fb4bc5f0 | 653 | tr_debug("M2MInterfaceImpl::state_register - server_type : M2MSecurity::M2MServer"); |
nexpaq | 0:6c56fb4bc5f0 | 654 | if(_nsdl_interface->create_nsdl_list_structure(event->_object_list)) { |
nexpaq | 0:6c56fb4bc5f0 | 655 | tr_debug("M2MInterfaceImpl::state_register - create_nsdl_list_structure - success"); |
nexpaq | 0:6c56fb4bc5f0 | 656 | // If the nsdl resource structure is created successfully |
nexpaq | 0:6c56fb4bc5f0 | 657 | String server_address = _security->resource_value_string(M2MSecurity::M2MServerUri); |
nexpaq | 0:6c56fb4bc5f0 | 658 | tr_debug("M2MInterfaceImpl::state_register - server_address %s", server_address.c_str()); |
nexpaq | 0:6c56fb4bc5f0 | 659 | String coap; |
nexpaq | 0:6c56fb4bc5f0 | 660 | if(server_address.compare(0,sizeof(COAP)-1,COAP) == 0) { |
nexpaq | 0:6c56fb4bc5f0 | 661 | coap = COAP; |
nexpaq | 0:6c56fb4bc5f0 | 662 | } |
nexpaq | 0:6c56fb4bc5f0 | 663 | else if(server_address.compare(0,sizeof(COAPS)-1,COAPS) == 0) { |
nexpaq | 0:6c56fb4bc5f0 | 664 | _security->resource_value_int(M2MSecurity::SecurityMode) != M2MSecurity::NoSecurity ? coap = COAPS: coap = ""; |
nexpaq | 0:6c56fb4bc5f0 | 665 | } |
nexpaq | 0:6c56fb4bc5f0 | 666 | if(!coap.empty()) { |
nexpaq | 0:6c56fb4bc5f0 | 667 | server_address = server_address.substr(coap.size(), |
nexpaq | 0:6c56fb4bc5f0 | 668 | server_address.size() - coap.size()); |
nexpaq | 0:6c56fb4bc5f0 | 669 | process_address(server_address, _server_ip_address, _server_port); |
nexpaq | 0:6c56fb4bc5f0 | 670 | |
nexpaq | 0:6c56fb4bc5f0 | 671 | tr_debug("M2MInterfaceImpl::state_register - IP address %s , Port %d", _server_ip_address.c_str(), _server_port); |
nexpaq | 0:6c56fb4bc5f0 | 672 | if(!_server_ip_address.empty()) { |
nexpaq | 0:6c56fb4bc5f0 | 673 | // Connection related errors are coming through callback |
nexpaq | 0:6c56fb4bc5f0 | 674 | error = M2MInterface::ErrorNone; |
nexpaq | 0:6c56fb4bc5f0 | 675 | _connection_handler->resolve_server_address(_server_ip_address,_server_port, |
nexpaq | 0:6c56fb4bc5f0 | 676 | M2MConnectionObserver::LWM2MServer, |
nexpaq | 0:6c56fb4bc5f0 | 677 | _security); |
nexpaq | 0:6c56fb4bc5f0 | 678 | } |
nexpaq | 0:6c56fb4bc5f0 | 679 | } |
nexpaq | 0:6c56fb4bc5f0 | 680 | } |
nexpaq | 0:6c56fb4bc5f0 | 681 | } |
nexpaq | 0:6c56fb4bc5f0 | 682 | } |
nexpaq | 0:6c56fb4bc5f0 | 683 | } |
nexpaq | 0:6c56fb4bc5f0 | 684 | if (error != M2MInterface::ErrorNone) { |
nexpaq | 0:6c56fb4bc5f0 | 685 | tr_error("M2MInterfaceImpl::state_register - set error as M2MInterface::InvalidParameters"); |
nexpaq | 0:6c56fb4bc5f0 | 686 | internal_event(STATE_IDLE); |
nexpaq | 0:6c56fb4bc5f0 | 687 | _observer.error(error); |
nexpaq | 0:6c56fb4bc5f0 | 688 | } |
nexpaq | 0:6c56fb4bc5f0 | 689 | } else { |
nexpaq | 0:6c56fb4bc5f0 | 690 | _connection_handler->resolve_server_address(_server_ip_address,_server_port, |
nexpaq | 0:6c56fb4bc5f0 | 691 | M2MConnectionObserver::LWM2MServer, |
nexpaq | 0:6c56fb4bc5f0 | 692 | _security); |
nexpaq | 0:6c56fb4bc5f0 | 693 | } |
nexpaq | 0:6c56fb4bc5f0 | 694 | } |
nexpaq | 0:6c56fb4bc5f0 | 695 | |
nexpaq | 0:6c56fb4bc5f0 | 696 | void M2MInterfaceImpl::process_address(const String& server_address, String& ip_address, uint16_t& port) { |
nexpaq | 0:6c56fb4bc5f0 | 697 | |
nexpaq | 0:6c56fb4bc5f0 | 698 | int colonFound = server_address.find_last_of(':'); //10 |
nexpaq | 0:6c56fb4bc5f0 | 699 | if(colonFound != -1) { |
nexpaq | 0:6c56fb4bc5f0 | 700 | ip_address = server_address.substr(0,colonFound); |
nexpaq | 0:6c56fb4bc5f0 | 701 | port = atoi(server_address.substr(colonFound+1, |
nexpaq | 0:6c56fb4bc5f0 | 702 | server_address.size()-ip_address.size()).c_str()); |
nexpaq | 0:6c56fb4bc5f0 | 703 | colonFound = ip_address.find_last_of(']'); |
nexpaq | 0:6c56fb4bc5f0 | 704 | if(ip_address.compare(0,1,"[") == 0) { |
nexpaq | 0:6c56fb4bc5f0 | 705 | if(colonFound == -1) { |
nexpaq | 0:6c56fb4bc5f0 | 706 | ip_address.clear(); |
nexpaq | 0:6c56fb4bc5f0 | 707 | } else { |
nexpaq | 0:6c56fb4bc5f0 | 708 | ip_address = ip_address.substr(1,colonFound-1); |
nexpaq | 0:6c56fb4bc5f0 | 709 | } |
nexpaq | 0:6c56fb4bc5f0 | 710 | } else if(colonFound != -1) { |
nexpaq | 0:6c56fb4bc5f0 | 711 | ip_address.clear(); |
nexpaq | 0:6c56fb4bc5f0 | 712 | } |
nexpaq | 0:6c56fb4bc5f0 | 713 | } |
nexpaq | 0:6c56fb4bc5f0 | 714 | } |
nexpaq | 0:6c56fb4bc5f0 | 715 | |
nexpaq | 0:6c56fb4bc5f0 | 716 | void M2MInterfaceImpl::state_register_address_resolved( EventData *data) |
nexpaq | 0:6c56fb4bc5f0 | 717 | { |
nexpaq | 0:6c56fb4bc5f0 | 718 | tr_debug("M2MInterfaceImpl::state_register_address_resolved"); |
nexpaq | 0:6c56fb4bc5f0 | 719 | if(data) { |
nexpaq | 0:6c56fb4bc5f0 | 720 | ResolvedAddressData *event = static_cast<ResolvedAddressData *> (data); |
nexpaq | 0:6c56fb4bc5f0 | 721 | |
nexpaq | 0:6c56fb4bc5f0 | 722 | sn_nsdl_addr_type_e address_type = SN_NSDL_ADDRESS_TYPE_IPV6; |
nexpaq | 0:6c56fb4bc5f0 | 723 | |
nexpaq | 0:6c56fb4bc5f0 | 724 | M2MInterface::NetworkStack stack = event->_address->_stack; |
nexpaq | 0:6c56fb4bc5f0 | 725 | |
nexpaq | 0:6c56fb4bc5f0 | 726 | if(M2MInterface::LwIP_IPv4 == stack) { |
nexpaq | 0:6c56fb4bc5f0 | 727 | tr_debug("M2MInterfaceImpl::state_register_address_resolved : IPv4 address"); |
nexpaq | 0:6c56fb4bc5f0 | 728 | address_type = SN_NSDL_ADDRESS_TYPE_IPV4; |
nexpaq | 0:6c56fb4bc5f0 | 729 | } else if((M2MInterface::LwIP_IPv6 == stack) || |
nexpaq | 0:6c56fb4bc5f0 | 730 | (M2MInterface::Nanostack_IPv6 == stack)) { |
nexpaq | 0:6c56fb4bc5f0 | 731 | tr_debug("M2MInterfaceImpl::state_register_address_resolved : IPv6 address"); |
nexpaq | 0:6c56fb4bc5f0 | 732 | address_type = SN_NSDL_ADDRESS_TYPE_IPV6; |
nexpaq | 0:6c56fb4bc5f0 | 733 | } |
nexpaq | 0:6c56fb4bc5f0 | 734 | _connection_handler->start_listening_for_data(); |
nexpaq | 0:6c56fb4bc5f0 | 735 | if(_nsdl_interface->send_register_message((uint8_t*)event->_address->_address,event->_port, address_type)) { |
nexpaq | 0:6c56fb4bc5f0 | 736 | internal_event(STATE_REGISTER_RESOURCE_CREATED); |
nexpaq | 0:6c56fb4bc5f0 | 737 | } else { |
nexpaq | 0:6c56fb4bc5f0 | 738 | // If resource creation fails then inform error to application |
nexpaq | 0:6c56fb4bc5f0 | 739 | tr_error("M2MInterfaceImpl::state_register_address_resolved : M2MInterface::InvalidParameters"); |
nexpaq | 0:6c56fb4bc5f0 | 740 | internal_event(STATE_IDLE); |
nexpaq | 0:6c56fb4bc5f0 | 741 | _observer.error(M2MInterface::InvalidParameters); |
nexpaq | 0:6c56fb4bc5f0 | 742 | } |
nexpaq | 0:6c56fb4bc5f0 | 743 | } |
nexpaq | 0:6c56fb4bc5f0 | 744 | } |
nexpaq | 0:6c56fb4bc5f0 | 745 | |
nexpaq | 0:6c56fb4bc5f0 | 746 | void M2MInterfaceImpl::state_register_resource_created( EventData */*data*/) |
nexpaq | 0:6c56fb4bc5f0 | 747 | { |
nexpaq | 0:6c56fb4bc5f0 | 748 | tr_debug("M2MInterfaceImpl::state_register_resource_created"); |
nexpaq | 0:6c56fb4bc5f0 | 749 | } |
nexpaq | 0:6c56fb4bc5f0 | 750 | |
nexpaq | 0:6c56fb4bc5f0 | 751 | void M2MInterfaceImpl::state_registered( EventData */*data*/) |
nexpaq | 0:6c56fb4bc5f0 | 752 | { |
nexpaq | 0:6c56fb4bc5f0 | 753 | tr_debug("M2MInterfaceImpl::state_registered"); |
nexpaq | 0:6c56fb4bc5f0 | 754 | _retry_count = 0; |
nexpaq | 0:6c56fb4bc5f0 | 755 | _register_ongoing = false; |
nexpaq | 0:6c56fb4bc5f0 | 756 | _update_register_ongoing = false; |
nexpaq | 0:6c56fb4bc5f0 | 757 | _reconnecting = false; |
nexpaq | 0:6c56fb4bc5f0 | 758 | } |
nexpaq | 0:6c56fb4bc5f0 | 759 | |
nexpaq | 0:6c56fb4bc5f0 | 760 | void M2MInterfaceImpl::state_update_registration( EventData *data) |
nexpaq | 0:6c56fb4bc5f0 | 761 | { |
nexpaq | 0:6c56fb4bc5f0 | 762 | tr_debug("M2MInterfaceImpl::state_update_registration"); |
nexpaq | 0:6c56fb4bc5f0 | 763 | // Start with registration preparation |
nexpaq | 0:6c56fb4bc5f0 | 764 | if(data) { |
nexpaq | 0:6c56fb4bc5f0 | 765 | M2MUpdateRegisterData *event = static_cast<M2MUpdateRegisterData *> (data); |
nexpaq | 0:6c56fb4bc5f0 | 766 | _nsdl_interface->send_update_registration(event->_lifetime); |
nexpaq | 0:6c56fb4bc5f0 | 767 | } |
nexpaq | 0:6c56fb4bc5f0 | 768 | } |
nexpaq | 0:6c56fb4bc5f0 | 769 | |
nexpaq | 0:6c56fb4bc5f0 | 770 | void M2MInterfaceImpl::state_unregister( EventData */*data*/) |
nexpaq | 0:6c56fb4bc5f0 | 771 | { |
nexpaq | 0:6c56fb4bc5f0 | 772 | tr_debug("M2MInterfaceImpl::state_unregister"); |
nexpaq | 0:6c56fb4bc5f0 | 773 | internal_event(STATE_SENDING_COAP_DATA); |
nexpaq | 0:6c56fb4bc5f0 | 774 | if(!_nsdl_interface->send_unregister_message()) { |
nexpaq | 0:6c56fb4bc5f0 | 775 | tr_error("M2MInterfaceImpl::state_unregister : M2MInterface::NotRegistered"); |
nexpaq | 0:6c56fb4bc5f0 | 776 | internal_event(STATE_IDLE); |
nexpaq | 0:6c56fb4bc5f0 | 777 | _observer.error(M2MInterface::NotRegistered); |
nexpaq | 0:6c56fb4bc5f0 | 778 | } |
nexpaq | 0:6c56fb4bc5f0 | 779 | } |
nexpaq | 0:6c56fb4bc5f0 | 780 | |
nexpaq | 0:6c56fb4bc5f0 | 781 | void M2MInterfaceImpl::state_unregistered( EventData */*data*/) |
nexpaq | 0:6c56fb4bc5f0 | 782 | { |
nexpaq | 0:6c56fb4bc5f0 | 783 | tr_debug("M2MInterfaceImpl::state_unregistered"); |
nexpaq | 0:6c56fb4bc5f0 | 784 | internal_event(STATE_IDLE); |
nexpaq | 0:6c56fb4bc5f0 | 785 | } |
nexpaq | 0:6c56fb4bc5f0 | 786 | |
nexpaq | 0:6c56fb4bc5f0 | 787 | void M2MInterfaceImpl::state_sending_coap_data( EventData */*data*/) |
nexpaq | 0:6c56fb4bc5f0 | 788 | { |
nexpaq | 0:6c56fb4bc5f0 | 789 | tr_debug("M2MInterfaceImpl::state_sending_coap_data"); |
nexpaq | 0:6c56fb4bc5f0 | 790 | internal_event(STATE_WAITING); |
nexpaq | 0:6c56fb4bc5f0 | 791 | } |
nexpaq | 0:6c56fb4bc5f0 | 792 | |
nexpaq | 0:6c56fb4bc5f0 | 793 | void M2MInterfaceImpl::state_coap_data_sent( EventData */*data*/) |
nexpaq | 0:6c56fb4bc5f0 | 794 | { |
nexpaq | 0:6c56fb4bc5f0 | 795 | tr_debug("M2MInterfaceImpl::state_coap_data_sent"); |
nexpaq | 0:6c56fb4bc5f0 | 796 | internal_event(STATE_WAITING); |
nexpaq | 0:6c56fb4bc5f0 | 797 | } |
nexpaq | 0:6c56fb4bc5f0 | 798 | |
nexpaq | 0:6c56fb4bc5f0 | 799 | void M2MInterfaceImpl::state_coap_data_received( EventData *data) |
nexpaq | 0:6c56fb4bc5f0 | 800 | { |
nexpaq | 0:6c56fb4bc5f0 | 801 | tr_debug("M2MInterfaceImpl::state_coap_data_received"); |
nexpaq | 0:6c56fb4bc5f0 | 802 | if(data) { |
nexpaq | 0:6c56fb4bc5f0 | 803 | ReceivedData *event = static_cast<ReceivedData*> (data); |
nexpaq | 0:6c56fb4bc5f0 | 804 | sn_nsdl_addr_s address; |
nexpaq | 0:6c56fb4bc5f0 | 805 | |
nexpaq | 0:6c56fb4bc5f0 | 806 | M2MInterface::NetworkStack stack = event->_address->_stack; |
nexpaq | 0:6c56fb4bc5f0 | 807 | |
nexpaq | 0:6c56fb4bc5f0 | 808 | if(M2MInterface::LwIP_IPv4 == stack) { |
nexpaq | 0:6c56fb4bc5f0 | 809 | tr_debug("M2MInterfaceImpl::state_coap_data_received : IPv4 address"); |
nexpaq | 0:6c56fb4bc5f0 | 810 | address.type = SN_NSDL_ADDRESS_TYPE_IPV4; |
nexpaq | 0:6c56fb4bc5f0 | 811 | address.addr_len = 4; |
nexpaq | 0:6c56fb4bc5f0 | 812 | } else if((M2MInterface::LwIP_IPv6 == stack) || |
nexpaq | 0:6c56fb4bc5f0 | 813 | (M2MInterface::Nanostack_IPv6 == stack)) { |
nexpaq | 0:6c56fb4bc5f0 | 814 | tr_debug("M2MInterfaceImpl::state_coap_data_received : IPv6 address"); |
nexpaq | 0:6c56fb4bc5f0 | 815 | address.type = SN_NSDL_ADDRESS_TYPE_IPV6; |
nexpaq | 0:6c56fb4bc5f0 | 816 | address.addr_len = 16; |
nexpaq | 0:6c56fb4bc5f0 | 817 | } |
nexpaq | 0:6c56fb4bc5f0 | 818 | address.port = event->_address->_port; |
nexpaq | 0:6c56fb4bc5f0 | 819 | address.addr_ptr = (uint8_t*)event->_address->_address; |
nexpaq | 0:6c56fb4bc5f0 | 820 | address.addr_len = event->_address->_length; |
nexpaq | 0:6c56fb4bc5f0 | 821 | |
nexpaq | 0:6c56fb4bc5f0 | 822 | // Process received data |
nexpaq | 0:6c56fb4bc5f0 | 823 | internal_event(STATE_PROCESSING_COAP_DATA); |
nexpaq | 0:6c56fb4bc5f0 | 824 | if(!_nsdl_interface->process_received_data(event->_data, |
nexpaq | 0:6c56fb4bc5f0 | 825 | event->_size, |
nexpaq | 0:6c56fb4bc5f0 | 826 | &address)) { |
nexpaq | 0:6c56fb4bc5f0 | 827 | tr_error("M2MInterfaceImpl::state_coap_data_received : M2MInterface::ResponseParseFailed"); |
nexpaq | 0:6c56fb4bc5f0 | 828 | _observer.error(M2MInterface::ResponseParseFailed); |
nexpaq | 0:6c56fb4bc5f0 | 829 | } |
nexpaq | 0:6c56fb4bc5f0 | 830 | } |
nexpaq | 0:6c56fb4bc5f0 | 831 | } |
nexpaq | 0:6c56fb4bc5f0 | 832 | |
nexpaq | 0:6c56fb4bc5f0 | 833 | void M2MInterfaceImpl::state_processing_coap_data( EventData */*data*/) |
nexpaq | 0:6c56fb4bc5f0 | 834 | { |
nexpaq | 0:6c56fb4bc5f0 | 835 | tr_debug("M2MInterfaceImpl::state_processing_coap_data"); |
nexpaq | 0:6c56fb4bc5f0 | 836 | internal_event(STATE_WAITING); |
nexpaq | 0:6c56fb4bc5f0 | 837 | } |
nexpaq | 0:6c56fb4bc5f0 | 838 | |
nexpaq | 0:6c56fb4bc5f0 | 839 | void M2MInterfaceImpl::state_coap_data_processed( EventData */*data*/) |
nexpaq | 0:6c56fb4bc5f0 | 840 | { |
nexpaq | 0:6c56fb4bc5f0 | 841 | tr_debug("M2MInterfaceImpl::state_coap_data_processed"); |
nexpaq | 0:6c56fb4bc5f0 | 842 | internal_event(STATE_WAITING); |
nexpaq | 0:6c56fb4bc5f0 | 843 | } |
nexpaq | 0:6c56fb4bc5f0 | 844 | |
nexpaq | 0:6c56fb4bc5f0 | 845 | void M2MInterfaceImpl::state_waiting( EventData */*data*/) |
nexpaq | 0:6c56fb4bc5f0 | 846 | { |
nexpaq | 0:6c56fb4bc5f0 | 847 | tr_debug("M2MInterfaceImpl::state_waiting"); |
nexpaq | 0:6c56fb4bc5f0 | 848 | } |
nexpaq | 0:6c56fb4bc5f0 | 849 | |
nexpaq | 0:6c56fb4bc5f0 | 850 | // generates an external event. called once per external event |
nexpaq | 0:6c56fb4bc5f0 | 851 | // to start the state machine executing |
nexpaq | 0:6c56fb4bc5f0 | 852 | void M2MInterfaceImpl::external_event(uint8_t new_state, |
nexpaq | 0:6c56fb4bc5f0 | 853 | EventData* p_data) |
nexpaq | 0:6c56fb4bc5f0 | 854 | { |
nexpaq | 0:6c56fb4bc5f0 | 855 | tr_debug("M2MInterfaceImpl::external_event : new state %d", new_state); |
nexpaq | 0:6c56fb4bc5f0 | 856 | // if we are supposed to ignore this event |
nexpaq | 0:6c56fb4bc5f0 | 857 | if (new_state == EVENT_IGNORED) { |
nexpaq | 0:6c56fb4bc5f0 | 858 | tr_debug("M2MInterfaceImpl::external_event : new state is EVENT_IGNORED"); |
nexpaq | 0:6c56fb4bc5f0 | 859 | // just delete the event data, if any |
nexpaq | 0:6c56fb4bc5f0 | 860 | if (p_data) { |
nexpaq | 0:6c56fb4bc5f0 | 861 | delete p_data; |
nexpaq | 0:6c56fb4bc5f0 | 862 | p_data = NULL; |
nexpaq | 0:6c56fb4bc5f0 | 863 | } |
nexpaq | 0:6c56fb4bc5f0 | 864 | _event_ignored = true; |
nexpaq | 0:6c56fb4bc5f0 | 865 | } |
nexpaq | 0:6c56fb4bc5f0 | 866 | else { |
nexpaq | 0:6c56fb4bc5f0 | 867 | tr_debug("M2MInterfaceImpl::external_event : handle new state"); |
nexpaq | 0:6c56fb4bc5f0 | 868 | // generate the event and execute the state engine |
nexpaq | 0:6c56fb4bc5f0 | 869 | internal_event(new_state, p_data); |
nexpaq | 0:6c56fb4bc5f0 | 870 | } |
nexpaq | 0:6c56fb4bc5f0 | 871 | } |
nexpaq | 0:6c56fb4bc5f0 | 872 | |
nexpaq | 0:6c56fb4bc5f0 | 873 | // generates an internal event. called from within a state |
nexpaq | 0:6c56fb4bc5f0 | 874 | // function to transition to a new state |
nexpaq | 0:6c56fb4bc5f0 | 875 | void M2MInterfaceImpl::internal_event(uint8_t new_state, |
nexpaq | 0:6c56fb4bc5f0 | 876 | EventData* p_data) |
nexpaq | 0:6c56fb4bc5f0 | 877 | { |
nexpaq | 0:6c56fb4bc5f0 | 878 | tr_debug("M2MInterfaceImpl::internal_event : new state %d", new_state); |
nexpaq | 0:6c56fb4bc5f0 | 879 | _event_data = p_data; |
nexpaq | 0:6c56fb4bc5f0 | 880 | _event_generated = true; |
nexpaq | 0:6c56fb4bc5f0 | 881 | _current_state = new_state; |
nexpaq | 0:6c56fb4bc5f0 | 882 | state_engine(); |
nexpaq | 0:6c56fb4bc5f0 | 883 | } |
nexpaq | 0:6c56fb4bc5f0 | 884 | |
nexpaq | 0:6c56fb4bc5f0 | 885 | // the state engine executes the state machine states |
nexpaq | 0:6c56fb4bc5f0 | 886 | void M2MInterfaceImpl::state_engine (void) |
nexpaq | 0:6c56fb4bc5f0 | 887 | { |
nexpaq | 0:6c56fb4bc5f0 | 888 | tr_debug("M2MInterfaceImpl::state_engine"); |
nexpaq | 0:6c56fb4bc5f0 | 889 | EventData* p_data_temp = NULL; |
nexpaq | 0:6c56fb4bc5f0 | 890 | |
nexpaq | 0:6c56fb4bc5f0 | 891 | // while events are being generated keep executing states |
nexpaq | 0:6c56fb4bc5f0 | 892 | while (_event_generated) { |
nexpaq | 0:6c56fb4bc5f0 | 893 | p_data_temp = _event_data; // copy of event data pointer |
nexpaq | 0:6c56fb4bc5f0 | 894 | _event_data = NULL; // event data used up, reset ptr |
nexpaq | 0:6c56fb4bc5f0 | 895 | _event_generated = false; // event used up, reset flag |
nexpaq | 0:6c56fb4bc5f0 | 896 | |
nexpaq | 0:6c56fb4bc5f0 | 897 | assert(_current_state < _max_states); |
nexpaq | 0:6c56fb4bc5f0 | 898 | |
nexpaq | 0:6c56fb4bc5f0 | 899 | state_function( _current_state, p_data_temp ); |
nexpaq | 0:6c56fb4bc5f0 | 900 | |
nexpaq | 0:6c56fb4bc5f0 | 901 | // if event data was used, then delete it |
nexpaq | 0:6c56fb4bc5f0 | 902 | if (p_data_temp) { |
nexpaq | 0:6c56fb4bc5f0 | 903 | delete p_data_temp; |
nexpaq | 0:6c56fb4bc5f0 | 904 | p_data_temp = NULL; |
nexpaq | 0:6c56fb4bc5f0 | 905 | } |
nexpaq | 0:6c56fb4bc5f0 | 906 | } |
nexpaq | 0:6c56fb4bc5f0 | 907 | } |
nexpaq | 0:6c56fb4bc5f0 | 908 | |
nexpaq | 0:6c56fb4bc5f0 | 909 | void M2MInterfaceImpl::state_function( uint8_t current_state, EventData* data ) |
nexpaq | 0:6c56fb4bc5f0 | 910 | { |
nexpaq | 0:6c56fb4bc5f0 | 911 | switch( current_state ) { |
nexpaq | 0:6c56fb4bc5f0 | 912 | case STATE_IDLE: |
nexpaq | 0:6c56fb4bc5f0 | 913 | M2MInterfaceImpl::state_idle(data); |
nexpaq | 0:6c56fb4bc5f0 | 914 | break; |
nexpaq | 0:6c56fb4bc5f0 | 915 | case STATE_BOOTSTRAP: |
nexpaq | 0:6c56fb4bc5f0 | 916 | #ifndef MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE |
nexpaq | 0:6c56fb4bc5f0 | 917 | M2MInterfaceImpl::state_bootstrap(data); |
nexpaq | 0:6c56fb4bc5f0 | 918 | #endif //MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE |
nexpaq | 0:6c56fb4bc5f0 | 919 | break; |
nexpaq | 0:6c56fb4bc5f0 | 920 | case STATE_BOOTSTRAP_ADDRESS_RESOLVED: |
nexpaq | 0:6c56fb4bc5f0 | 921 | #ifndef MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE |
nexpaq | 0:6c56fb4bc5f0 | 922 | M2MInterfaceImpl::state_bootstrap_address_resolved(data); |
nexpaq | 0:6c56fb4bc5f0 | 923 | #endif //MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE |
nexpaq | 0:6c56fb4bc5f0 | 924 | break; |
nexpaq | 0:6c56fb4bc5f0 | 925 | case STATE_BOOTSTRAP_RESOURCE_CREATED: |
nexpaq | 0:6c56fb4bc5f0 | 926 | #ifndef MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE |
nexpaq | 0:6c56fb4bc5f0 | 927 | M2MInterfaceImpl::state_bootstrap_resource_created(data); |
nexpaq | 0:6c56fb4bc5f0 | 928 | #endif //MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE |
nexpaq | 0:6c56fb4bc5f0 | 929 | break; |
nexpaq | 0:6c56fb4bc5f0 | 930 | case STATE_BOOTSTRAPPED: |
nexpaq | 0:6c56fb4bc5f0 | 931 | #ifndef MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE |
nexpaq | 0:6c56fb4bc5f0 | 932 | M2MInterfaceImpl::state_bootstrapped(data); |
nexpaq | 0:6c56fb4bc5f0 | 933 | #endif //MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE |
nexpaq | 0:6c56fb4bc5f0 | 934 | break; |
nexpaq | 0:6c56fb4bc5f0 | 935 | case STATE_REGISTER: |
nexpaq | 0:6c56fb4bc5f0 | 936 | M2MInterfaceImpl::state_register(data); |
nexpaq | 0:6c56fb4bc5f0 | 937 | break; |
nexpaq | 0:6c56fb4bc5f0 | 938 | case STATE_REGISTER_ADDRESS_RESOLVED: |
nexpaq | 0:6c56fb4bc5f0 | 939 | M2MInterfaceImpl::state_register_address_resolved(data); |
nexpaq | 0:6c56fb4bc5f0 | 940 | break; |
nexpaq | 0:6c56fb4bc5f0 | 941 | case STATE_REGISTER_RESOURCE_CREATED: |
nexpaq | 0:6c56fb4bc5f0 | 942 | M2MInterfaceImpl::state_register_resource_created(data); |
nexpaq | 0:6c56fb4bc5f0 | 943 | break; |
nexpaq | 0:6c56fb4bc5f0 | 944 | case STATE_REGISTERED: |
nexpaq | 0:6c56fb4bc5f0 | 945 | M2MInterfaceImpl::state_registered(data); |
nexpaq | 0:6c56fb4bc5f0 | 946 | break; |
nexpaq | 0:6c56fb4bc5f0 | 947 | case STATE_UPDATE_REGISTRATION: |
nexpaq | 0:6c56fb4bc5f0 | 948 | M2MInterfaceImpl::state_update_registration(data); |
nexpaq | 0:6c56fb4bc5f0 | 949 | break; |
nexpaq | 0:6c56fb4bc5f0 | 950 | case STATE_UNREGISTER: |
nexpaq | 0:6c56fb4bc5f0 | 951 | M2MInterfaceImpl::state_unregister(data); |
nexpaq | 0:6c56fb4bc5f0 | 952 | break; |
nexpaq | 0:6c56fb4bc5f0 | 953 | case STATE_UNREGISTERED: |
nexpaq | 0:6c56fb4bc5f0 | 954 | M2MInterfaceImpl::state_unregistered(data); |
nexpaq | 0:6c56fb4bc5f0 | 955 | break; |
nexpaq | 0:6c56fb4bc5f0 | 956 | case STATE_SENDING_COAP_DATA: |
nexpaq | 0:6c56fb4bc5f0 | 957 | M2MInterfaceImpl::state_sending_coap_data(data); |
nexpaq | 0:6c56fb4bc5f0 | 958 | break; |
nexpaq | 0:6c56fb4bc5f0 | 959 | case STATE_COAP_DATA_SENT: |
nexpaq | 0:6c56fb4bc5f0 | 960 | M2MInterfaceImpl::state_coap_data_sent(data); |
nexpaq | 0:6c56fb4bc5f0 | 961 | break; |
nexpaq | 0:6c56fb4bc5f0 | 962 | case STATE_COAP_DATA_RECEIVED: |
nexpaq | 0:6c56fb4bc5f0 | 963 | M2MInterfaceImpl::state_coap_data_received(data); |
nexpaq | 0:6c56fb4bc5f0 | 964 | break; |
nexpaq | 0:6c56fb4bc5f0 | 965 | case STATE_PROCESSING_COAP_DATA: |
nexpaq | 0:6c56fb4bc5f0 | 966 | M2MInterfaceImpl::state_processing_coap_data(data); |
nexpaq | 0:6c56fb4bc5f0 | 967 | break; |
nexpaq | 0:6c56fb4bc5f0 | 968 | case STATE_COAP_DATA_PROCESSED: |
nexpaq | 0:6c56fb4bc5f0 | 969 | M2MInterfaceImpl::state_coap_data_processed(data); |
nexpaq | 0:6c56fb4bc5f0 | 970 | break; |
nexpaq | 0:6c56fb4bc5f0 | 971 | case STATE_WAITING: |
nexpaq | 0:6c56fb4bc5f0 | 972 | M2MInterfaceImpl::state_waiting(data); |
nexpaq | 0:6c56fb4bc5f0 | 973 | break; |
nexpaq | 0:6c56fb4bc5f0 | 974 | } |
nexpaq | 0:6c56fb4bc5f0 | 975 | } |