mirror of https://github.com/ARMmbed/mbed-os.git
				
				
				
			C++11-ify virtualisation in netsocket
Use `override` and `final` where appropriate, and eliminate unnecessary `virtual`. Some other C++11 simplifications. Reduces code size.pull/12487/head
							parent
							
								
									695e872202
								
							
						
					
					
						commit
						d8d35eda9f
					
				| 
						 | 
				
			
			@ -21,6 +21,7 @@ set(unittest-test-sources
 | 
			
		|||
  stubs/Mutex_stub.cpp
 | 
			
		||||
  stubs/CellularContext_stub.cpp
 | 
			
		||||
  stubs/mbed_assert_stub.cpp
 | 
			
		||||
  stubs/mbed_atomic_stub.c
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
set(unittest-test-flags
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -114,11 +114,14 @@ protected:
 | 
			
		|||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
/* Test is invalid, as it's working on a PPPInterface pointer rather than a NetworkInterface pointer. */
 | 
			
		||||
/* NetworkInterface does not yet offer the pppInterface method for a dynamic cast */
 | 
			
		||||
TEST_F(TestPPPInterface, constructor_default)
 | 
			
		||||
{
 | 
			
		||||
    EXPECT_TRUE(iface);
 | 
			
		||||
    // Test that this clas presents itself correctly
 | 
			
		||||
    EXPECT_NE(nullptr, iface->pppInterface());
 | 
			
		||||
    EXPECT_EQ(iface,   iface->pppInterface());
 | 
			
		||||
 | 
			
		||||
    EXPECT_EQ(nullptr, iface->emacInterface());
 | 
			
		||||
    EXPECT_EQ(nullptr, iface->ethInterface());
 | 
			
		||||
| 
						 | 
				
			
			@ -126,6 +129,7 @@ TEST_F(TestPPPInterface, constructor_default)
 | 
			
		|||
    EXPECT_EQ(nullptr, iface->cellularInterface());
 | 
			
		||||
    EXPECT_EQ(nullptr, iface->meshInterface());
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
TEST_F(TestPPPInterface, connect)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -80,13 +80,13 @@ public:
 | 
			
		|||
     *
 | 
			
		||||
     *  @return         NSAPI_ERROR_OK on success, or negative error code on failure.
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t connect() = 0;
 | 
			
		||||
    nsapi_error_t connect() override = 0;
 | 
			
		||||
 | 
			
		||||
    /** Stop the interface.
 | 
			
		||||
     *
 | 
			
		||||
     *  @return         NSAPI_ERROR_OK on success, or error code on failure.
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t disconnect() = 0;
 | 
			
		||||
    nsapi_error_t disconnect() override = 0;
 | 
			
		||||
 | 
			
		||||
    /** Check if the connection is currently established.
 | 
			
		||||
     *
 | 
			
		||||
| 
						 | 
				
			
			@ -96,11 +96,11 @@ public:
 | 
			
		|||
    virtual bool is_connected() = 0;
 | 
			
		||||
 | 
			
		||||
    /** @copydoc NetworkInterface::get_ip_address */
 | 
			
		||||
    virtual nsapi_error_t get_ip_address(SocketAddress *address) = 0;
 | 
			
		||||
    nsapi_error_t get_ip_address(SocketAddress *address) override = 0;
 | 
			
		||||
 | 
			
		||||
    /** @copydoc NetworkInterface::cellularInterface
 | 
			
		||||
     */
 | 
			
		||||
    virtual CellularInterface *cellularInterface()
 | 
			
		||||
    CellularInterface *cellularInterface() final
 | 
			
		||||
    {
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -130,7 +130,7 @@ public:
 | 
			
		|||
     * NetworkInterface::get_default_instance() (see nsapi JSON
 | 
			
		||||
     * configuration).
 | 
			
		||||
     */
 | 
			
		||||
    virtual void set_default_parameters();
 | 
			
		||||
    void set_default_parameters() override;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // CELLULAR_INTERFACE_H_
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,15 +23,11 @@ using namespace mbed;
 | 
			
		|||
 | 
			
		||||
ControlPlane_netif *CellularNonIPSocket::_cp_netif;
 | 
			
		||||
 | 
			
		||||
CellularNonIPSocket::CellularNonIPSocket()
 | 
			
		||||
    : _timeout(osWaitForever),
 | 
			
		||||
      _readers(0), _writers(0), _pending(0),
 | 
			
		||||
      _opened(false)
 | 
			
		||||
{}
 | 
			
		||||
CellularNonIPSocket::CellularNonIPSocket() = default;
 | 
			
		||||
 | 
			
		||||
nsapi_error_t CellularNonIPSocket::open(CellularContext *cellular_context)
 | 
			
		||||
{
 | 
			
		||||
    if (cellular_context == NULL) {
 | 
			
		||||
    if (cellular_context == nullptr) {
 | 
			
		||||
        return NSAPI_ERROR_PARAMETER;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -47,7 +43,7 @@ nsapi_error_t CellularNonIPSocket::open(ControlPlane_netif *cp_netif)
 | 
			
		|||
{
 | 
			
		||||
    _lock.lock();
 | 
			
		||||
 | 
			
		||||
    if (cp_netif == NULL || _opened) {
 | 
			
		||||
    if (cp_netif == nullptr || _opened) {
 | 
			
		||||
        _lock.unlock();
 | 
			
		||||
        return NSAPI_ERROR_PARAMETER;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -76,9 +72,9 @@ nsapi_error_t CellularNonIPSocket::close()
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    // Just in case - tell the stack not to callback any more, then remove this socket.
 | 
			
		||||
    _cp_netif->attach(0, 0);
 | 
			
		||||
    _cp_netif->attach(nullptr, nullptr);
 | 
			
		||||
    _opened = false;
 | 
			
		||||
    _cp_netif = 0; // Invalidate the cp_netif pointer - otherwise open() fails.
 | 
			
		||||
    _cp_netif = nullptr; // Invalidate the cp_netif pointer - otherwise open() fails.
 | 
			
		||||
 | 
			
		||||
    // Wakeup anything in a blocking operation
 | 
			
		||||
    // on this socket
 | 
			
		||||
| 
						 | 
				
			
			@ -112,7 +108,7 @@ nsapi_size_or_error_t CellularNonIPSocket::send(const void *data, nsapi_size_t s
 | 
			
		|||
            break;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        _pending = 0;
 | 
			
		||||
        core_util_atomic_flag_clear(&_pending);
 | 
			
		||||
        nsapi_size_or_error_t sent = _cp_netif->send(data, size);
 | 
			
		||||
        if ((0 == _timeout) || (NSAPI_ERROR_WOULD_BLOCK != sent)) {
 | 
			
		||||
            ret = sent;
 | 
			
		||||
| 
						 | 
				
			
			@ -154,7 +150,7 @@ nsapi_size_or_error_t CellularNonIPSocket::recv(void *buffer, nsapi_size_t size)
 | 
			
		|||
            break;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        _pending = 0;
 | 
			
		||||
        core_util_atomic_flag_clear(&_pending);
 | 
			
		||||
        nsapi_size_or_error_t recv = _cp_netif->recv(buffer, size);
 | 
			
		||||
 | 
			
		||||
        // Non-blocking sockets always return. Blocking only returns when success or errors other than WOULD_BLOCK
 | 
			
		||||
| 
						 | 
				
			
			@ -210,8 +206,7 @@ void CellularNonIPSocket::event()
 | 
			
		|||
{
 | 
			
		||||
    _event_flag.set(READ_FLAG | WRITE_FLAG);
 | 
			
		||||
 | 
			
		||||
    _pending += 1;
 | 
			
		||||
    if (_callback && _pending == 1) {
 | 
			
		||||
    if (_callback && !core_util_atomic_flag_test_and_set(&_pending)) {
 | 
			
		||||
        _callback();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -233,7 +228,7 @@ Socket *CellularNonIPSocket::accept(nsapi_error_t *error)
 | 
			
		|||
    if (error) {
 | 
			
		||||
        *error = NSAPI_ERROR_UNSUPPORTED;
 | 
			
		||||
    }
 | 
			
		||||
    return NULL;
 | 
			
		||||
    return nullptr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
nsapi_error_t CellularNonIPSocket::listen(int backlog)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,6 +21,7 @@
 | 
			
		|||
#include "rtos/Mutex.h"
 | 
			
		||||
#include "rtos/EventFlags.h"
 | 
			
		||||
#include "Callback.h"
 | 
			
		||||
#include "mbed_atomic.h"
 | 
			
		||||
#include "mbed_toolchain.h"
 | 
			
		||||
#include "ControlPlane_netif.h"
 | 
			
		||||
#include "CellularContext.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -40,7 +41,7 @@ public:
 | 
			
		|||
    *
 | 
			
		||||
    *  @note Closes socket if it's still open.
 | 
			
		||||
    */
 | 
			
		||||
    virtual ~CellularNonIPSocket();
 | 
			
		||||
    ~CellularNonIPSocket() override;
 | 
			
		||||
 | 
			
		||||
    /** Creates a socket.
 | 
			
		||||
    */
 | 
			
		||||
| 
						 | 
				
			
			@ -54,7 +55,7 @@ public:
 | 
			
		|||
    *  @return                     NSAPI_ERROR_OK on success
 | 
			
		||||
    *                              NSAPI_ERROR_PARAMETER otherwise
 | 
			
		||||
    */
 | 
			
		||||
    virtual nsapi_error_t open(mbed::CellularContext *cellular_context);
 | 
			
		||||
    nsapi_error_t open(mbed::CellularContext *cellular_context);
 | 
			
		||||
 | 
			
		||||
    /** Opens a socket that will use the given control plane interface for data delivery.
 | 
			
		||||
    *   Attaches the event as callback to the control plane interface.
 | 
			
		||||
| 
						 | 
				
			
			@ -64,7 +65,7 @@ public:
 | 
			
		|||
    *                      NSAPI_ERROR_PARAMETER otherwise
 | 
			
		||||
    *
 | 
			
		||||
    */
 | 
			
		||||
    virtual nsapi_error_t open(mbed::ControlPlane_netif *cp_netif);
 | 
			
		||||
    nsapi_error_t open(mbed::ControlPlane_netif *cp_netif);
 | 
			
		||||
 | 
			
		||||
    /** Closes socket
 | 
			
		||||
    *
 | 
			
		||||
| 
						 | 
				
			
			@ -72,7 +73,7 @@ public:
 | 
			
		|||
    *                  NSAPI_ERROR_NO_SOCKET otherwise
 | 
			
		||||
    */
 | 
			
		||||
 | 
			
		||||
    virtual nsapi_error_t close();
 | 
			
		||||
    nsapi_error_t close() override;
 | 
			
		||||
 | 
			
		||||
    /** Send data over a control plane cellular context.
 | 
			
		||||
    *
 | 
			
		||||
| 
						 | 
				
			
			@ -85,7 +86,7 @@ public:
 | 
			
		|||
    *  @return         Number of sent bytes on success, negative error
 | 
			
		||||
    *                  code on failure.
 | 
			
		||||
    */
 | 
			
		||||
    virtual nsapi_size_or_error_t send(const void *data, nsapi_size_t size);
 | 
			
		||||
    nsapi_size_or_error_t send(const void *data, nsapi_size_t size) override;
 | 
			
		||||
 | 
			
		||||
    /** Receive data from a socket.
 | 
			
		||||
    *
 | 
			
		||||
| 
						 | 
				
			
			@ -98,52 +99,52 @@ public:
 | 
			
		|||
    *  @return         Number of received bytes on success, negative error
 | 
			
		||||
    *                  code on failure.
 | 
			
		||||
    */
 | 
			
		||||
    virtual nsapi_size_or_error_t recv(void *data, nsapi_size_t size);
 | 
			
		||||
    nsapi_size_or_error_t recv(void *data, nsapi_size_t size) override;
 | 
			
		||||
 | 
			
		||||
    /** @copydoc Socket::set_blocking
 | 
			
		||||
     */
 | 
			
		||||
    virtual void set_blocking(bool blocking);
 | 
			
		||||
    void set_blocking(bool blocking) override;
 | 
			
		||||
 | 
			
		||||
    /** @copydoc Socket::set_timeout
 | 
			
		||||
     */
 | 
			
		||||
    virtual void set_timeout(int timeout);
 | 
			
		||||
    void set_timeout(int timeout) override;
 | 
			
		||||
 | 
			
		||||
    /** @copydoc Socket::sigio
 | 
			
		||||
     */
 | 
			
		||||
    virtual void sigio(mbed::Callback<void()> func);
 | 
			
		||||
    void sigio(mbed::Callback<void()> func) override;
 | 
			
		||||
 | 
			
		||||
    /// NOT APPLICABLE
 | 
			
		||||
    virtual nsapi_error_t connect(const SocketAddress &address);
 | 
			
		||||
    nsapi_error_t connect(const SocketAddress &address) override;
 | 
			
		||||
    /// NOT APPLICABLE
 | 
			
		||||
    virtual Socket *accept(nsapi_error_t *error = NULL);
 | 
			
		||||
    Socket *accept(nsapi_error_t *error = NULL) override;
 | 
			
		||||
    /// NOT APPLICABLE
 | 
			
		||||
    virtual nsapi_error_t listen(int backlog = 1);
 | 
			
		||||
    nsapi_error_t listen(int backlog = 1) override;
 | 
			
		||||
    /// NOT APPLICABLE
 | 
			
		||||
    virtual nsapi_error_t setsockopt(int level, int optname, const void *optval, unsigned optlen);
 | 
			
		||||
    nsapi_error_t setsockopt(int level, int optname, const void *optval, unsigned optlen) override;
 | 
			
		||||
    /// NOT APPLICABLE
 | 
			
		||||
    virtual nsapi_error_t getsockopt(int level, int optname, void *optval, unsigned *optlen);
 | 
			
		||||
    nsapi_error_t getsockopt(int level, int optname, void *optval, unsigned *optlen) override;
 | 
			
		||||
    /// NOT APPLICABLE
 | 
			
		||||
    virtual nsapi_error_t getpeername(SocketAddress *address);
 | 
			
		||||
    nsapi_error_t getpeername(SocketAddress *address) override;
 | 
			
		||||
    /// NOT APPLICABLE
 | 
			
		||||
    virtual nsapi_size_or_error_t sendto(const SocketAddress &address,
 | 
			
		||||
                                         const void *data, nsapi_size_t size);
 | 
			
		||||
    nsapi_size_or_error_t sendto(const SocketAddress &address,
 | 
			
		||||
                                 const void *data, nsapi_size_t size) override;
 | 
			
		||||
    /// NOT APPLICABLE
 | 
			
		||||
    virtual nsapi_size_or_error_t recvfrom(SocketAddress *address,
 | 
			
		||||
                                           void *data, nsapi_size_t size);
 | 
			
		||||
    nsapi_size_or_error_t recvfrom(SocketAddress *address,
 | 
			
		||||
                                   void *data, nsapi_size_t size) override;
 | 
			
		||||
    /// NOT APPLICABLE
 | 
			
		||||
    virtual nsapi_error_t bind(const SocketAddress &address);
 | 
			
		||||
    nsapi_error_t bind(const SocketAddress &address) override;
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    virtual void event();
 | 
			
		||||
    void event();
 | 
			
		||||
 | 
			
		||||
    uint32_t _timeout;
 | 
			
		||||
    uint32_t _timeout = osWaitForever;
 | 
			
		||||
    mbed::Callback<void()> _event;
 | 
			
		||||
    mbed::Callback<void()> _callback;
 | 
			
		||||
    rtos::EventFlags _event_flag;
 | 
			
		||||
    rtos::Mutex _lock;
 | 
			
		||||
    uint8_t _readers;
 | 
			
		||||
    uint8_t _writers;
 | 
			
		||||
    volatile unsigned _pending;
 | 
			
		||||
    uint8_t _readers = 0;
 | 
			
		||||
    uint8_t _writers = 0;
 | 
			
		||||
    core_util_atomic_flag _pending = CORE_UTIL_ATOMIC_FLAG_INIT;
 | 
			
		||||
 | 
			
		||||
    // Event flags
 | 
			
		||||
    static const int READ_FLAG     = 0x1u;
 | 
			
		||||
| 
						 | 
				
			
			@ -151,7 +152,7 @@ protected:
 | 
			
		|||
    static const int FINISHED_FLAG = 0x3u;
 | 
			
		||||
 | 
			
		||||
    static ControlPlane_netif *_cp_netif; // there can be only one Non-IP socket
 | 
			
		||||
    bool _opened;
 | 
			
		||||
    bool _opened = false;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/** @}*/
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -42,8 +42,7 @@ namespace mbed {
 | 
			
		|||
 */
 | 
			
		||||
class ControlPlane_netif {
 | 
			
		||||
public:
 | 
			
		||||
    ControlPlane_netif() {}
 | 
			
		||||
    virtual ~ControlPlane_netif() {}
 | 
			
		||||
    virtual ~ControlPlane_netif() = default;
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    friend class CellularNonIPSocket;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -140,6 +140,9 @@ public:
 | 
			
		|||
     *  @return         NSAPI_ERROR_OK on success, negative error code on failure.
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t add_dns_server(const SocketAddress &address, const char *interface_name = NULL) = 0;
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    ~DNS() = default;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -46,7 +46,7 @@ public:
 | 
			
		|||
 | 
			
		||||
    /** Destroy the DTLSSocket and closes the transport.
 | 
			
		||||
     */
 | 
			
		||||
    virtual ~DTLSSocket();
 | 
			
		||||
    ~DTLSSocket() override;
 | 
			
		||||
 | 
			
		||||
    /** Create a socket on a network interface.
 | 
			
		||||
     *
 | 
			
		||||
| 
						 | 
				
			
			@ -74,7 +74,7 @@ public:
 | 
			
		|||
     *  @return         NSAPI_ERROR_OK on success, negative error code on failure.
 | 
			
		||||
     *                  See @ref UDPSocket::open.
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t open(NetworkStack *stack)
 | 
			
		||||
    nsapi_error_t open(NetworkStack *stack)
 | 
			
		||||
    {
 | 
			
		||||
        return _udp_socket.open(stack);
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,10 +24,7 @@
 | 
			
		|||
#if defined(MBEDTLS_SSL_CLI_C)
 | 
			
		||||
 | 
			
		||||
DTLSSocketWrapper::DTLSSocketWrapper(Socket *transport, const char *hostname, control_transport control) :
 | 
			
		||||
    TLSSocketWrapper(transport, hostname, control),
 | 
			
		||||
    _int_ms_tick(0),
 | 
			
		||||
    _timer_event_id(0),
 | 
			
		||||
    _timer_expired(false)
 | 
			
		||||
    TLSSocketWrapper(transport, hostname, control)
 | 
			
		||||
{
 | 
			
		||||
    mbedtls_ssl_conf_transport(get_ssl_config(), MBEDTLS_SSL_TRANSPORT_DATAGRAM);
 | 
			
		||||
    mbedtls_ssl_set_timer_cb(get_ssl_context(), this, timing_set_delay, timing_get_delay);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -43,9 +43,9 @@ private:
 | 
			
		|||
    static void timing_set_delay(void *ctx, uint32_t int_ms, uint32_t fin_ms);
 | 
			
		||||
    static int timing_get_delay(void *ctx);
 | 
			
		||||
    void timer_event();
 | 
			
		||||
    uint64_t _int_ms_tick;
 | 
			
		||||
    int _timer_event_id;
 | 
			
		||||
    bool _timer_expired : 1;
 | 
			
		||||
    uint64_t _int_ms_tick = 0;
 | 
			
		||||
    int _timer_event_id = 0;
 | 
			
		||||
    bool _timer_expired = false;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,13 +21,7 @@ using namespace mbed;
 | 
			
		|||
/* Interface implementation */
 | 
			
		||||
EMACInterface::EMACInterface(EMAC &emac, OnboardNetworkStack &stack) :
 | 
			
		||||
    _emac(emac),
 | 
			
		||||
    _stack(stack),
 | 
			
		||||
    _interface(NULL),
 | 
			
		||||
    _dhcp(true),
 | 
			
		||||
    _blocking(true),
 | 
			
		||||
    _ip_address(),
 | 
			
		||||
    _netmask(),
 | 
			
		||||
    _gateway()
 | 
			
		||||
    _stack(stack)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -64,7 +64,7 @@ public:
 | 
			
		|||
     *  @param gateway     SocketAddress representation of the local gateway
 | 
			
		||||
     *  @return            0 on success, negative error code on failure
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t set_network(const SocketAddress &ip_address, const SocketAddress &netmask, const SocketAddress &gateway);
 | 
			
		||||
    nsapi_error_t set_network(const SocketAddress &ip_address, const SocketAddress &netmask, const SocketAddress &gateway) override;
 | 
			
		||||
 | 
			
		||||
    /** Enable or disable DHCP on the network
 | 
			
		||||
     *
 | 
			
		||||
| 
						 | 
				
			
			@ -74,43 +74,43 @@ public:
 | 
			
		|||
     *  @retval         NSAPI_ERROR_OK on success.
 | 
			
		||||
     *  @retval         NSAPI_ERROR_UNSUPPORTED if operation is not supported.
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t set_dhcp(bool dhcp);
 | 
			
		||||
    nsapi_error_t set_dhcp(bool dhcp) override;
 | 
			
		||||
 | 
			
		||||
    /** @copydoc NetworkInterface::connect */
 | 
			
		||||
    virtual nsapi_error_t connect();
 | 
			
		||||
    nsapi_error_t connect() override;
 | 
			
		||||
 | 
			
		||||
    /** @copydoc NetworkInterface::disconnect */
 | 
			
		||||
    virtual nsapi_error_t disconnect();
 | 
			
		||||
    nsapi_error_t disconnect() override;
 | 
			
		||||
 | 
			
		||||
    /** @copydoc NetworkInterface::get_mac_address */
 | 
			
		||||
    virtual const char *get_mac_address();
 | 
			
		||||
    const char *get_mac_address() override;
 | 
			
		||||
 | 
			
		||||
    /** @copydoc NetworkInterface::get_ip_address */
 | 
			
		||||
    virtual nsapi_error_t get_ip_address(SocketAddress *address);
 | 
			
		||||
    nsapi_error_t get_ip_address(SocketAddress *address) override;
 | 
			
		||||
 | 
			
		||||
    /** @copydoc NetworkInterface::get_ipv6_link_local_address */
 | 
			
		||||
    virtual nsapi_error_t get_ipv6_link_local_address(SocketAddress *address);
 | 
			
		||||
    nsapi_error_t get_ipv6_link_local_address(SocketAddress *address) override;
 | 
			
		||||
 | 
			
		||||
    /** @copydoc NetworkInterface::get_netmask */
 | 
			
		||||
    virtual nsapi_error_t get_netmask(SocketAddress *address);
 | 
			
		||||
    nsapi_error_t get_netmask(SocketAddress *address) override;
 | 
			
		||||
 | 
			
		||||
    /** @copydoc NetworkInterface::get_gateway */
 | 
			
		||||
    virtual nsapi_error_t get_gateway(SocketAddress *address);
 | 
			
		||||
    nsapi_error_t get_gateway(SocketAddress *address) override;
 | 
			
		||||
 | 
			
		||||
    /** @copydoc NetworkInterface::get_interface_name */
 | 
			
		||||
    virtual char *get_interface_name(char *interface_name);
 | 
			
		||||
    char *get_interface_name(char *interface_name) override;
 | 
			
		||||
 | 
			
		||||
    /** @copydoc NetworkInterface::set_as_default */
 | 
			
		||||
    virtual void set_as_default();
 | 
			
		||||
    void set_as_default() override;
 | 
			
		||||
 | 
			
		||||
    /** @copydoc NetworkInterface::attach */
 | 
			
		||||
    virtual void attach(mbed::Callback<void(nsapi_event_t, intptr_t)> status_cb);
 | 
			
		||||
    void attach(mbed::Callback<void(nsapi_event_t, intptr_t)> status_cb) override;
 | 
			
		||||
 | 
			
		||||
    /** @copydoc NetworkInterface::get_connection_status */
 | 
			
		||||
    virtual nsapi_connection_status_t get_connection_status() const;
 | 
			
		||||
    nsapi_connection_status_t get_connection_status() const override;
 | 
			
		||||
 | 
			
		||||
    /** @copydoc NetworkInterface::set_blocking */
 | 
			
		||||
    virtual nsapi_error_t set_blocking(bool blocking);
 | 
			
		||||
    nsapi_error_t set_blocking(bool blocking) override;
 | 
			
		||||
 | 
			
		||||
    /** Provide access to the EMAC
 | 
			
		||||
     *
 | 
			
		||||
| 
						 | 
				
			
			@ -125,7 +125,7 @@ public:
 | 
			
		|||
        return _emac;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    virtual EMACInterface *emacInterface()
 | 
			
		||||
    EMACInterface *emacInterface() final
 | 
			
		||||
    {
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -135,17 +135,17 @@ protected:
 | 
			
		|||
     *
 | 
			
		||||
     *  @return The underlying network stack
 | 
			
		||||
     */
 | 
			
		||||
    virtual NetworkStack *get_stack();
 | 
			
		||||
    NetworkStack *get_stack() final;
 | 
			
		||||
 | 
			
		||||
    EMAC &_emac;
 | 
			
		||||
    OnboardNetworkStack &_stack;
 | 
			
		||||
    OnboardNetworkStack::Interface *_interface;
 | 
			
		||||
    bool _dhcp;
 | 
			
		||||
    bool _blocking;
 | 
			
		||||
    OnboardNetworkStack::Interface *_interface = nullptr;
 | 
			
		||||
    bool _dhcp = true;
 | 
			
		||||
    bool _blocking = true;
 | 
			
		||||
    char _mac_address[NSAPI_MAC_SIZE];
 | 
			
		||||
    char _ip_address[NSAPI_IPv6_SIZE];
 | 
			
		||||
    char _netmask[NSAPI_IPv4_SIZE];
 | 
			
		||||
    char _gateway[NSAPI_IPv4_SIZE];
 | 
			
		||||
    char _ip_address[NSAPI_IPv6_SIZE] {};
 | 
			
		||||
    char _netmask[NSAPI_IPv4_SIZE] {};
 | 
			
		||||
    char _gateway[NSAPI_IPv4_SIZE] {};
 | 
			
		||||
    mbed::Callback<void(nsapi_event_t, intptr_t)> _connection_status_cb;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -31,7 +31,7 @@ public:
 | 
			
		|||
 | 
			
		||||
    /** @copydoc NetworkInterface::ethInterface
 | 
			
		||||
     */
 | 
			
		||||
    virtual EthInterface *ethInterface()
 | 
			
		||||
    EthInterface *ethInterface() final
 | 
			
		||||
    {
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,8 +15,6 @@
 | 
			
		|||
 */
 | 
			
		||||
 | 
			
		||||
#include "ICMPSocket.h"
 | 
			
		||||
#include "Timer.h"
 | 
			
		||||
#include "mbed_assert.h"
 | 
			
		||||
 | 
			
		||||
ICMPSocket::ICMPSocket()
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -39,7 +39,7 @@ public:
 | 
			
		|||
#if !defined(DOXYGEN_ONLY)
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    virtual nsapi_protocol_t get_proto();
 | 
			
		||||
    nsapi_protocol_t get_proto() override;
 | 
			
		||||
 | 
			
		||||
#endif //!defined(DOXYGEN_ONLY)
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -44,8 +44,8 @@ public:
 | 
			
		|||
     *  @retval         int Other negative error codes for stack-related failures.
 | 
			
		||||
     *                  See \ref NetworkStack::socket_send.
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_size_or_error_t sendto(const SocketAddress &address,
 | 
			
		||||
                                         const void *data, nsapi_size_t size);
 | 
			
		||||
    nsapi_size_or_error_t sendto(const SocketAddress &address,
 | 
			
		||||
                                 const void *data, nsapi_size_t size) override;
 | 
			
		||||
 | 
			
		||||
    /** Receive a datagram and store the source address in address if it's not NULL.
 | 
			
		||||
     *
 | 
			
		||||
| 
						 | 
				
			
			@ -70,8 +70,8 @@ public:
 | 
			
		|||
     *  @retval         int Other negative error codes for stack-related failures.
 | 
			
		||||
     *                  See \ref NetworkStack::socket_recv.
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_size_or_error_t recvfrom(SocketAddress *address,
 | 
			
		||||
                                           void *data, nsapi_size_t size);
 | 
			
		||||
    nsapi_size_or_error_t recvfrom(SocketAddress *address,
 | 
			
		||||
                                   void *data, nsapi_size_t size) override;
 | 
			
		||||
 | 
			
		||||
    /** Set the remote address for next send() call and filtering
 | 
			
		||||
     *  of incoming packets. To reset the address, zero initialized
 | 
			
		||||
| 
						 | 
				
			
			@ -80,7 +80,7 @@ public:
 | 
			
		|||
     *  @param address  The SocketAddress of the remote host.
 | 
			
		||||
     *  @return         NSAPI_ERROR_OK on success.
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t connect(const SocketAddress &address);
 | 
			
		||||
    nsapi_error_t connect(const SocketAddress &address) override;
 | 
			
		||||
 | 
			
		||||
    /** Send a raw data to connected remote address.
 | 
			
		||||
     *
 | 
			
		||||
| 
						 | 
				
			
			@ -100,7 +100,7 @@ public:
 | 
			
		|||
     *  @retval         int Other negative error codes for stack-related failures.
 | 
			
		||||
     *                  See \ref NetworkStack::socket_send.
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_size_or_error_t send(const void *data, nsapi_size_t size);
 | 
			
		||||
    nsapi_size_or_error_t send(const void *data, nsapi_size_t size) override;
 | 
			
		||||
 | 
			
		||||
    /** Receive data from a socket.
 | 
			
		||||
     *
 | 
			
		||||
| 
						 | 
				
			
			@ -121,21 +121,21 @@ public:
 | 
			
		|||
     *  @retval         int Other negative error codes for stack-related failures.
 | 
			
		||||
     *                  See \ref NetworkStack::socket_recv.
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_size_or_error_t recv(void *data, nsapi_size_t size);
 | 
			
		||||
    nsapi_size_or_error_t recv(void *data, nsapi_size_t size) override;
 | 
			
		||||
 | 
			
		||||
    /** Not implemented for InternetDatagramSocket.
 | 
			
		||||
     *
 | 
			
		||||
     *  @param error      Not used.
 | 
			
		||||
     *  @return           NSAPI_ERROR_UNSUPPORTED
 | 
			
		||||
     */
 | 
			
		||||
    virtual Socket *accept(nsapi_error_t *error = NULL);
 | 
			
		||||
    Socket *accept(nsapi_error_t *error = nullptr) override;
 | 
			
		||||
 | 
			
		||||
    /** Not implemented for InternetDatagramSocket.
 | 
			
		||||
     *
 | 
			
		||||
     *  @param backlog    Not used.
 | 
			
		||||
     *  @return           NSAPI_ERROR_UNSUPPORTED
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t listen(int backlog = 1);
 | 
			
		||||
    nsapi_error_t listen(int backlog = 1) override;
 | 
			
		||||
#if !defined(DOXYGEN_ONLY)
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,12 +21,7 @@
 | 
			
		|||
using namespace mbed;
 | 
			
		||||
 | 
			
		||||
InternetSocket::InternetSocket()
 | 
			
		||||
    : _stack(0), _socket(0), _timeout(osWaitForever),
 | 
			
		||||
      _remote_peer(),
 | 
			
		||||
      _readers(0), _writers(0),
 | 
			
		||||
      _factory_allocated(false)
 | 
			
		||||
{
 | 
			
		||||
    core_util_atomic_flag_clear(&_pending);
 | 
			
		||||
    _socket_stats.stats_new_socket_entry(this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -55,7 +50,7 @@ nsapi_error_t InternetSocket::open(NetworkStack *stack)
 | 
			
		|||
    _socket_stats.stats_update_socket_state(this, SOCK_OPEN);
 | 
			
		||||
    _socket = socket;
 | 
			
		||||
    _event = callback(this, &InternetSocket::event);
 | 
			
		||||
    _stack->socket_attach(_socket, Callback<void()>::thunk, &_event);
 | 
			
		||||
    _stack->socket_attach(_socket, _event.thunk, &_event);
 | 
			
		||||
    _interface_name[0] = '\0';
 | 
			
		||||
    _lock.unlock();
 | 
			
		||||
    return NSAPI_ERROR_OK;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -38,7 +38,7 @@ public:
 | 
			
		|||
     *
 | 
			
		||||
     *  @note Closes socket if it's still open.
 | 
			
		||||
     */
 | 
			
		||||
    virtual ~InternetSocket();
 | 
			
		||||
    ~InternetSocket() override;
 | 
			
		||||
 | 
			
		||||
    /** Open a network socket on the network stack of the given
 | 
			
		||||
     *  network interface.
 | 
			
		||||
| 
						 | 
				
			
			@ -70,7 +70,7 @@ public:
 | 
			
		|||
     *  @retval         int negative error codes for stack-related failures.
 | 
			
		||||
     *                  See @ref NetworkStack::socket_close.
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t close();
 | 
			
		||||
    nsapi_error_t close() override;
 | 
			
		||||
 | 
			
		||||
    /** Subscribe to an IP multicast group.
 | 
			
		||||
     *
 | 
			
		||||
| 
						 | 
				
			
			@ -98,31 +98,31 @@ public:
 | 
			
		|||
 | 
			
		||||
    /** @copydoc Socket::bind
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t bind(const SocketAddress &address);
 | 
			
		||||
    nsapi_error_t bind(const SocketAddress &address) override;
 | 
			
		||||
 | 
			
		||||
    /** @copydoc Socket::set_blocking
 | 
			
		||||
     */
 | 
			
		||||
    virtual void set_blocking(bool blocking);
 | 
			
		||||
    void set_blocking(bool blocking) override;
 | 
			
		||||
 | 
			
		||||
    /** @copydoc Socket::set_timeout
 | 
			
		||||
     */
 | 
			
		||||
    virtual void set_timeout(int timeout);
 | 
			
		||||
    void set_timeout(int timeout) override;
 | 
			
		||||
 | 
			
		||||
    /** @copydoc Socket::setsockopt
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t setsockopt(int level, int optname, const void *optval, unsigned optlen);
 | 
			
		||||
    nsapi_error_t setsockopt(int level, int optname, const void *optval, unsigned optlen) override;
 | 
			
		||||
 | 
			
		||||
    /** @copydoc Socket::getsockopt
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t getsockopt(int level, int optname, void *optval, unsigned *optlen);
 | 
			
		||||
    nsapi_error_t getsockopt(int level, int optname, void *optval, unsigned *optlen) override;
 | 
			
		||||
 | 
			
		||||
    /** @copydoc Socket::sigio
 | 
			
		||||
     */
 | 
			
		||||
    virtual void sigio(mbed::Callback<void()> func);
 | 
			
		||||
    void sigio(mbed::Callback<void()> func) override;
 | 
			
		||||
 | 
			
		||||
    /** @copydoc Socket::getpeername
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t getpeername(SocketAddress *address);
 | 
			
		||||
    nsapi_error_t getpeername(SocketAddress *address) override;
 | 
			
		||||
 | 
			
		||||
    /** Register a callback on state change of the socket.
 | 
			
		||||
     *
 | 
			
		||||
| 
						 | 
				
			
			@ -157,21 +157,21 @@ public:
 | 
			
		|||
protected:
 | 
			
		||||
    InternetSocket();
 | 
			
		||||
    virtual nsapi_protocol_t get_proto() = 0;
 | 
			
		||||
    virtual void event();
 | 
			
		||||
    void event();
 | 
			
		||||
    int modify_multicast_group(const SocketAddress &address, nsapi_socket_option_t socketopt);
 | 
			
		||||
    char _interface_name[NSAPI_INTERFACE_NAME_MAX_SIZE];
 | 
			
		||||
    NetworkStack *_stack;
 | 
			
		||||
    nsapi_socket_t _socket;
 | 
			
		||||
    uint32_t _timeout;
 | 
			
		||||
    NetworkStack *_stack = nullptr;
 | 
			
		||||
    nsapi_socket_t _socket = nullptr;
 | 
			
		||||
    uint32_t _timeout = osWaitForever;
 | 
			
		||||
    mbed::Callback<void()> _event;
 | 
			
		||||
    mbed::Callback<void()> _callback;
 | 
			
		||||
    rtos::EventFlags _event_flag;
 | 
			
		||||
    rtos::Mutex _lock;
 | 
			
		||||
    SocketAddress _remote_peer;
 | 
			
		||||
    uint8_t _readers;
 | 
			
		||||
    uint8_t _writers;
 | 
			
		||||
    core_util_atomic_flag _pending;
 | 
			
		||||
    bool _factory_allocated;
 | 
			
		||||
    uint8_t _readers = 0;
 | 
			
		||||
    uint8_t _writers = 0;
 | 
			
		||||
    core_util_atomic_flag _pending = CORE_UTIL_ATOMIC_FLAG_INIT;
 | 
			
		||||
    bool _factory_allocated = false;
 | 
			
		||||
 | 
			
		||||
    // Event flags
 | 
			
		||||
    static const int READ_FLAG     = 0x1u;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,13 +24,7 @@ using namespace mbed;
 | 
			
		|||
/* Interface implementation */
 | 
			
		||||
L3IPInterface::L3IPInterface(L3IP &l3ip, OnboardNetworkStack &stack) :
 | 
			
		||||
    _l3ip(l3ip),
 | 
			
		||||
    _stack(stack),
 | 
			
		||||
    _interface(NULL),
 | 
			
		||||
    _dhcp(true),
 | 
			
		||||
    _blocking(true),
 | 
			
		||||
    _ip_address(),
 | 
			
		||||
    _netmask(),
 | 
			
		||||
    _gateway()
 | 
			
		||||
    _stack(stack)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -49,7 +49,7 @@ public:
 | 
			
		|||
     */
 | 
			
		||||
    L3IPInterface(L3IP &l3ip = L3IP::get_default_instance(),
 | 
			
		||||
                  OnboardNetworkStack &stack = OnboardNetworkStack::get_default_instance());
 | 
			
		||||
    virtual ~L3IPInterface();
 | 
			
		||||
    ~L3IPInterface() override;
 | 
			
		||||
    /** Set a static IP address
 | 
			
		||||
     *
 | 
			
		||||
     *  Configures this network interface to use a static IP address.
 | 
			
		||||
| 
						 | 
				
			
			@ -61,7 +61,7 @@ public:
 | 
			
		|||
     *  @param gateway     SocketAddress representation of the local gateway
 | 
			
		||||
     *  @return            0 on success, negative error code on failure
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t set_network(const SocketAddress &ip_address, const SocketAddress &netmask, const SocketAddress &gateway);
 | 
			
		||||
    nsapi_error_t set_network(const SocketAddress &ip_address, const SocketAddress &netmask, const SocketAddress &gateway) override;
 | 
			
		||||
 | 
			
		||||
    /** Enable or disable DHCP on the network
 | 
			
		||||
     *
 | 
			
		||||
| 
						 | 
				
			
			@ -70,56 +70,56 @@ public:
 | 
			
		|||
     *  @param dhcp     False to disable dhcp (defaults to enabled)
 | 
			
		||||
     *  @return         0 on success, negative error code on failure
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t set_dhcp(bool dhcp);
 | 
			
		||||
    nsapi_error_t set_dhcp(bool dhcp) override;
 | 
			
		||||
 | 
			
		||||
    /** Start the interface
 | 
			
		||||
     *  @return             0 on success, negative on failure
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t connect();
 | 
			
		||||
    nsapi_error_t connect() override;
 | 
			
		||||
 | 
			
		||||
    /** Stop the interface
 | 
			
		||||
     *  @return             0 on success, negative on failure
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t disconnect();
 | 
			
		||||
    nsapi_error_t disconnect() override;
 | 
			
		||||
 | 
			
		||||
    /** @copydoc NetworkInterface::get_ip_address */
 | 
			
		||||
    virtual nsapi_error_t get_ip_address(SocketAddress *address);
 | 
			
		||||
    nsapi_error_t get_ip_address(SocketAddress *address) override;
 | 
			
		||||
 | 
			
		||||
    /** @copydoc NetworkInterface::get_netmask */
 | 
			
		||||
    virtual nsapi_error_t get_netmask(SocketAddress *address);
 | 
			
		||||
    nsapi_error_t get_netmask(SocketAddress *address) override;
 | 
			
		||||
 | 
			
		||||
    /** @copydoc NetworkInterface::get_gateway */
 | 
			
		||||
    virtual nsapi_error_t get_gateway(SocketAddress *address);
 | 
			
		||||
    nsapi_error_t get_gateway(SocketAddress *address) override;
 | 
			
		||||
 | 
			
		||||
    /** Get the network interface name
 | 
			
		||||
     *
 | 
			
		||||
     *  @return         Null-terminated representation of the network interface name
 | 
			
		||||
     *                  or null if  interface not exists
 | 
			
		||||
     */
 | 
			
		||||
    virtual char *get_interface_name(char *interface_name);
 | 
			
		||||
    char *get_interface_name(char *interface_name) override;
 | 
			
		||||
 | 
			
		||||
    /** Set the network interface as default one
 | 
			
		||||
      */
 | 
			
		||||
    virtual void set_as_default();
 | 
			
		||||
    void set_as_default() override;
 | 
			
		||||
 | 
			
		||||
    /** Register callback for status reporting
 | 
			
		||||
     *
 | 
			
		||||
     *  @param status_cb The callback for status changes
 | 
			
		||||
     */
 | 
			
		||||
    virtual void attach(mbed::Callback<void(nsapi_event_t, intptr_t)> status_cb);
 | 
			
		||||
    void attach(mbed::Callback<void(nsapi_event_t, intptr_t)> status_cb) override;
 | 
			
		||||
 | 
			
		||||
    /** Get the connection status
 | 
			
		||||
     *
 | 
			
		||||
     *  @return         The connection status according to nsapi_connection_status_t
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_connection_status_t get_connection_status() const;
 | 
			
		||||
    nsapi_connection_status_t get_connection_status() const override;
 | 
			
		||||
 | 
			
		||||
    /** Set blocking status of connect() which by default should be blocking
 | 
			
		||||
     *
 | 
			
		||||
     *  @param blocking true if connect is blocking
 | 
			
		||||
     *  @return         0 on success, negative error code on failure
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t set_blocking(bool blocking);
 | 
			
		||||
    nsapi_error_t set_blocking(bool blocking) override;
 | 
			
		||||
 | 
			
		||||
    /** Provide access to the L3IP
 | 
			
		||||
     *
 | 
			
		||||
| 
						 | 
				
			
			@ -134,26 +134,31 @@ public:
 | 
			
		|||
        return _l3ip;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    virtual L3IPInterface *l3ipInterface()
 | 
			
		||||
#if 0
 | 
			
		||||
    /* NetworkInterface does not currently have l3ipInterface, so this
 | 
			
		||||
     * "dynamic cast" is non-functional.
 | 
			
		||||
     */
 | 
			
		||||
    L3IPInterface *l3ipInterface() final
 | 
			
		||||
    {
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    /** Provide access to the underlying stack
 | 
			
		||||
     *
 | 
			
		||||
     *  @return The underlying network stack
 | 
			
		||||
     */
 | 
			
		||||
    virtual NetworkStack *get_stack();
 | 
			
		||||
    NetworkStack *get_stack() override;
 | 
			
		||||
 | 
			
		||||
    L3IP &_l3ip;
 | 
			
		||||
    OnboardNetworkStack &_stack;
 | 
			
		||||
    OnboardNetworkStack::Interface *_interface;
 | 
			
		||||
    bool _dhcp;
 | 
			
		||||
    bool _blocking;
 | 
			
		||||
    char _ip_address[NSAPI_IPv6_SIZE];
 | 
			
		||||
    char _netmask[NSAPI_IPv4_SIZE];
 | 
			
		||||
    char _gateway[NSAPI_IPv4_SIZE];
 | 
			
		||||
    OnboardNetworkStack::Interface *_interface = nullptr;
 | 
			
		||||
    bool _dhcp = true;
 | 
			
		||||
    bool _blocking = true;
 | 
			
		||||
    char _ip_address[NSAPI_IPv6_SIZE] {};
 | 
			
		||||
    char _netmask[NSAPI_IPv4_SIZE] {};
 | 
			
		||||
    char _gateway[NSAPI_IPv4_SIZE] {};
 | 
			
		||||
    mbed::Callback<void(nsapi_event_t, intptr_t)> _connection_status_cb;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,7 +30,7 @@ class MeshInterface : public virtual NetworkInterface {
 | 
			
		|||
public:
 | 
			
		||||
    /** @copydoc NetworkInterface::meshInterface
 | 
			
		||||
     */
 | 
			
		||||
    virtual MeshInterface *meshInterface()
 | 
			
		||||
    MeshInterface *meshInterface() final
 | 
			
		||||
    {
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -182,6 +182,9 @@ public:
 | 
			
		|||
     * @param len      Payload size, must be less or equal to the allocated size
 | 
			
		||||
     */
 | 
			
		||||
    virtual void set_len(net_stack_mem_buf_t *buf, uint32_t len) = 0;
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    ~NetStackMemoryManager() = default;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif /* NET_STACK_MEMORY_MANAGER_H */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -383,7 +383,7 @@ public:
 | 
			
		|||
     */
 | 
			
		||||
    virtual EthInterface *ethInterface()
 | 
			
		||||
    {
 | 
			
		||||
        return 0;
 | 
			
		||||
        return nullptr;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** Return pointer to a WiFiInterface.
 | 
			
		||||
| 
						 | 
				
			
			@ -391,7 +391,7 @@ public:
 | 
			
		|||
     */
 | 
			
		||||
    virtual WiFiInterface *wifiInterface()
 | 
			
		||||
    {
 | 
			
		||||
        return 0;
 | 
			
		||||
        return nullptr;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** Return pointer to a MeshInterface.
 | 
			
		||||
| 
						 | 
				
			
			@ -399,7 +399,7 @@ public:
 | 
			
		|||
     */
 | 
			
		||||
    virtual MeshInterface *meshInterface()
 | 
			
		||||
    {
 | 
			
		||||
        return 0;
 | 
			
		||||
        return nullptr;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** Return pointer to an EMACInterface.
 | 
			
		||||
| 
						 | 
				
			
			@ -407,7 +407,7 @@ public:
 | 
			
		|||
     */
 | 
			
		||||
    virtual EMACInterface *emacInterface()
 | 
			
		||||
    {
 | 
			
		||||
        return 0;
 | 
			
		||||
        return nullptr;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** Return pointer to a CellularInterface.
 | 
			
		||||
| 
						 | 
				
			
			@ -415,7 +415,7 @@ public:
 | 
			
		|||
     */
 | 
			
		||||
    virtual CellularInterface *cellularInterface()
 | 
			
		||||
    {
 | 
			
		||||
        return 0;
 | 
			
		||||
        return nullptr;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if !defined(DOXYGEN_ONLY)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -235,7 +235,7 @@ private:
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
    virtual nsapi_error_t get_ip_address(SocketAddress *address)
 | 
			
		||||
    nsapi_error_t get_ip_address(SocketAddress *address) override
 | 
			
		||||
    {
 | 
			
		||||
        if (!_stack_api()->get_ip_address) {
 | 
			
		||||
            return NSAPI_ERROR_UNSUPPORTED;
 | 
			
		||||
| 
						 | 
				
			
			@ -246,7 +246,7 @@ public:
 | 
			
		|||
        return *address ? NSAPI_ERROR_OK : NSAPI_ERROR_NO_ADDRESS;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    virtual nsapi_error_t gethostbyname(const char *name, SocketAddress *address, nsapi_version_t version, const char *interface_name)
 | 
			
		||||
    nsapi_error_t gethostbyname(const char *name, SocketAddress *address, nsapi_version_t version, const char *interface_name) override
 | 
			
		||||
    {
 | 
			
		||||
        if (!_stack_api()->gethostbyname) {
 | 
			
		||||
            return NetworkStack::gethostbyname(name, address, version, interface_name);
 | 
			
		||||
| 
						 | 
				
			
			@ -258,7 +258,7 @@ public:
 | 
			
		|||
        return err;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    virtual nsapi_error_t add_dns_server(const SocketAddress &address, const char *interface_name)
 | 
			
		||||
    nsapi_error_t add_dns_server(const SocketAddress &address, const char *interface_name) override
 | 
			
		||||
    {
 | 
			
		||||
        if (!_stack_api()->add_dns_server) {
 | 
			
		||||
            return NetworkStack::add_dns_server(address, interface_name);
 | 
			
		||||
| 
						 | 
				
			
			@ -267,7 +267,7 @@ public:
 | 
			
		|||
        return _stack_api()->add_dns_server(_stack(), address.get_addr());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    virtual nsapi_error_t setstackopt(int level, int optname, const void *optval, unsigned optlen)
 | 
			
		||||
    nsapi_error_t setstackopt(int level, int optname, const void *optval, unsigned optlen) override
 | 
			
		||||
    {
 | 
			
		||||
        if (!_stack_api()->setstackopt) {
 | 
			
		||||
            return NSAPI_ERROR_UNSUPPORTED;
 | 
			
		||||
| 
						 | 
				
			
			@ -276,7 +276,7 @@ public:
 | 
			
		|||
        return _stack_api()->setstackopt(_stack(), level, optname, optval, optlen);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    virtual nsapi_error_t getstackopt(int level, int optname, void *optval, unsigned *optlen)
 | 
			
		||||
    nsapi_error_t getstackopt(int level, int optname, void *optval, unsigned *optlen) override
 | 
			
		||||
    {
 | 
			
		||||
        if (!_stack_api()->getstackopt) {
 | 
			
		||||
            return NSAPI_ERROR_UNSUPPORTED;
 | 
			
		||||
| 
						 | 
				
			
			@ -286,7 +286,7 @@ public:
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    virtual nsapi_error_t socket_open(nsapi_socket_t *socket, nsapi_protocol_t proto)
 | 
			
		||||
    nsapi_error_t socket_open(nsapi_socket_t *socket, nsapi_protocol_t proto) override
 | 
			
		||||
    {
 | 
			
		||||
        if (!_stack_api()->socket_open) {
 | 
			
		||||
            return NSAPI_ERROR_UNSUPPORTED;
 | 
			
		||||
| 
						 | 
				
			
			@ -295,7 +295,7 @@ protected:
 | 
			
		|||
        return _stack_api()->socket_open(_stack(), socket, proto);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    virtual nsapi_error_t socket_close(nsapi_socket_t socket)
 | 
			
		||||
    nsapi_error_t socket_close(nsapi_socket_t socket) override
 | 
			
		||||
    {
 | 
			
		||||
        if (!_stack_api()->socket_close) {
 | 
			
		||||
            return NSAPI_ERROR_UNSUPPORTED;
 | 
			
		||||
| 
						 | 
				
			
			@ -304,7 +304,7 @@ protected:
 | 
			
		|||
        return _stack_api()->socket_close(_stack(), socket);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    virtual nsapi_error_t socket_bind(nsapi_socket_t socket, const SocketAddress &address)
 | 
			
		||||
    nsapi_error_t socket_bind(nsapi_socket_t socket, const SocketAddress &address) override
 | 
			
		||||
    {
 | 
			
		||||
        if (!_stack_api()->socket_bind) {
 | 
			
		||||
            return NSAPI_ERROR_UNSUPPORTED;
 | 
			
		||||
| 
						 | 
				
			
			@ -313,7 +313,7 @@ protected:
 | 
			
		|||
        return _stack_api()->socket_bind(_stack(), socket, address.get_addr(), address.get_port());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    virtual nsapi_error_t socket_listen(nsapi_socket_t socket, int backlog)
 | 
			
		||||
    nsapi_error_t socket_listen(nsapi_socket_t socket, int backlog) override
 | 
			
		||||
    {
 | 
			
		||||
        if (!_stack_api()->socket_listen) {
 | 
			
		||||
            return NSAPI_ERROR_UNSUPPORTED;
 | 
			
		||||
| 
						 | 
				
			
			@ -322,7 +322,7 @@ protected:
 | 
			
		|||
        return _stack_api()->socket_listen(_stack(), socket, backlog);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    virtual nsapi_error_t socket_connect(nsapi_socket_t socket, const SocketAddress &address)
 | 
			
		||||
    nsapi_error_t socket_connect(nsapi_socket_t socket, const SocketAddress &address) override
 | 
			
		||||
    {
 | 
			
		||||
        if (!_stack_api()->socket_connect) {
 | 
			
		||||
            return NSAPI_ERROR_UNSUPPORTED;
 | 
			
		||||
| 
						 | 
				
			
			@ -331,7 +331,7 @@ protected:
 | 
			
		|||
        return _stack_api()->socket_connect(_stack(), socket, address.get_addr(), address.get_port());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    virtual nsapi_error_t socket_accept(nsapi_socket_t server, nsapi_socket_t *socket, SocketAddress *address)
 | 
			
		||||
    nsapi_error_t socket_accept(nsapi_socket_t server, nsapi_socket_t *socket, SocketAddress *address) override
 | 
			
		||||
    {
 | 
			
		||||
        if (!_stack_api()->socket_accept) {
 | 
			
		||||
            return NSAPI_ERROR_UNSUPPORTED;
 | 
			
		||||
| 
						 | 
				
			
			@ -350,7 +350,7 @@ protected:
 | 
			
		|||
        return err;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    virtual nsapi_size_or_error_t socket_send(nsapi_socket_t socket, const void *data, nsapi_size_t size)
 | 
			
		||||
    nsapi_size_or_error_t socket_send(nsapi_socket_t socket, const void *data, nsapi_size_t size) override
 | 
			
		||||
    {
 | 
			
		||||
        if (!_stack_api()->socket_send) {
 | 
			
		||||
            return NSAPI_ERROR_UNSUPPORTED;
 | 
			
		||||
| 
						 | 
				
			
			@ -359,7 +359,7 @@ protected:
 | 
			
		|||
        return _stack_api()->socket_send(_stack(), socket, data, size);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    virtual nsapi_size_or_error_t socket_recv(nsapi_socket_t socket, void *data, nsapi_size_t size)
 | 
			
		||||
    nsapi_size_or_error_t socket_recv(nsapi_socket_t socket, void *data, nsapi_size_t size) override
 | 
			
		||||
    {
 | 
			
		||||
        if (!_stack_api()->socket_recv) {
 | 
			
		||||
            return NSAPI_ERROR_UNSUPPORTED;
 | 
			
		||||
| 
						 | 
				
			
			@ -368,7 +368,7 @@ protected:
 | 
			
		|||
        return _stack_api()->socket_recv(_stack(), socket, data, size);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    virtual nsapi_size_or_error_t socket_sendto(nsapi_socket_t socket, const SocketAddress &address, const void *data, nsapi_size_t size)
 | 
			
		||||
    nsapi_size_or_error_t socket_sendto(nsapi_socket_t socket, const SocketAddress &address, const void *data, nsapi_size_t size) override
 | 
			
		||||
    {
 | 
			
		||||
        if (!_stack_api()->socket_sendto) {
 | 
			
		||||
            return NSAPI_ERROR_UNSUPPORTED;
 | 
			
		||||
| 
						 | 
				
			
			@ -377,7 +377,7 @@ protected:
 | 
			
		|||
        return _stack_api()->socket_sendto(_stack(), socket, address.get_addr(), address.get_port(), data, size);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    virtual nsapi_size_or_error_t socket_recvfrom(nsapi_socket_t socket, SocketAddress *address, void *data, nsapi_size_t size)
 | 
			
		||||
    nsapi_size_or_error_t socket_recvfrom(nsapi_socket_t socket, SocketAddress *address, void *data, nsapi_size_t size) override
 | 
			
		||||
    {
 | 
			
		||||
        if (!_stack_api()->socket_recvfrom) {
 | 
			
		||||
            return NSAPI_ERROR_UNSUPPORTED;
 | 
			
		||||
| 
						 | 
				
			
			@ -396,7 +396,7 @@ protected:
 | 
			
		|||
        return err;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    virtual void socket_attach(nsapi_socket_t socket, void (*callback)(void *), void *data)
 | 
			
		||||
    void socket_attach(nsapi_socket_t socket, void (*callback)(void *), void *data) override
 | 
			
		||||
    {
 | 
			
		||||
        if (!_stack_api()->socket_attach) {
 | 
			
		||||
            return;
 | 
			
		||||
| 
						 | 
				
			
			@ -405,7 +405,7 @@ protected:
 | 
			
		|||
        return _stack_api()->socket_attach(_stack(), socket, callback, data);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    virtual nsapi_error_t setsockopt(nsapi_socket_t socket, int level, int optname, const void *optval, unsigned optlen)
 | 
			
		||||
    nsapi_error_t setsockopt(nsapi_socket_t socket, int level, int optname, const void *optval, unsigned optlen) override
 | 
			
		||||
    {
 | 
			
		||||
        if (!_stack_api()->setsockopt) {
 | 
			
		||||
            return NSAPI_ERROR_UNSUPPORTED;
 | 
			
		||||
| 
						 | 
				
			
			@ -414,7 +414,7 @@ protected:
 | 
			
		|||
        return _stack_api()->setsockopt(_stack(), socket, level, optname, optval, optlen);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    virtual nsapi_error_t getsockopt(nsapi_socket_t socket, int level, int optname, void *optval, unsigned *optlen)
 | 
			
		||||
    nsapi_error_t getsockopt(nsapi_socket_t socket, int level, int optname, void *optval, unsigned *optlen) override
 | 
			
		||||
    {
 | 
			
		||||
        if (!_stack_api()->getsockopt) {
 | 
			
		||||
            return NSAPI_ERROR_UNSUPPORTED;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -37,9 +37,9 @@ class OnboardNetworkStack;
 | 
			
		|||
 *  NetworkStack, a network stack can be used as a target
 | 
			
		||||
 *  for instantiating network sockets.
 | 
			
		||||
 */
 | 
			
		||||
class NetworkStack: public DNS {
 | 
			
		||||
class NetworkStack : public DNS {
 | 
			
		||||
public:
 | 
			
		||||
    virtual ~NetworkStack() {};
 | 
			
		||||
    virtual ~NetworkStack() = default;
 | 
			
		||||
 | 
			
		||||
    /** Get the local IP address
 | 
			
		||||
     *
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,9 +47,10 @@ public:
 | 
			
		|||
     * NetworkInterface API.
 | 
			
		||||
     */
 | 
			
		||||
    class Interface {
 | 
			
		||||
    public:
 | 
			
		||||
        virtual ~Interface() {}
 | 
			
		||||
    protected:
 | 
			
		||||
        ~Interface() = default;
 | 
			
		||||
 | 
			
		||||
    public:
 | 
			
		||||
        /** Connect the interface to the network
 | 
			
		||||
         *
 | 
			
		||||
         * Sets up a connection on specified network interface, using DHCP or provided network details. If the @a dhcp is set to
 | 
			
		||||
| 
						 | 
				
			
			@ -167,6 +168,10 @@ public:
 | 
			
		|||
    {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    OnboardNetworkStack *onboardNetworkStack() final
 | 
			
		||||
    {
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif /* MBED_IPSTACK_H */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -33,7 +33,7 @@ public:
 | 
			
		|||
     */
 | 
			
		||||
    static PPP &get_default_instance();
 | 
			
		||||
 | 
			
		||||
    virtual ~PPP() {};
 | 
			
		||||
    virtual ~PPP() = default;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Callback to be registered with PPP interface and to be called for received packets
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -22,16 +22,7 @@ using namespace mbed;
 | 
			
		|||
/* Interface implementation */
 | 
			
		||||
PPPInterface::PPPInterface(PPP &ppp, OnboardNetworkStack &stack) :
 | 
			
		||||
    _ppp(ppp),
 | 
			
		||||
    _stack(stack),
 | 
			
		||||
    _interface(NULL),
 | 
			
		||||
    _blocking(true),
 | 
			
		||||
    _ip_address(),
 | 
			
		||||
    _netmask(),
 | 
			
		||||
    _gateway(),
 | 
			
		||||
    _stream(NULL),
 | 
			
		||||
    _ip_stack(DEFAULT_STACK),
 | 
			
		||||
    _uname(NULL),
 | 
			
		||||
    _password(NULL)
 | 
			
		||||
    _stack(stack)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -48,59 +48,59 @@ public:
 | 
			
		|||
     */
 | 
			
		||||
    PPPInterface(PPP &ppp = PPP::get_default_instance(),
 | 
			
		||||
                 OnboardNetworkStack &stack = OnboardNetworkStack::get_default_instance());
 | 
			
		||||
    virtual ~PPPInterface();
 | 
			
		||||
    ~PPPInterface() override;
 | 
			
		||||
 | 
			
		||||
    /** @copydoc NetworkInterface::set_network */
 | 
			
		||||
    virtual nsapi_error_t set_network(const SocketAddress &ip_address, const SocketAddress &netmask, const SocketAddress &gateway);
 | 
			
		||||
    nsapi_error_t set_network(const SocketAddress &ip_address, const SocketAddress &netmask, const SocketAddress &gateway) override;
 | 
			
		||||
 | 
			
		||||
    /** @copydoc NetworkInterface::connect */
 | 
			
		||||
    virtual nsapi_error_t connect();
 | 
			
		||||
    nsapi_error_t connect() override;
 | 
			
		||||
 | 
			
		||||
    /** @copydoc NetworkInterface::disconnect */
 | 
			
		||||
    virtual nsapi_error_t disconnect();
 | 
			
		||||
    nsapi_error_t disconnect() override;
 | 
			
		||||
 | 
			
		||||
    /** @copydoc NetworkInterface::get_ip_address */
 | 
			
		||||
    virtual nsapi_error_t get_ip_address(SocketAddress *address);
 | 
			
		||||
    nsapi_error_t get_ip_address(SocketAddress *address) override;
 | 
			
		||||
 | 
			
		||||
    /** @copydoc NetworkInterface::get_netmask */
 | 
			
		||||
    virtual nsapi_error_t get_netmask(SocketAddress *address);
 | 
			
		||||
    nsapi_error_t get_netmask(SocketAddress *address) override;
 | 
			
		||||
 | 
			
		||||
    /** @copydoc NetworkInterface::get_gateway */
 | 
			
		||||
    virtual nsapi_error_t get_gateway(SocketAddress *address);
 | 
			
		||||
    nsapi_error_t get_gateway(SocketAddress *address) override;
 | 
			
		||||
 | 
			
		||||
    /** @copydoc NetworkInterface::get_interface_name */
 | 
			
		||||
    virtual char *get_interface_name(char *interface_name);
 | 
			
		||||
    char *get_interface_name(char *interface_name) override;
 | 
			
		||||
 | 
			
		||||
    /** @copydoc NetworkInterface::set_as_default */
 | 
			
		||||
    virtual void set_as_default();
 | 
			
		||||
    void set_as_default() override;
 | 
			
		||||
 | 
			
		||||
    /** @copydoc NetworkInterface::attach */
 | 
			
		||||
    virtual void attach(mbed::Callback<void(nsapi_event_t, intptr_t)> status_cb);
 | 
			
		||||
    void attach(mbed::Callback<void(nsapi_event_t, intptr_t)> status_cb) override;
 | 
			
		||||
 | 
			
		||||
    /** @copydoc NetworkInterface::get_connection_status */
 | 
			
		||||
    virtual nsapi_connection_status_t get_connection_status() const;
 | 
			
		||||
    nsapi_connection_status_t get_connection_status() const override;
 | 
			
		||||
 | 
			
		||||
    /** @copydoc NetworkInterface::set_blocking */
 | 
			
		||||
    virtual nsapi_error_t set_blocking(bool blocking);
 | 
			
		||||
    nsapi_error_t set_blocking(bool blocking) override;
 | 
			
		||||
 | 
			
		||||
    /** Sets file stream used to communicate with modem
 | 
			
		||||
     *
 | 
			
		||||
     * @param stream Pointer to file handle
 | 
			
		||||
     */
 | 
			
		||||
    virtual void set_stream(mbed::FileHandle *stream);
 | 
			
		||||
    void set_stream(mbed::FileHandle *stream);
 | 
			
		||||
 | 
			
		||||
    /** Sets IP protocol versions of IP stack
 | 
			
		||||
     *
 | 
			
		||||
     * @param ip_stack IP protocol version
 | 
			
		||||
     */
 | 
			
		||||
    virtual void set_ip_stack(nsapi_ip_stack_t ip_stack);
 | 
			
		||||
    void set_ip_stack(nsapi_ip_stack_t ip_stack);
 | 
			
		||||
 | 
			
		||||
    /** Sets user name and password for PPP protocol
 | 
			
		||||
     *
 | 
			
		||||
     * @param uname    User name
 | 
			
		||||
     * @param password Password
 | 
			
		||||
     */
 | 
			
		||||
    virtual void set_credentials(const char *uname, const char *password);
 | 
			
		||||
    void set_credentials(const char *uname, const char *password);
 | 
			
		||||
 | 
			
		||||
    /** Provide access to the PPP
 | 
			
		||||
     *
 | 
			
		||||
| 
						 | 
				
			
			@ -115,31 +115,36 @@ public:
 | 
			
		|||
        return _ppp;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    virtual PPPInterface *pppInterface()
 | 
			
		||||
#if 0
 | 
			
		||||
    /* NetworkInterface does not currently have pppInterface, so this
 | 
			
		||||
     * "dynamic cast" is non-functional.
 | 
			
		||||
     */
 | 
			
		||||
    PPPInterface *pppInterface() final
 | 
			
		||||
    {
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    /** Provide access to the underlying stack
 | 
			
		||||
     *
 | 
			
		||||
     *  @return The underlying network stack
 | 
			
		||||
     */
 | 
			
		||||
    virtual NetworkStack *get_stack();
 | 
			
		||||
    NetworkStack *get_stack() final;
 | 
			
		||||
 | 
			
		||||
    PPP &_ppp;
 | 
			
		||||
    OnboardNetworkStack &_stack;
 | 
			
		||||
    OnboardNetworkStack::Interface *_interface;
 | 
			
		||||
    bool _blocking;
 | 
			
		||||
    char _ip_address[NSAPI_IPv6_SIZE];
 | 
			
		||||
    char _netmask[NSAPI_IPv4_SIZE];
 | 
			
		||||
    char _gateway[NSAPI_IPv4_SIZE];
 | 
			
		||||
    OnboardNetworkStack::Interface *_interface = nullptr;
 | 
			
		||||
    bool _blocking = true;
 | 
			
		||||
    char _ip_address[NSAPI_IPv6_SIZE] {};
 | 
			
		||||
    char _netmask[NSAPI_IPv4_SIZE] {};
 | 
			
		||||
    char _gateway[NSAPI_IPv4_SIZE] {};
 | 
			
		||||
    mbed::Callback<void(nsapi_event_t, intptr_t)> _connection_status_cb;
 | 
			
		||||
 | 
			
		||||
    mbed::FileHandle *_stream;
 | 
			
		||||
    nsapi_ip_stack_t _ip_stack;
 | 
			
		||||
    const char *_uname;
 | 
			
		||||
    const char *_password;
 | 
			
		||||
    mbed::FileHandle *_stream = nullptr;
 | 
			
		||||
    nsapi_ip_stack_t _ip_stack = DEFAULT_STACK;
 | 
			
		||||
    const char *_uname = nullptr;
 | 
			
		||||
    const char *_password = nullptr;
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -42,7 +42,7 @@ public:
 | 
			
		|||
     *
 | 
			
		||||
     *  Closes socket if the socket is still open.
 | 
			
		||||
     */
 | 
			
		||||
    virtual ~Socket() {}
 | 
			
		||||
    virtual ~Socket() = default;
 | 
			
		||||
 | 
			
		||||
    /** Closes the socket.
 | 
			
		||||
     *
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,17 +16,11 @@
 | 
			
		|||
 | 
			
		||||
#include "TCPServer.h"
 | 
			
		||||
 | 
			
		||||
using mbed::Callback;
 | 
			
		||||
 | 
			
		||||
TCPServer::TCPServer()
 | 
			
		||||
{
 | 
			
		||||
    _socket_stats.stats_update_proto(this, NSAPI_TCP);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TCPServer::~TCPServer()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
nsapi_error_t TCPServer::accept(TCPSocket *connection, SocketAddress *address)
 | 
			
		||||
{
 | 
			
		||||
    _lock.lock();
 | 
			
		||||
| 
						 | 
				
			
			@ -51,8 +45,8 @@ nsapi_error_t TCPServer::accept(TCPSocket *connection, SocketAddress *address)
 | 
			
		|||
 | 
			
		||||
            connection->_stack = _stack;
 | 
			
		||||
            connection->_socket = socket;
 | 
			
		||||
            connection->_event = Callback<void()>(connection, &TCPSocket::event);
 | 
			
		||||
            _stack->socket_attach(socket, &Callback<void()>::thunk, &connection->_event);
 | 
			
		||||
            connection->_event = { connection, &TCPSocket::event };
 | 
			
		||||
            _stack->socket_attach(socket, connection->_event.thunk, &connection->_event);
 | 
			
		||||
            _socket_stats.stats_update_peer(connection, *address);
 | 
			
		||||
            _socket_stats.stats_update_socket_state(connection, SOCK_CONNECTED);
 | 
			
		||||
            connection->_lock.unlock();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -54,12 +54,6 @@ public:
 | 
			
		|||
        open(stack);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** Destroy a socket
 | 
			
		||||
     *
 | 
			
		||||
     *  Closes socket if the socket is still open
 | 
			
		||||
     */
 | 
			
		||||
    virtual ~TCPServer();
 | 
			
		||||
 | 
			
		||||
    // Allow legacy TCPServer::accept() to override inherited Socket::accept()
 | 
			
		||||
    using TCPSocket::accept;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,19 +23,14 @@ TCPSocket::TCPSocket()
 | 
			
		|||
    _socket_stats.stats_update_proto(this, NSAPI_TCP);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TCPSocket::TCPSocket(TCPSocket *parent, nsapi_socket_t socket, SocketAddress address)
 | 
			
		||||
TCPSocket::TCPSocket(TCPSocket *parent, nsapi_socket_t socket, SocketAddress address) : TCPSocket()
 | 
			
		||||
{
 | 
			
		||||
    _socket = socket;
 | 
			
		||||
    _stack = parent->_stack;
 | 
			
		||||
    _factory_allocated = true;
 | 
			
		||||
    _remote_peer = address;
 | 
			
		||||
    _socket_stats.stats_new_socket_entry(this);
 | 
			
		||||
    _event = mbed::Callback<void()>(this, &TCPSocket::event);
 | 
			
		||||
    _stack->socket_attach(socket, &mbed::Callback<void()>::thunk, &_event);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TCPSocket::~TCPSocket()
 | 
			
		||||
{
 | 
			
		||||
    _stack->socket_attach(socket, _event.thunk, &_event);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
nsapi_protocol_t TCPSocket::get_proto()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -51,21 +51,15 @@ public:
 | 
			
		|||
                          "The TCPSocket(S *stack) constructor is deprecated."
 | 
			
		||||
                          "It discards the open() call return value."
 | 
			
		||||
                          "Use another constructor and call open() explicitly, instead.")
 | 
			
		||||
    TCPSocket(S *stack)
 | 
			
		||||
    TCPSocket(S *stack) : TCPSocket()
 | 
			
		||||
    {
 | 
			
		||||
        open(stack);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** Destroy a socket
 | 
			
		||||
     *
 | 
			
		||||
     *  Closes socket if the socket is still open
 | 
			
		||||
     */
 | 
			
		||||
    virtual ~TCPSocket();
 | 
			
		||||
 | 
			
		||||
    /** Override multicast functions to return error for TCP
 | 
			
		||||
     *
 | 
			
		||||
     */
 | 
			
		||||
    virtual int join_multicast_group(const SocketAddress &address)
 | 
			
		||||
    int join_multicast_group(const SocketAddress &address)
 | 
			
		||||
    {
 | 
			
		||||
        return NSAPI_ERROR_UNSUPPORTED;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -84,7 +78,7 @@ public:
 | 
			
		|||
     *  @retval         int Other negative error codes for stack-related failures.
 | 
			
		||||
     *                  See NetworkStack::socket_connect().
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t connect(const SocketAddress &address);
 | 
			
		||||
    nsapi_error_t connect(const SocketAddress &address) override;
 | 
			
		||||
 | 
			
		||||
    /** Send data over a TCP socket
 | 
			
		||||
     *
 | 
			
		||||
| 
						 | 
				
			
			@ -104,7 +98,7 @@ public:
 | 
			
		|||
     *  @retval         int Other negative error codes for stack-related failures.
 | 
			
		||||
     *                  See @ref NetworkStack::socket_send.
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_size_or_error_t send(const void *data, nsapi_size_t size);
 | 
			
		||||
    nsapi_size_or_error_t send(const void *data, nsapi_size_t size) override;
 | 
			
		||||
 | 
			
		||||
    /** Receive data over a TCP socket
 | 
			
		||||
     *
 | 
			
		||||
| 
						 | 
				
			
			@ -124,7 +118,7 @@ public:
 | 
			
		|||
     *  @retval         int Other negative error codes for stack-related failures.
 | 
			
		||||
     *                  See @ref NetworkStack::socket_recv.
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_size_or_error_t recv(void *data, nsapi_size_t size);
 | 
			
		||||
    nsapi_size_or_error_t recv(void *data, nsapi_size_t size) override;
 | 
			
		||||
 | 
			
		||||
    /** Send data on a socket.
 | 
			
		||||
     *
 | 
			
		||||
| 
						 | 
				
			
			@ -144,8 +138,8 @@ public:
 | 
			
		|||
     *  @retval         int Other negative error codes for stack-related failures.
 | 
			
		||||
     *                  See @ref NetworkStack::socket_send.
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_size_or_error_t sendto(const SocketAddress &address,
 | 
			
		||||
                                         const void *data, nsapi_size_t size);
 | 
			
		||||
    nsapi_size_or_error_t sendto(const SocketAddress &address,
 | 
			
		||||
                                 const void *data, nsapi_size_t size) override;
 | 
			
		||||
 | 
			
		||||
    /** Receive a data from a socket
 | 
			
		||||
     *
 | 
			
		||||
| 
						 | 
				
			
			@ -166,8 +160,8 @@ public:
 | 
			
		|||
     *  @retval         int Other negative error codes for stack-related failures.
 | 
			
		||||
     *                  See @ref NetworkStack::socket_recv.
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_size_or_error_t recvfrom(SocketAddress *address,
 | 
			
		||||
                                           void *data, nsapi_size_t size);
 | 
			
		||||
    nsapi_size_or_error_t recvfrom(SocketAddress *address,
 | 
			
		||||
                                   void *data, nsapi_size_t size) override;
 | 
			
		||||
 | 
			
		||||
    /** Accepts a connection on a socket.
 | 
			
		||||
     *
 | 
			
		||||
| 
						 | 
				
			
			@ -185,7 +179,7 @@ public:
 | 
			
		|||
     *                    NSAPI_ERROR_NO_SOCKET if the socket was not open
 | 
			
		||||
     *  @return           pointer to a socket
 | 
			
		||||
     */
 | 
			
		||||
    virtual TCPSocket *accept(nsapi_error_t *error = NULL);
 | 
			
		||||
    TCPSocket *accept(nsapi_error_t *error = NULL) override;
 | 
			
		||||
 | 
			
		||||
    /** Listen for incoming connections.
 | 
			
		||||
     *
 | 
			
		||||
| 
						 | 
				
			
			@ -199,11 +193,11 @@ public:
 | 
			
		|||
     *  @retval         int Other negative error codes for stack-related failures.
 | 
			
		||||
     *                  See @ref NetworkStack::socket_listen.
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t listen(int backlog = 1);
 | 
			
		||||
    nsapi_error_t listen(int backlog = 1) override;
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    friend class TCPServer;
 | 
			
		||||
    virtual nsapi_protocol_t get_proto();
 | 
			
		||||
    nsapi_protocol_t get_proto() override;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    /** Create a socket out of a given socket
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -37,15 +37,6 @@ TLSSocket::~TLSSocket()
 | 
			
		|||
 | 
			
		||||
#else // MBED_CONF_NSAPI_OFFLOAD_TLSSOCKET
 | 
			
		||||
 | 
			
		||||
TLSSocket::TLSSocket()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TLSSocket::~TLSSocket()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
nsapi_error_t TLSSocket::set_hostname(const char *hostname)
 | 
			
		||||
{
 | 
			
		||||
    return setsockopt(NSAPI_TLSSOCKET_LEVEL, NSAPI_TLSSOCKET_SET_HOSTNAME, hostname, strlen(hostname));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -54,7 +54,7 @@ public:
 | 
			
		|||
 | 
			
		||||
    /** Destroy the TLSSocket and closes the transport.
 | 
			
		||||
     */
 | 
			
		||||
    virtual ~TLSSocket();
 | 
			
		||||
    ~TLSSocket() override;
 | 
			
		||||
 | 
			
		||||
    /** Opens a socket.
 | 
			
		||||
     *
 | 
			
		||||
| 
						 | 
				
			
			@ -67,7 +67,7 @@ public:
 | 
			
		|||
     *  @param stack    Network stack as target for socket.
 | 
			
		||||
     *  @return         NSAPI_ERROR_OK on success. See @ref TCPSocket::open
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t open(NetworkStack *stack)
 | 
			
		||||
    nsapi_error_t open(NetworkStack *stack)
 | 
			
		||||
    {
 | 
			
		||||
        return tcp_socket.open(stack);
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -89,8 +89,7 @@ private:
 | 
			
		|||
 | 
			
		||||
class TLSSocket : public TCPSocket {
 | 
			
		||||
public:
 | 
			
		||||
    TLSSocket();
 | 
			
		||||
    virtual ~TLSSocket();
 | 
			
		||||
    TLSSocket() = default;
 | 
			
		||||
 | 
			
		||||
    /** Set hostname.
 | 
			
		||||
     *
 | 
			
		||||
| 
						 | 
				
			
			@ -110,7 +109,7 @@ public:
 | 
			
		|||
     * @param len     Length of certificate (including terminating 0 for PEM).
 | 
			
		||||
     * @return        NSAPI_ERROR_OK on success, negative error code on failure.
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t set_root_ca_cert(const void *root_ca, size_t len);
 | 
			
		||||
    nsapi_error_t set_root_ca_cert(const void *root_ca, size_t len);
 | 
			
		||||
 | 
			
		||||
    /** Sets the certification of Root CA.
 | 
			
		||||
     *
 | 
			
		||||
| 
						 | 
				
			
			@ -118,7 +117,7 @@ public:
 | 
			
		|||
     *
 | 
			
		||||
     * @param root_ca_pem Root CA Certificate in PEM format.
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t set_root_ca_cert(const char *root_ca_pem);
 | 
			
		||||
    nsapi_error_t set_root_ca_cert(const char *root_ca_pem);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /** Sets client certificate, and client private key.
 | 
			
		||||
| 
						 | 
				
			
			@ -129,7 +128,7 @@ public:
 | 
			
		|||
     * @param client_private_key_len Key size including the terminating null byte for PEM data
 | 
			
		||||
     * @return   NSAPI_ERROR_OK on success, negative error code on failure.
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t set_client_cert_key(const void *client_cert, size_t client_cert_len,
 | 
			
		||||
    nsapi_error_t set_client_cert_key(const void *client_cert, size_t client_cert_len,
 | 
			
		||||
                                      const void *client_private_key_pem, size_t client_private_key_len);
 | 
			
		||||
 | 
			
		||||
    /** Sets client certificate, and client private key.
 | 
			
		||||
| 
						 | 
				
			
			@ -138,14 +137,14 @@ public:
 | 
			
		|||
     * @param client_private_key_pem Client private key in PEM format.
 | 
			
		||||
     * @return   NSAPI_ERROR_OK on success, negative error code on failure.
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t set_client_cert_key(const char *client_cert_pem, const char *client_private_key_pem);
 | 
			
		||||
    nsapi_error_t set_client_cert_key(const char *client_cert_pem, const char *client_private_key_pem);
 | 
			
		||||
 | 
			
		||||
    // From TCPSocket
 | 
			
		||||
    virtual nsapi_error_t connect(const char *host, uint16_t port);
 | 
			
		||||
    virtual nsapi_error_t connect(const SocketAddress &address);
 | 
			
		||||
    nsapi_error_t connect(const char *host, uint16_t port) override;
 | 
			
		||||
    nsapi_error_t connect(const SocketAddress &address) override;
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    virtual nsapi_error_t enable_tlssocket();
 | 
			
		||||
    nsapi_error_t enable_tlssocket();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // MBED_CONF_NSAPI_OFFLOAD_TLSSOCKET
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,12 +32,6 @@
 | 
			
		|||
 | 
			
		||||
TLSSocketWrapper::TLSSocketWrapper(Socket *transport, const char *hostname, control_transport control) :
 | 
			
		||||
    _transport(transport),
 | 
			
		||||
    _timeout(-1),
 | 
			
		||||
#ifdef MBEDTLS_X509_CRT_PARSE_C
 | 
			
		||||
    _cacert(NULL),
 | 
			
		||||
    _clicert(NULL),
 | 
			
		||||
#endif
 | 
			
		||||
    _ssl_conf(NULL),
 | 
			
		||||
    _connect_transport(control == TRANSPORT_CONNECT || control == TRANSPORT_CONNECT_AND_CLOSE),
 | 
			
		||||
    _close_transport(control == TRANSPORT_CLOSE || control == TRANSPORT_CONNECT_AND_CLOSE),
 | 
			
		||||
    _tls_initialized(false),
 | 
			
		||||
| 
						 | 
				
			
			@ -47,7 +41,7 @@ TLSSocketWrapper::TLSSocketWrapper(Socket *transport, const char *hostname, cont
 | 
			
		|||
    _ssl_conf_allocated(false)
 | 
			
		||||
{
 | 
			
		||||
#if defined(MBEDTLS_PLATFORM_C)
 | 
			
		||||
    int ret = mbedtls_platform_setup(NULL);
 | 
			
		||||
    int ret = mbedtls_platform_setup(nullptr);
 | 
			
		||||
    if (ret != 0) {
 | 
			
		||||
        print_mbedtls_error("mbedtls_platform_setup()", ret);
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -74,12 +68,12 @@ TLSSocketWrapper::~TLSSocketWrapper()
 | 
			
		|||
    mbedtls_ssl_free(&_ssl);
 | 
			
		||||
#if defined(MBEDTLS_X509_CRT_PARSE_C)
 | 
			
		||||
    mbedtls_pk_free(&_pkctx);
 | 
			
		||||
    set_own_cert(NULL);
 | 
			
		||||
    set_ca_chain(NULL);
 | 
			
		||||
    set_own_cert(nullptr);
 | 
			
		||||
    set_ca_chain(nullptr);
 | 
			
		||||
#endif
 | 
			
		||||
    set_ssl_config(NULL);
 | 
			
		||||
    set_ssl_config(nullptr);
 | 
			
		||||
#if defined(MBEDTLS_PLATFORM_C)
 | 
			
		||||
    mbedtls_platform_teardown(NULL);
 | 
			
		||||
    mbedtls_platform_teardown(nullptr);
 | 
			
		||||
#endif /* MBEDTLS_PLATFORM_C */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -148,7 +142,7 @@ nsapi_error_t TLSSocketWrapper::set_client_cert_key(const void *client_cert, siz
 | 
			
		|||
    }
 | 
			
		||||
    mbedtls_pk_init(&_pkctx);
 | 
			
		||||
    if ((ret = mbedtls_pk_parse_key(&_pkctx, static_cast<const unsigned char *>(client_private_key_pem),
 | 
			
		||||
                                    client_private_key_len, NULL, 0)) != 0) {
 | 
			
		||||
                                    client_private_key_len, nullptr, 0)) != 0) {
 | 
			
		||||
        print_mbedtls_error("mbedtls_pk_parse_key", ret);
 | 
			
		||||
        mbedtls_x509_crt_free(crt);
 | 
			
		||||
        delete crt;
 | 
			
		||||
| 
						 | 
				
			
			@ -194,8 +188,8 @@ nsapi_error_t TLSSocketWrapper::start_handshake(bool first_call)
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
#if MBED_CONF_TLS_SOCKET_DEBUG_LEVEL > 0
 | 
			
		||||
    mbedtls_ssl_conf_verify(get_ssl_config(), my_verify, NULL);
 | 
			
		||||
    mbedtls_ssl_conf_dbg(get_ssl_config(), my_debug, NULL);
 | 
			
		||||
    mbedtls_ssl_conf_verify(get_ssl_config(), my_verify, nullptr);
 | 
			
		||||
    mbedtls_ssl_conf_dbg(get_ssl_config(), my_debug, nullptr);
 | 
			
		||||
    mbedtls_debug_set_threshold(MBED_CONF_TLS_SOCKET_DEBUG_LEVEL);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -207,7 +201,7 @@ nsapi_error_t TLSSocketWrapper::start_handshake(bool first_call)
 | 
			
		|||
 | 
			
		||||
    _transport->set_blocking(false);
 | 
			
		||||
    _transport->sigio(mbed::callback(this, &TLSSocketWrapper::event));
 | 
			
		||||
    mbedtls_ssl_set_bio(&_ssl, this, ssl_send, ssl_recv, NULL);
 | 
			
		||||
    mbedtls_ssl_set_bio(&_ssl, this, ssl_send, ssl_recv, nullptr);
 | 
			
		||||
 | 
			
		||||
    _tls_initialized = true;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -541,7 +535,7 @@ void TLSSocketWrapper::set_ca_chain(mbedtls_x509_crt *crt)
 | 
			
		|||
    }
 | 
			
		||||
    _cacert = crt;
 | 
			
		||||
    tr_debug("mbedtls_ssl_conf_ca_chain()");
 | 
			
		||||
    mbedtls_ssl_conf_ca_chain(get_ssl_config(), _cacert, NULL);
 | 
			
		||||
    mbedtls_ssl_conf_ca_chain(get_ssl_config(), _cacert, nullptr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif /* MBEDTLS_X509_CRT_PARSE_C */
 | 
			
		||||
| 
						 | 
				
			
			@ -559,9 +553,9 @@ mbedtls_ssl_config *TLSSocketWrapper::get_ssl_config()
 | 
			
		|||
                                               MBEDTLS_SSL_TRANSPORT_STREAM,
 | 
			
		||||
                                               MBEDTLS_SSL_PRESET_DEFAULT)) != 0) {
 | 
			
		||||
            print_mbedtls_error("mbedtls_ssl_config_defaults", ret);
 | 
			
		||||
            set_ssl_config(NULL);
 | 
			
		||||
            set_ssl_config(nullptr);
 | 
			
		||||
            MBED_ERROR(MBED_MAKE_ERROR(MBED_MODULE_NETWORK_STACK, MBED_ERROR_CODE_OUT_OF_MEMORY), "mbedtls_ssl_config_defaults() failed");
 | 
			
		||||
            return NULL;
 | 
			
		||||
            return nullptr;
 | 
			
		||||
        }
 | 
			
		||||
        /* It is possible to disable authentication by passing
 | 
			
		||||
         * MBEDTLS_SSL_VERIFY_NONE in the call to mbedtls_ssl_conf_authmode()
 | 
			
		||||
| 
						 | 
				
			
			@ -611,7 +605,7 @@ nsapi_error_t TLSSocketWrapper::close()
 | 
			
		|||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    _transport = NULL;
 | 
			
		||||
    _transport = nullptr;
 | 
			
		||||
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -685,7 +679,7 @@ Socket *TLSSocketWrapper::accept(nsapi_error_t *err)
 | 
			
		|||
    if (err) {
 | 
			
		||||
        *err = NSAPI_ERROR_UNSUPPORTED;
 | 
			
		||||
    }
 | 
			
		||||
    return NULL;
 | 
			
		||||
    return nullptr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
nsapi_error_t TLSSocketWrapper::listen(int)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -63,7 +63,7 @@ public:
 | 
			
		|||
     *
 | 
			
		||||
     *  Closes socket wrapper if the socket wrapper is still open.
 | 
			
		||||
     */
 | 
			
		||||
    virtual ~TLSSocketWrapper();
 | 
			
		||||
    ~TLSSocketWrapper() override;
 | 
			
		||||
 | 
			
		||||
    /** Set hostname.
 | 
			
		||||
     *
 | 
			
		||||
| 
						 | 
				
			
			@ -133,7 +133,7 @@ public:
 | 
			
		|||
     *  @retval         NSAPI_ERROR_DEVICE_ERROR in case of tls-related errors.
 | 
			
		||||
     *                  See @ref mbedtls_ssl_write.
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t send(const void *data, nsapi_size_t size);
 | 
			
		||||
    nsapi_error_t send(const void *data, nsapi_size_t size) override;
 | 
			
		||||
 | 
			
		||||
    /** Receive data over a TLS socket.
 | 
			
		||||
     *
 | 
			
		||||
| 
						 | 
				
			
			@ -151,10 +151,10 @@ public:
 | 
			
		|||
     *  @return         0 if no data is available to be received
 | 
			
		||||
     *                  and the peer has performed an orderly shutdown.
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_size_or_error_t recv(void *data, nsapi_size_t size);
 | 
			
		||||
    nsapi_size_or_error_t recv(void *data, nsapi_size_t size) override;
 | 
			
		||||
 | 
			
		||||
    /* = Functions inherited from Socket = */
 | 
			
		||||
    virtual nsapi_error_t close();
 | 
			
		||||
    nsapi_error_t close() override;
 | 
			
		||||
    /**
 | 
			
		||||
     *  Connect the transport socket and start handshake.
 | 
			
		||||
     *
 | 
			
		||||
| 
						 | 
				
			
			@ -163,19 +163,19 @@ public:
 | 
			
		|||
     *
 | 
			
		||||
     *  See @ref Socket::connect and @ref start_handshake
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t connect(const SocketAddress &address = SocketAddress());
 | 
			
		||||
    virtual nsapi_size_or_error_t sendto(const SocketAddress &address, const void *data, nsapi_size_t size);
 | 
			
		||||
    virtual nsapi_size_or_error_t recvfrom(SocketAddress *address,
 | 
			
		||||
                                           void *data, nsapi_size_t size);
 | 
			
		||||
    virtual nsapi_error_t bind(const SocketAddress &address);
 | 
			
		||||
    virtual void set_blocking(bool blocking);
 | 
			
		||||
    virtual void set_timeout(int timeout);
 | 
			
		||||
    virtual void sigio(mbed::Callback<void()> func);
 | 
			
		||||
    virtual nsapi_error_t setsockopt(int level, int optname, const void *optval, unsigned optlen);
 | 
			
		||||
    virtual nsapi_error_t getsockopt(int level, int optname, void *optval, unsigned *optlen);
 | 
			
		||||
    virtual Socket *accept(nsapi_error_t *error = NULL);
 | 
			
		||||
    virtual nsapi_error_t listen(int backlog = 1);
 | 
			
		||||
    virtual nsapi_error_t getpeername(SocketAddress *address);
 | 
			
		||||
    nsapi_error_t connect(const SocketAddress &address = SocketAddress()) override;
 | 
			
		||||
    nsapi_size_or_error_t sendto(const SocketAddress &address, const void *data, nsapi_size_t size) override;
 | 
			
		||||
    nsapi_size_or_error_t recvfrom(SocketAddress *address,
 | 
			
		||||
                                   void *data, nsapi_size_t size) override;
 | 
			
		||||
    nsapi_error_t bind(const SocketAddress &address) override;
 | 
			
		||||
    void set_blocking(bool blocking) override;
 | 
			
		||||
    void set_timeout(int timeout) override;
 | 
			
		||||
    void sigio(mbed::Callback<void()> func) override;
 | 
			
		||||
    nsapi_error_t setsockopt(int level, int optname, const void *optval, unsigned optlen) override;
 | 
			
		||||
    nsapi_error_t getsockopt(int level, int optname, void *optval, unsigned *optlen) override;
 | 
			
		||||
    Socket *accept(nsapi_error_t *error = NULL) override;
 | 
			
		||||
    nsapi_error_t listen(int backlog = 1) override;
 | 
			
		||||
    nsapi_error_t getpeername(SocketAddress *address) override;
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_X509_CRT_PARSE_C) || defined(DOXYGEN_ONLY)
 | 
			
		||||
    /** Get own certificate directly from Mbed TLS.
 | 
			
		||||
| 
						 | 
				
			
			@ -296,13 +296,13 @@ private:
 | 
			
		|||
    rtos::EventFlags _event_flag;
 | 
			
		||||
    mbed::Callback<void()> _sigio;
 | 
			
		||||
    Socket *_transport;
 | 
			
		||||
    int _timeout;
 | 
			
		||||
    int _timeout = -1;
 | 
			
		||||
 | 
			
		||||
#ifdef MBEDTLS_X509_CRT_PARSE_C
 | 
			
		||||
    mbedtls_x509_crt *_cacert;
 | 
			
		||||
    mbedtls_x509_crt *_clicert;
 | 
			
		||||
    mbedtls_x509_crt *_cacert = nullptr;
 | 
			
		||||
    mbedtls_x509_crt *_clicert = nullptr;
 | 
			
		||||
#endif
 | 
			
		||||
    mbedtls_ssl_config *_ssl_conf;
 | 
			
		||||
    mbedtls_ssl_config *_ssl_conf = nullptr;
 | 
			
		||||
 | 
			
		||||
    bool _connect_transport: 1;
 | 
			
		||||
    bool _close_transport: 1;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -50,7 +50,7 @@ public:
 | 
			
		|||
                          "The UDPSocket(S *stack) constructor is deprecated"
 | 
			
		||||
                          "It discards the open() call return value."
 | 
			
		||||
                          "Use another constructor and call open() explicitly, instead.")
 | 
			
		||||
    UDPSocket(S *stack)
 | 
			
		||||
    UDPSocket(S *stack) : UDPSocket()
 | 
			
		||||
    {
 | 
			
		||||
        open(stack);
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -58,7 +58,7 @@ public:
 | 
			
		|||
#if !defined(DOXYGEN_ONLY)
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    virtual nsapi_protocol_t get_proto();
 | 
			
		||||
    nsapi_protocol_t get_proto() override;
 | 
			
		||||
 | 
			
		||||
#endif //!defined(DOXYGEN_ONLY)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,9 +1,6 @@
 | 
			
		|||
#include "netsocket/WiFiAccessPoint.h"
 | 
			
		||||
 | 
			
		||||
WiFiAccessPoint::WiFiAccessPoint()
 | 
			
		||||
{
 | 
			
		||||
    memset(&_ap, 0, sizeof(_ap));
 | 
			
		||||
}
 | 
			
		||||
WiFiAccessPoint::WiFiAccessPoint() = default;
 | 
			
		||||
 | 
			
		||||
WiFiAccessPoint::WiFiAccessPoint(nsapi_wifi_ap_t ap)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -64,7 +64,7 @@ public:
 | 
			
		|||
    uint8_t get_channel() const;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    nsapi_wifi_ap_t _ap;
 | 
			
		||||
    nsapi_wifi_ap_t _ap {};
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -81,13 +81,13 @@ public:
 | 
			
		|||
     *
 | 
			
		||||
     *  @return         NSAPI_ERROR_OK on success, negative error code on failure.
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t connect() = 0;
 | 
			
		||||
    nsapi_error_t connect() override = 0;
 | 
			
		||||
 | 
			
		||||
    /** Stop the interface.
 | 
			
		||||
     *
 | 
			
		||||
     *  @return         NSAPI_ERROR_OK on success, or error code on failure.
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t disconnect() = 0;
 | 
			
		||||
    nsapi_error_t disconnect() override = 0;
 | 
			
		||||
 | 
			
		||||
    /** Scan for available networks.
 | 
			
		||||
     *
 | 
			
		||||
| 
						 | 
				
			
			@ -106,7 +106,7 @@ public:
 | 
			
		|||
 | 
			
		||||
    /** @copydoc NetworkInterface::wifiInterface
 | 
			
		||||
     */
 | 
			
		||||
    virtual WiFiInterface *wifiInterface()
 | 
			
		||||
    WiFiInterface *wifiInterface() final
 | 
			
		||||
    {
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -134,7 +134,7 @@ public:
 | 
			
		|||
     * NetworkInterface::get_default_instance() (see nsapi JSON
 | 
			
		||||
     * configuration).
 | 
			
		||||
     */
 | 
			
		||||
    virtual void set_default_parameters();
 | 
			
		||||
    void set_default_parameters() override;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -75,16 +75,16 @@ bool ppp_service::prepare_event_queue()
 | 
			
		|||
 | 
			
		||||
    return true;
 | 
			
		||||
#else
 | 
			
		||||
    static events::EventQueue *event_queue = NULL;
 | 
			
		||||
    static rtos::Thread *event_thread = NULL;
 | 
			
		||||
    static events::EventQueue *event_queue = nullptr;
 | 
			
		||||
    static rtos::Thread *event_thread = nullptr;
 | 
			
		||||
    // Already prepared
 | 
			
		||||
    if (event_queue && event_thread) {
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Used for incoming data, timers, link status callback, power up callback
 | 
			
		||||
    event_queue = new events::EventQueue(10 * EVENTS_EVENT_SIZE, NULL);
 | 
			
		||||
    event_thread = new rtos::Thread(osPriorityNormal, PPP_THREAD_STACKSIZE, NULL, "ppp");
 | 
			
		||||
    event_queue = new events::EventQueue(10 * EVENTS_EVENT_SIZE, nullptr);
 | 
			
		||||
    event_thread = new rtos::Thread(osPriorityNormal, PPP_THREAD_STACKSIZE, nullptr, "ppp");
 | 
			
		||||
 | 
			
		||||
    if (event_thread->start(callback(event_queue, &events::EventQueue::dispatch_forever)) != osOK) {
 | 
			
		||||
        delete event_thread;
 | 
			
		||||
| 
						 | 
				
			
			@ -179,7 +179,7 @@ void ppp_service::ppp_input()
 | 
			
		|||
        ppp_trace_to_ascii_hex_dump(INPUT_BUFFER, len, reinterpret_cast<char *>(buffer));
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
        pppos_input(static_cast<ppp_pcb *>(ppp_service_pcb), buffer, len);
 | 
			
		||||
        pppos_input(ppp_service_pcb, buffer, len);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -195,10 +195,8 @@ void ppp_service::ppp_stream_sigio_callback()
 | 
			
		|||
 | 
			
		||||
void ppp_service::ppp_handle_modem_hangup()
 | 
			
		||||
{
 | 
			
		||||
    ppp_pcb *pcb = static_cast<ppp_pcb *>(ppp_service_pcb);
 | 
			
		||||
 | 
			
		||||
    if (pcb->phase != PPP_PHASE_DEAD) {
 | 
			
		||||
        ppp_close(pcb, 1);
 | 
			
		||||
    if (ppp_service_pcb->phase != PPP_PHASE_DEAD) {
 | 
			
		||||
        ppp_close(ppp_service_pcb, 1);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -303,15 +301,15 @@ nsapi_error_t ppp_service::ppp_stack_if_init()
 | 
			
		|||
    ppp_init();
 | 
			
		||||
 | 
			
		||||
    if (!ppp_service_pcb) {
 | 
			
		||||
        ppp_service_pcb = pppos_create(static_cast<netif *>(ppp_service_netif),
 | 
			
		||||
                                       ppp_output, ppp_link_status, NULL);
 | 
			
		||||
        ppp_service_pcb = pppos_create(ppp_service_netif,
 | 
			
		||||
                                       ppp_output, ppp_link_status, nullptr);
 | 
			
		||||
        if (!ppp_service_pcb) {
 | 
			
		||||
            return NSAPI_ERROR_DEVICE_ERROR;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if PPP_IPV4_SUPPORT
 | 
			
		||||
    ppp_pcb *pcb = static_cast<ppp_pcb *>(ppp_service_pcb);
 | 
			
		||||
    ppp_pcb *pcb = ppp_service_pcb;
 | 
			
		||||
 | 
			
		||||
#if PPP_IPV6_SUPPORT
 | 
			
		||||
    if (ppp_service_stack != IPV6_STACK) {
 | 
			
		||||
| 
						 | 
				
			
			@ -334,7 +332,7 @@ nsapi_error_t ppp_service::ppp_stack_if_init()
 | 
			
		|||
 | 
			
		||||
nsapi_error_t ppp_service::ppp_if_connect()
 | 
			
		||||
{
 | 
			
		||||
    ppp_pcb *pcb = static_cast<ppp_pcb *>(ppp_service_pcb);
 | 
			
		||||
    ppp_pcb *pcb = ppp_service_pcb;
 | 
			
		||||
 | 
			
		||||
#if PPP_AUTH_SUPPORT
 | 
			
		||||
    ppp_set_auth(pcb, PPPAUTHTYPE_ANY, ppp_service_uname, ppp_service_password);
 | 
			
		||||
| 
						 | 
				
			
			@ -354,12 +352,10 @@ nsapi_error_t ppp_service::ppp_if_connect()
 | 
			
		|||
 | 
			
		||||
nsapi_error_t ppp_service::ppp_if_disconnect()
 | 
			
		||||
{
 | 
			
		||||
    ppp_pcb *pcb = static_cast<ppp_pcb *>(ppp_service_pcb);
 | 
			
		||||
 | 
			
		||||
    err_t ret = ERR_OK;
 | 
			
		||||
    if (ppp_service_active) {
 | 
			
		||||
        ppp_service_terminating = true;
 | 
			
		||||
        ret = ppp_close(pcb, 0);
 | 
			
		||||
        ret = ppp_close(ppp_service_pcb, 0);
 | 
			
		||||
        if (ret == ERR_OK) {
 | 
			
		||||
            /* close call made, now let's catch the response in the status callback */
 | 
			
		||||
            ppp_service_close_sem.try_acquire_for(PPP_TERMINATION_TIMEOUT);
 | 
			
		||||
| 
						 | 
				
			
			@ -371,20 +367,10 @@ nsapi_error_t ppp_service::ppp_if_disconnect()
 | 
			
		|||
 | 
			
		||||
ppp_service::ppp_service()
 | 
			
		||||
{
 | 
			
		||||
    ppp_service_stream = NULL;
 | 
			
		||||
    ppp_service_event_queue = NULL;
 | 
			
		||||
 | 
			
		||||
    ppp_service_netif = static_cast<netif *>(malloc(sizeof(netif)));
 | 
			
		||||
    ppp_service_netif = new (std::nothrow) netif{};
 | 
			
		||||
    if (ppp_service_netif) {
 | 
			
		||||
        memset(ppp_service_netif, 0, sizeof(netif));
 | 
			
		||||
        ppp_service_netif->service_ptr = static_cast<void *>(this);
 | 
			
		||||
        ppp_service_netif->service_ptr = this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ppp_service_pcb = NULL;
 | 
			
		||||
    ppp_service_stack = IPV4_STACK;
 | 
			
		||||
    ppp_service_uname = NULL;
 | 
			
		||||
    ppp_service_password = NULL;
 | 
			
		||||
    memory_manager = NULL;
 | 
			
		||||
    ppp_service_active = false;
 | 
			
		||||
    ppp_service_event_queued = false;
 | 
			
		||||
    ppp_service_terminating = false;
 | 
			
		||||
| 
						 | 
				
			
			@ -393,14 +379,12 @@ ppp_service::ppp_service()
 | 
			
		|||
 | 
			
		||||
bool ppp_service::link_out(net_stack_mem_buf_t *buf, nsapi_ip_stack_t ip_stack)
 | 
			
		||||
{
 | 
			
		||||
    netif *serv_netif = static_cast<netif *>(ppp_service_netif);
 | 
			
		||||
 | 
			
		||||
    if (ppp_service_terminating) {
 | 
			
		||||
        memory_manager->free(buf);
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    struct pbuf *p = static_cast<struct pbuf *>(ppp_memory_buffer_convert_to(memory_manager, buf));
 | 
			
		||||
    struct pbuf *p = ppp_memory_buffer_convert_to(memory_manager, buf);
 | 
			
		||||
    if (!p) {
 | 
			
		||||
        memory_manager->free(buf);
 | 
			
		||||
        return true;
 | 
			
		||||
| 
						 | 
				
			
			@ -408,14 +392,14 @@ bool ppp_service::link_out(net_stack_mem_buf_t *buf, nsapi_ip_stack_t ip_stack)
 | 
			
		|||
 | 
			
		||||
#if PPP_IPV4_SUPPORT && PPP_IPV6_SUPPORT
 | 
			
		||||
    if (ip_stack == IPV4_STACK) {
 | 
			
		||||
        serv_netif->output(serv_netif, p, NULL);
 | 
			
		||||
        ppp_service_netif->output(ppp_service_netif, p, nullptr);
 | 
			
		||||
    } else {
 | 
			
		||||
        serv_netif->output_ip6(serv_netif, p, NULL);
 | 
			
		||||
        ppp_service_netif->output_ip6(ppp_service_netif, p, nullptr);
 | 
			
		||||
    }
 | 
			
		||||
#elif PPP_IPV4_SUPPORT
 | 
			
		||||
    serv_netif->output(serv_netif, p, NULL);
 | 
			
		||||
    ppp_service_netif->output(ppp_service_netif, p, nullptr);
 | 
			
		||||
#elif PPP_IPV6_SUPPORT
 | 
			
		||||
    serv_netif->output_ip6(serv_netif, p, NULL);
 | 
			
		||||
    ppp_service_netif->output_ip6(ppp_service_netif, p, nullptr);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    ppp_memory_buffer_free(p); // Not done on PPP lower layers
 | 
			
		||||
| 
						 | 
				
			
			@ -460,8 +444,7 @@ uint32_t ppp_service::get_mtu_size()
 | 
			
		|||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    netif *serv_netif = static_cast<netif *>(ppp_service_netif);
 | 
			
		||||
    return serv_netif->mtu;
 | 
			
		||||
    return ppp_service_netif->mtu;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint32_t ppp_service::get_align_preference() const
 | 
			
		||||
| 
						 | 
				
			
			@ -518,34 +501,30 @@ void ppp_service::set_credentials(const char *uname, const char *password)
 | 
			
		|||
    if (strlen(uname) > 0) {
 | 
			
		||||
        ppp_service_uname = uname;
 | 
			
		||||
    } else {
 | 
			
		||||
        ppp_service_uname = NULL;
 | 
			
		||||
        ppp_service_uname = nullptr;
 | 
			
		||||
    }
 | 
			
		||||
    if (strlen(password) > 0) {
 | 
			
		||||
        ppp_service_password = password;
 | 
			
		||||
    } else {
 | 
			
		||||
        password = NULL;
 | 
			
		||||
        password = nullptr;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const nsapi_addr_t *ppp_service::get_ip_address(nsapi_version_t version)
 | 
			
		||||
{
 | 
			
		||||
#if PPP_IPV6_SUPPORT || PPP_IPV4_SUPPORT
 | 
			
		||||
    netif *serv_netif = static_cast<netif *>(ppp_service_netif);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if PPP_IPV6_SUPPORT
 | 
			
		||||
    if (version == NSAPI_IPv6 && serv_netif->ipv6_addr.version == NSAPI_IPv6) {
 | 
			
		||||
        return &serv_netif->ipv6_addr;
 | 
			
		||||
    if (version == NSAPI_IPv6 && ppp_service_netif->ipv6_addr.version == NSAPI_IPv6) {
 | 
			
		||||
        return &ppp_service_netif->ipv6_addr;
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if PPP_IPV4_SUPPORT
 | 
			
		||||
    if (version == NSAPI_IPv4 && serv_netif->ipv4_addr.version == NSAPI_IPv4) {
 | 
			
		||||
        return &serv_netif->ipv4_addr;
 | 
			
		||||
    if (version == NSAPI_IPv4 && ppp_service_netif->ipv4_addr.version == NSAPI_IPv4) {
 | 
			
		||||
        return &ppp_service_netif->ipv4_addr;
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    return NULL;
 | 
			
		||||
    return nullptr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const nsapi_addr_t *ppp_service::get_netmask()
 | 
			
		||||
| 
						 | 
				
			
			@ -556,7 +535,7 @@ const nsapi_addr_t *ppp_service::get_netmask()
 | 
			
		|||
    }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    return NULL;
 | 
			
		||||
    return nullptr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const nsapi_addr_t *ppp_service::get_gateway()
 | 
			
		||||
| 
						 | 
				
			
			@ -567,21 +546,21 @@ const nsapi_addr_t *ppp_service::get_gateway()
 | 
			
		|||
    }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    return NULL;
 | 
			
		||||
    return nullptr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const nsapi_addr_t *ppp_service::get_dns_server(uint8_t index)
 | 
			
		||||
{
 | 
			
		||||
#if PPP_IPV4_SUPPORT
 | 
			
		||||
    if (index > 1) {
 | 
			
		||||
        return NULL;
 | 
			
		||||
        return nullptr;
 | 
			
		||||
    }
 | 
			
		||||
    if (ppp_service_netif->ipv4_dns_server[index].version == NSAPI_IPv4) {
 | 
			
		||||
        return &ppp_service_netif->ipv4_dns_server[index];
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    return NULL;
 | 
			
		||||
    return nullptr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ppp_service::link_state(bool up)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,12 +26,15 @@
 | 
			
		|||
#include "events/EventQueue.h"
 | 
			
		||||
#include "netsocket/PPP.h"
 | 
			
		||||
 | 
			
		||||
struct netif;
 | 
			
		||||
struct ppp_pcb_s;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This interface should be used to abstract low level access to networking hardware
 | 
			
		||||
 * All operations receive a `void *` hardware pointer which an ppp device provides when
 | 
			
		||||
 * it is registered with a stack.
 | 
			
		||||
 */
 | 
			
		||||
class ppp_service : public PPP {
 | 
			
		||||
class ppp_service final : public PPP {
 | 
			
		||||
public:
 | 
			
		||||
    ppp_service();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -58,7 +61,7 @@ public:
 | 
			
		|||
     *
 | 
			
		||||
     * @return     MTU in bytes
 | 
			
		||||
     */
 | 
			
		||||
    virtual uint32_t get_mtu_size();
 | 
			
		||||
    uint32_t get_mtu_size() override;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gets memory buffer alignment preference
 | 
			
		||||
| 
						 | 
				
			
			@ -66,7 +69,7 @@ public:
 | 
			
		|||
     * Gets preferred memory buffer alignment of the ppp device.
 | 
			
		||||
     * @return         Memory alignment requirement in bytes
 | 
			
		||||
     */
 | 
			
		||||
    virtual uint32_t get_align_preference() const;
 | 
			
		||||
    uint32_t get_align_preference() const override;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Return interface name
 | 
			
		||||
| 
						 | 
				
			
			@ -74,7 +77,7 @@ public:
 | 
			
		|||
     * @param name Pointer to where the name should be written
 | 
			
		||||
     * @param size Maximum number of characters to copy
 | 
			
		||||
     */
 | 
			
		||||
    virtual void get_ifname(char *name, uint8_t size) const;
 | 
			
		||||
    void get_ifname(char *name, uint8_t size) const override;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Sends the packet over the link
 | 
			
		||||
| 
						 | 
				
			
			@ -84,111 +87,111 @@ public:
 | 
			
		|||
     * @param buf  Packet to be send
 | 
			
		||||
     * @return     True if the packet was send successfully, false otherwise
 | 
			
		||||
     */
 | 
			
		||||
    virtual bool link_out(net_stack_mem_buf_t *buf, nsapi_ip_stack_t ip_stack);
 | 
			
		||||
    bool link_out(net_stack_mem_buf_t *buf, nsapi_ip_stack_t ip_stack) override;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Initializes the hardware
 | 
			
		||||
     *
 | 
			
		||||
     * @return True on success, False in case of an error.
 | 
			
		||||
     */
 | 
			
		||||
    virtual bool power_up();
 | 
			
		||||
    bool power_up() override;
 | 
			
		||||
    /**
 | 
			
		||||
     * Deinitializes the hardware
 | 
			
		||||
     *
 | 
			
		||||
     */
 | 
			
		||||
    virtual void power_down();
 | 
			
		||||
    void power_down() override;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Sets a callback that needs to be called for packets received for that interface
 | 
			
		||||
     *
 | 
			
		||||
     * @param input_cb Function to be register as a callback
 | 
			
		||||
     */
 | 
			
		||||
    virtual void set_link_input_cb(ppp_link_input_cb_t input_cb);
 | 
			
		||||
    void set_link_input_cb(ppp_link_input_cb_t input_cb) override;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Sets a callback that needs to be called on link status changes for given interface
 | 
			
		||||
     *
 | 
			
		||||
     * @param state_cb Function to be register as a callback
 | 
			
		||||
     */
 | 
			
		||||
    virtual void set_link_state_cb(ppp_link_state_change_cb_t state_cb);
 | 
			
		||||
    void set_link_state_cb(ppp_link_state_change_cb_t state_cb) override;
 | 
			
		||||
 | 
			
		||||
    /** Sets memory manager that is used to handle memory buffers
 | 
			
		||||
     *
 | 
			
		||||
     * @param mem_mngr Pointer to memory manager
 | 
			
		||||
     */
 | 
			
		||||
    virtual void set_memory_manager(NetStackMemoryManager &mem_mngr);
 | 
			
		||||
    void set_memory_manager(NetStackMemoryManager &mem_mngr) override;
 | 
			
		||||
 | 
			
		||||
    /** Sets file stream used to communicate with modem
 | 
			
		||||
     *
 | 
			
		||||
     * @param stream Pointer to file handle
 | 
			
		||||
     */
 | 
			
		||||
    virtual void set_stream(mbed::FileHandle *stream);
 | 
			
		||||
    void set_stream(mbed::FileHandle *stream) override;
 | 
			
		||||
 | 
			
		||||
    /** Sets IP protocol versions of IP stack
 | 
			
		||||
     *
 | 
			
		||||
     * @param ip_stack IP protocol version
 | 
			
		||||
     */
 | 
			
		||||
    virtual void set_ip_stack(nsapi_ip_stack_t ip_stack);
 | 
			
		||||
    void set_ip_stack(nsapi_ip_stack_t ip_stack) override;
 | 
			
		||||
 | 
			
		||||
    /** Sets user name and password for PPP protocol
 | 
			
		||||
     *
 | 
			
		||||
     * @param uname    User name
 | 
			
		||||
     * @param password Password
 | 
			
		||||
     */
 | 
			
		||||
    virtual void set_credentials(const char *uname, const char *password);
 | 
			
		||||
    void set_credentials(const char *uname, const char *password);
 | 
			
		||||
 | 
			
		||||
    /** Gets local IP address
 | 
			
		||||
     *
 | 
			
		||||
     * @param version IP address version
 | 
			
		||||
     * @return        IP address
 | 
			
		||||
     */
 | 
			
		||||
    virtual const nsapi_addr_t *get_ip_address(nsapi_version_t version);
 | 
			
		||||
    const nsapi_addr_t *get_ip_address(nsapi_version_t version) override;
 | 
			
		||||
 | 
			
		||||
    /** Get the local network mask.
 | 
			
		||||
     *
 | 
			
		||||
     *  @return    Local network mask or null if no network mask has been received.
 | 
			
		||||
     */
 | 
			
		||||
    virtual const nsapi_addr_t *get_netmask();
 | 
			
		||||
    const nsapi_addr_t *get_netmask() override;
 | 
			
		||||
 | 
			
		||||
    /** Get the local gateway.
 | 
			
		||||
     *
 | 
			
		||||
     *  @return    Local gateway or null if no network mask has been received.
 | 
			
		||||
     */
 | 
			
		||||
    virtual const nsapi_addr_t *get_gateway();
 | 
			
		||||
    const nsapi_addr_t *get_gateway() override;
 | 
			
		||||
 | 
			
		||||
    /** Gets DNS server address
 | 
			
		||||
     *
 | 
			
		||||
     * @param index Server index
 | 
			
		||||
     */
 | 
			
		||||
    virtual const nsapi_addr_t *get_dns_server(uint8_t index);
 | 
			
		||||
    const nsapi_addr_t *get_dns_server(uint8_t index) override;
 | 
			
		||||
 | 
			
		||||
    /** Link state indication from PPP
 | 
			
		||||
     *
 | 
			
		||||
     * @param  up       Link status
 | 
			
		||||
     */
 | 
			
		||||
    virtual void link_state(bool up);
 | 
			
		||||
    void link_state(bool up);
 | 
			
		||||
 | 
			
		||||
    /** Received IP packet from PPP to stack
 | 
			
		||||
     *
 | 
			
		||||
     * @param buf  Received packet
 | 
			
		||||
     */
 | 
			
		||||
    virtual void link_input(net_stack_mem_buf_t *buf);
 | 
			
		||||
    void link_input(net_stack_mem_buf_t *buf);
 | 
			
		||||
 | 
			
		||||
    /** Handle to PPP event queue
 | 
			
		||||
     *
 | 
			
		||||
     *  @return    Event queue
 | 
			
		||||
     */
 | 
			
		||||
    virtual events::EventQueue *event_queue_get();
 | 
			
		||||
    events::EventQueue *event_queue_get();
 | 
			
		||||
 | 
			
		||||
    /** Lock PPP resource
 | 
			
		||||
     *
 | 
			
		||||
     */
 | 
			
		||||
    virtual void resource_lock();
 | 
			
		||||
    void resource_lock();
 | 
			
		||||
 | 
			
		||||
    /** Unlock PPP resource
 | 
			
		||||
     *
 | 
			
		||||
     */
 | 
			
		||||
    virtual void resource_unlock();
 | 
			
		||||
    void resource_unlock();
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -207,19 +210,19 @@ private:
 | 
			
		|||
    nsapi_error_t ppp_if_disconnect();
 | 
			
		||||
 | 
			
		||||
    // Internal data
 | 
			
		||||
    mbed::FileHandle *ppp_service_stream;
 | 
			
		||||
    mbed::FileHandle *ppp_service_stream = nullptr;
 | 
			
		||||
    rtos::Semaphore ppp_service_close_sem;
 | 
			
		||||
    rtos::Mutex ppp_service_mutex;
 | 
			
		||||
    events::EventQueue *ppp_service_event_queue;
 | 
			
		||||
    NetStackMemoryManager *memory_manager; /**< Memory manager */
 | 
			
		||||
    events::EventQueue *ppp_service_event_queue = nullptr;
 | 
			
		||||
    NetStackMemoryManager *memory_manager = nullptr; /**< Memory manager */
 | 
			
		||||
    ppp_link_input_cb_t ppp_link_input_cb; /**< Callback for incoming data */
 | 
			
		||||
    ppp_link_state_change_cb_t ppp_link_state_cb; /**< Link state change callback */
 | 
			
		||||
 | 
			
		||||
    struct netif *ppp_service_netif;
 | 
			
		||||
    void *ppp_service_pcb;
 | 
			
		||||
    nsapi_ip_stack_t ppp_service_stack;
 | 
			
		||||
    const char *ppp_service_uname;
 | 
			
		||||
    const char *ppp_service_password;
 | 
			
		||||
    netif *ppp_service_netif;
 | 
			
		||||
    ppp_pcb_s *ppp_service_pcb = nullptr;
 | 
			
		||||
    nsapi_ip_stack_t ppp_service_stack = IPV4_STACK;
 | 
			
		||||
    const char *ppp_service_uname = nullptr;
 | 
			
		||||
    const char *ppp_service_password = nullptr;
 | 
			
		||||
    nsapi_error_t ppp_service_connect_error_code;
 | 
			
		||||
    bool ppp_service_active : 1;
 | 
			
		||||
    bool ppp_service_event_queued : 1;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue