mbed client lightswitch demo

Dependencies:   mbed Socket lwip-eth lwip-sys lwip

Fork of mbed-client-classic-example-lwip by Austin Blackstone

Committer:
mbedAustin
Date:
Thu Jun 09 17:08:36 2016 +0000
Revision:
11:cada08fc8a70
Commit for public Consumption

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbedAustin 11:cada08fc8a70 1 /*
mbedAustin 11:cada08fc8a70 2 * Copyright (c) 2015 ARM Limited. All rights reserved.
mbedAustin 11:cada08fc8a70 3 * SPDX-License-Identifier: Apache-2.0
mbedAustin 11:cada08fc8a70 4 * Licensed under the Apache License, Version 2.0 (the License); you may
mbedAustin 11:cada08fc8a70 5 * not use this file except in compliance with the License.
mbedAustin 11:cada08fc8a70 6 * You may obtain a copy of the License at
mbedAustin 11:cada08fc8a70 7 *
mbedAustin 11:cada08fc8a70 8 * http://www.apache.org/licenses/LICENSE-2.0
mbedAustin 11:cada08fc8a70 9 *
mbedAustin 11:cada08fc8a70 10 * Unless required by applicable law or agreed to in writing, software
mbedAustin 11:cada08fc8a70 11 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
mbedAustin 11:cada08fc8a70 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
mbedAustin 11:cada08fc8a70 13 * See the License for the specific language governing permissions and
mbedAustin 11:cada08fc8a70 14 * limitations under the License.
mbedAustin 11:cada08fc8a70 15 */
mbedAustin 11:cada08fc8a70 16 #ifndef M2M_CONNECTION_HANDLER_PIMPL_H__
mbedAustin 11:cada08fc8a70 17 #define M2M_CONNECTION_HANDLER_PIMPL_H__
mbedAustin 11:cada08fc8a70 18
mbedAustin 11:cada08fc8a70 19 #include "mbed-client/m2mconfig.h"
mbedAustin 11:cada08fc8a70 20 #include "mbed-client/m2minterface.h"
mbedAustin 11:cada08fc8a70 21 #include "mbed-client/m2mconnectionobserver.h"
mbedAustin 11:cada08fc8a70 22 #include "mbed-client/m2mconnectionsecurity.h"
mbedAustin 11:cada08fc8a70 23 #include "nsdl-c/sn_nsdl.h"
mbedAustin 11:cada08fc8a70 24
mbedAustin 11:cada08fc8a70 25 #include "Socket/Socket.h"
mbedAustin 11:cada08fc8a70 26 #include "Socket/Endpoint.h"
mbedAustin 11:cada08fc8a70 27 #include "Socket/UDPSocket.h"
mbedAustin 11:cada08fc8a70 28 #include "threadwrapper.h"
mbedAustin 11:cada08fc8a70 29 #include "Thread.h"
mbedAustin 11:cada08fc8a70 30 #include "Queue.h"
mbedAustin 11:cada08fc8a70 31 #include <string>
mbedAustin 11:cada08fc8a70 32
mbedAustin 11:cada08fc8a70 33
mbedAustin 11:cada08fc8a70 34 class M2MConnectionSecurity;
mbedAustin 11:cada08fc8a70 35 class M2MConnectionHandler;
mbedAustin 11:cada08fc8a70 36 class M2MSecurity;
mbedAustin 11:cada08fc8a70 37
mbedAustin 11:cada08fc8a70 38 /**
mbedAustin 11:cada08fc8a70 39 * @brief M2MConnectionHandlerPimpl.
mbedAustin 11:cada08fc8a70 40 * This class handles the socket connection for LWM2M Client
mbedAustin 11:cada08fc8a70 41 */
mbedAustin 11:cada08fc8a70 42
mbedAustin 11:cada08fc8a70 43
mbedAustin 11:cada08fc8a70 44 class M2MConnectionHandlerPimpl {
mbedAustin 11:cada08fc8a70 45 public:
mbedAustin 11:cada08fc8a70 46
mbedAustin 11:cada08fc8a70 47 /**
mbedAustin 11:cada08fc8a70 48 * @brief Constructor
mbedAustin 11:cada08fc8a70 49 */
mbedAustin 11:cada08fc8a70 50 M2MConnectionHandlerPimpl(M2MConnectionHandler* base, M2MConnectionObserver &observer,
mbedAustin 11:cada08fc8a70 51 M2MConnectionSecurity* sec,
mbedAustin 11:cada08fc8a70 52 M2MInterface::BindingMode mode,
mbedAustin 11:cada08fc8a70 53 M2MInterface::NetworkStack stack);
mbedAustin 11:cada08fc8a70 54
mbedAustin 11:cada08fc8a70 55 /**
mbedAustin 11:cada08fc8a70 56 * @brief Destructor
mbedAustin 11:cada08fc8a70 57 */
mbedAustin 11:cada08fc8a70 58 ~M2MConnectionHandlerPimpl();
mbedAustin 11:cada08fc8a70 59
mbedAustin 11:cada08fc8a70 60 /**
mbedAustin 11:cada08fc8a70 61 * @brief This binds the socket connection.
mbedAustin 11:cada08fc8a70 62 * @param listen_port Port to listen for incoming connection.
mbedAustin 11:cada08fc8a70 63 * @return true if successful else false.
mbedAustin 11:cada08fc8a70 64 */
mbedAustin 11:cada08fc8a70 65 bool bind_connection(const uint16_t listen_port);
mbedAustin 11:cada08fc8a70 66
mbedAustin 11:cada08fc8a70 67 /**
mbedAustin 11:cada08fc8a70 68 * @brief This resolves the server address. Output is
mbedAustin 11:cada08fc8a70 69 * returned through callback
mbedAustin 11:cada08fc8a70 70 * @param String server address.
mbedAustin 11:cada08fc8a70 71 * @param uint16_t Server port.
mbedAustin 11:cada08fc8a70 72 * @param ServerType, Server Type to be resolved.
mbedAustin 11:cada08fc8a70 73 * @return true if address is valid else false.
mbedAustin 11:cada08fc8a70 74 */
mbedAustin 11:cada08fc8a70 75 bool resolve_server_address(const String& server_address,
mbedAustin 11:cada08fc8a70 76 const uint16_t server_port,
mbedAustin 11:cada08fc8a70 77 M2MConnectionObserver::ServerType server_type,
mbedAustin 11:cada08fc8a70 78 const M2MSecurity* security);
mbedAustin 11:cada08fc8a70 79
mbedAustin 11:cada08fc8a70 80 /**
mbedAustin 11:cada08fc8a70 81 * @brief Sends data, to the connected sent to server.
mbedAustin 11:cada08fc8a70 82 * @param data, Data to be sent.
mbedAustin 11:cada08fc8a70 83 */
mbedAustin 11:cada08fc8a70 84 bool send_data(uint8_t *data_ptr,
mbedAustin 11:cada08fc8a70 85 uint16_t data_len,
mbedAustin 11:cada08fc8a70 86 sn_nsdl_addr_s *address_ptr);
mbedAustin 11:cada08fc8a70 87
mbedAustin 11:cada08fc8a70 88 /**
mbedAustin 11:cada08fc8a70 89 * @brief Listens for incoming data from remote server
mbedAustin 11:cada08fc8a70 90 * @return true if successful else false.
mbedAustin 11:cada08fc8a70 91 */
mbedAustin 11:cada08fc8a70 92 bool start_listening_for_data();
mbedAustin 11:cada08fc8a70 93
mbedAustin 11:cada08fc8a70 94 /**
mbedAustin 11:cada08fc8a70 95 * @brief Stops listening for incoming data
mbedAustin 11:cada08fc8a70 96 */
mbedAustin 11:cada08fc8a70 97 void stop_listening();
mbedAustin 11:cada08fc8a70 98
mbedAustin 11:cada08fc8a70 99 /**
mbedAustin 11:cada08fc8a70 100 * @brief send_to_socket Sends directly to socket. This is used by
mbedAustin 11:cada08fc8a70 101 * security classes to send after data has been encrypted.
mbedAustin 11:cada08fc8a70 102 * @param buf Buffer to send
mbedAustin 11:cada08fc8a70 103 * @param len Length of a buffer
mbedAustin 11:cada08fc8a70 104 * @return Number of bytes sent or -1 if failed
mbedAustin 11:cada08fc8a70 105 */
mbedAustin 11:cada08fc8a70 106 int send_to_socket(const unsigned char *buf, size_t len);
mbedAustin 11:cada08fc8a70 107
mbedAustin 11:cada08fc8a70 108 /**
mbedAustin 11:cada08fc8a70 109 * @brief receive_from_socket Receives directly from a socket. This
mbedAustin 11:cada08fc8a70 110 * is used by security classes to receive raw data to be decrypted.
mbedAustin 11:cada08fc8a70 111 * @param buf Buffer to send
mbedAustin 11:cada08fc8a70 112 * @param len Length of a buffer
mbedAustin 11:cada08fc8a70 113 * @return Number of bytes read or -1 if failed.
mbedAustin 11:cada08fc8a70 114 */
mbedAustin 11:cada08fc8a70 115 int receive_from_socket(unsigned char *buf, size_t len);
mbedAustin 11:cada08fc8a70 116
mbedAustin 11:cada08fc8a70 117 /**
mbedAustin 11:cada08fc8a70 118 * @brief Error handling for DTLS connectivity.
mbedAustin 11:cada08fc8a70 119 * @param error, Error code from TLS library
mbedAustin 11:cada08fc8a70 120 */
mbedAustin 11:cada08fc8a70 121 void handle_connection_error(int error);
mbedAustin 11:cada08fc8a70 122
mbedAustin 11:cada08fc8a70 123 private:
mbedAustin 11:cada08fc8a70 124 /**
mbedAustin 11:cada08fc8a70 125 * @brief Internal handler for recieving data
mbedAustin 11:cada08fc8a70 126 */
mbedAustin 11:cada08fc8a70 127 void listen_handler();
mbedAustin 11:cada08fc8a70 128
mbedAustin 11:cada08fc8a70 129 /**
mbedAustin 11:cada08fc8a70 130 * @brief Internal handlers for managing the ethernet driver
mbedAustin 11:cada08fc8a70 131 */
mbedAustin 11:cada08fc8a70 132 void recv_handler();
mbedAustin 11:cada08fc8a70 133 void send_handler();
mbedAustin 11:cada08fc8a70 134
mbedAustin 11:cada08fc8a70 135 private:
mbedAustin 11:cada08fc8a70 136 M2MConnectionHandler *_base;
mbedAustin 11:cada08fc8a70 137 M2MConnectionObserver &_observer;
mbedAustin 11:cada08fc8a70 138 M2MConnectionSecurity *_security_impl; //owned
mbedAustin 11:cada08fc8a70 139 bool _use_secure_connection;
mbedAustin 11:cada08fc8a70 140 String _server_address;
mbedAustin 11:cada08fc8a70 141 unsigned char _address_buffer[4];
mbedAustin 11:cada08fc8a70 142 M2MInterface::BindingMode _binding_mode;
mbedAustin 11:cada08fc8a70 143 M2MInterface::NetworkStack _network_stack;
mbedAustin 11:cada08fc8a70 144 M2MConnectionObserver::SocketAddress _address;
mbedAustin 11:cada08fc8a70 145 bool _resolved;
mbedAustin 11:cada08fc8a70 146 bool _is_handshaking;
mbedAustin 11:cada08fc8a70 147
mbedAustin 11:cada08fc8a70 148 Endpoint _endpoint;
mbedAustin 11:cada08fc8a70 149 UDPSocket _socket;
mbedAustin 11:cada08fc8a70 150 bool _listening;
mbedAustin 11:cada08fc8a70 151 rtos::Thread *_listen_thread;
mbedAustin 11:cada08fc8a70 152 unsigned char _listen_buffer[1024];
mbedAustin 11:cada08fc8a70 153
mbedAustin 11:cada08fc8a70 154 bool _running;
mbedAustin 11:cada08fc8a70 155 unsigned char _recv_buffer[1024];
mbedAustin 11:cada08fc8a70 156
mbedAustin 11:cada08fc8a70 157 rtos::Thread *_recv_thread;
mbedAustin 11:cada08fc8a70 158 rtos::Queue<std::string, 16> _recv_queue;
mbedAustin 11:cada08fc8a70 159 rtos::Thread *_send_thread;
mbedAustin 11:cada08fc8a70 160 rtos::Queue<std::string, 16> _send_queue;
mbedAustin 11:cada08fc8a70 161
mbedAustin 11:cada08fc8a70 162
mbedAustin 11:cada08fc8a70 163 friend class Test_M2MConnectionHandlerPimpl;
mbedAustin 11:cada08fc8a70 164 friend class Test_M2MConnectionHandlerPimpl_mbed;
mbedAustin 11:cada08fc8a70 165 friend class M2MConnection_TestObserver;
mbedAustin 11:cada08fc8a70 166 };
mbedAustin 11:cada08fc8a70 167
mbedAustin 11:cada08fc8a70 168 #endif //M2M_CONNECTION_HANDLER_PIMPL_H__
mbedAustin 11:cada08fc8a70 169
mbedAustin 11:cada08fc8a70 170