NetworkSocketAPI
Dependents: HelloWizFi250Interface
Fork of NetworkSocketAPI by
Revision 107:8b26e40c6e34, committed 2016-04-19
- Comitter:
- Christopher Haster
- Date:
- Tue Apr 19 18:34:42 2016 -0500
- Parent:
- 106:c388f74d5111
- Child:
- 108:2e5eccf30a84
- Commit message:
- Removed trailing files
Changed in this revision
--- a/CellularInterface.h Tue Apr 19 18:30:33 2016 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,45 +0,0 @@ -/* CellularInterface - * Copyright (c) 2015 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef CELLULAR_INTERFACE_H -#define CELLULAR_INTERFACE_H - -#include "NetworkInterface.h" - -/** CellularInterface class - * - * Common interface that is shared between ethernet hardware - */ -class CellularInterface : public NetworkInterface -{ -public: - /** Start the interface - * - * @param apn Optional name of the network to connect to - * @param username Optional username for your APN - * @param password Optional password for your APN - * @return 0 on success, negative error code on failure - */ - virtual int connect(const char *apn = 0, const char *username = 0, const char *password = 0) = 0; - - /** Stop the interface - * - * @return 0 on success, negative error code on failure - */ - virtual int disconnect() = 0; -}; - -#endif
--- a/EthernetInterface.h Tue Apr 19 18:30:33 2016 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,42 +0,0 @@ -/* EthernetInterface - * Copyright (c) 2015 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef ETHERNET_INTERFACE_H -#define ETHERNET_INTERFACE_H - -#include "NetworkInterface.h" - -/** EthernetInterface class - * - * Common interface that is shared between ethernet hardware. - */ -class EthernetInterface : public NetworkInterface -{ -public: - /** Start the interface - * - * @return 0 on success, negative error code on failure - */ - virtual int connect() = 0; - - /** Stop the interface - * - * @return 0 on success, negative error code on failure - */ - virtual int disconnect() = 0; -}; - -#endif
--- a/MeshInterface.h Tue Apr 19 18:30:33 2016 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,42 +0,0 @@ -/* MeshInterface - * Copyright (c) 2015 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef MESH_INTERFACE_H -#define MESH_INTERFACE_H - -#include "NetworkInterface.h" - -/** MeshInterface class - * - * Common interface that is shared between mesh hardware - */ -class MeshInterface : public NetworkInterface -{ -public: - /** Start the interface - * - * @return 0 on success, negative on failure - */ - virtual int connect() = 0; - - /** Stop the interface - * - * @return 0 on success, negative on failure - */ - virtual int disconnect() = 0; -}; - -#endif
--- a/NetworkInterface.cpp Tue Apr 19 18:30:33 2016 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,50 +0,0 @@ -/* Socket - * Copyright (c) 2015 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "DnsQuery.h" -#include "mbed.h" - -int NetworkInterface::gethostbyname(SocketAddress *address, const char *name) -{ - char buffer[NSAPI_IP_SIZE]; - int err = dnsQuery(this, name, buffer); - if (err) { - return err; - } - - address->set_ip_address(buffer); - return 0; -} - -int NetworkInterface::setstackopt(int level, int optname, const void *optval, unsigned optlen) -{ - return NSAPI_ERROR_UNSUPPORTED; -} - -int NetworkInterface::getstackopt(int level, int optname, void *optval, unsigned *optlen) -{ - return NSAPI_ERROR_UNSUPPORTED; -} - -int NetworkInterface::setsockopt(void *handle, int level, int optname, const void *optval, unsigned optlen) -{ - return NSAPI_ERROR_UNSUPPORTED; -} - -int NetworkInterface::getsockopt(void *handle, int level, int optname, void *optval, unsigned *optlen) -{ - return NSAPI_ERROR_UNSUPPORTED; -}
--- a/NetworkInterface.h Tue Apr 19 18:30:33 2016 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,327 +0,0 @@ -/* NetworkInterface - * Copyright (c) 2015 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef NETWORK_INTERFACE_H -#define NETWORK_INTERFACE_H - -#include "mbed.h" -#include "SocketAddress.h" - - -/** Enum of standardized error codes - * - * Valid error codes have negative values and may - * be returned by any network operation. - * - * @enum nsapi_error_t - */ -enum nsapi_error_t { - NSAPI_ERROR_WOULD_BLOCK = -3001, /*!< no data is not available but call is non-blocking */ - NSAPI_ERROR_UNSUPPORTED = -3002, /*!< unsupported configuration */ - NSAPI_ERROR_NO_CONNECTION = -3003, /*!< not connected to a network */ - NSAPI_ERROR_NO_SOCKET = -3004, /*!< socket not available for use */ - NSAPI_ERROR_NO_ADDRESS = -3005, /*!< IP address is not known */ - NSAPI_ERROR_NO_MEMORY = -3006, /*!< memory resource not available */ - NSAPI_ERROR_DNS_FAILURE = -3007, /*!< DNS failed to complete successfully */ - NSAPI_ERROR_DHCP_FAILURE = -3008, /*!< DHCP failed to complete successfully */ - NSAPI_ERROR_AUTH_FAILURE = -3009, /*!< connection to access point faield */ - NSAPI_ERROR_DEVICE_ERROR = -3010, /*!< failure interfacing with the network procesor */ -}; - -/** Enum of socket protocols - * - * The socket protocol specifies a particular protocol to - * be used with a newly created socket. - * - * @enum nsapi_protocol_t - */ -enum nsapi_protocol_t { - NSAPI_TCP, /*!< Socket is of TCP type */ - NSAPI_UDP, /*!< Socket is of UDP type */ -}; - -/** Maximum size of MAC address representation - */ -#define NSAPI_MAC_SIZE 18 - -/** Maximum number of bytes for MAC address - */ -#define NSAPI_MAC_BYTES 6 - - -/** NetworkInterface class - * - * Common interface that is shared between hardware that - * can connect to a network over IP. By implementing the - * NetworkInterface, a network stack can be used as a target - * for instantiating network sockets. - */ -class NetworkInterface -{ -public: - virtual ~NetworkInterface() {}; - - /** Get the local IP address - * - * @return Null-terminated representation of the local IP address - * or null if not yet connected - */ - virtual const char *get_ip_address() = 0; - - /** Get the local MAC address - * - * @return Null-terminated representation of the local MAC address - */ - virtual const char *get_mac_address() = 0; - - /** Translates a hostname to an IP address - * - * The hostname may be either a domain name or an IP address. If the - * hostname is an IP address, no network transactions will be performed. - * - * If no stack-specific DNS resolution is provided, the hostname - * will be resolve using a UDP socket on the stack. - * - * @param address Destination for the host SocketAddress - * @param host Hostname to resolve - * @return 0 on success, negative error code on failure - */ - virtual int gethostbyname(SocketAddress *address, const char *host); - - /* Set stack-specific stack options - * - * The setstackopt allow an application to pass stack-specific hints - * to the underlying stack. For unsupported options, - * NSAPI_ERROR_UNSUPPORTED is returned and the stack is unmodified. - * - * @param level Stack-specific protocol level - * @param optname Stack-specific option identifier - * @param optval Option value - * @param optlen Length of the option value - * @return 0 on success, negative error code on failure - */ - virtual int setstackopt(int level, int optname, const void *optval, unsigned optlen); - - /* Get stack-specific stack options - * - * The getstackopt allow an application to retrieve stack-specific hints - * from the underlying stack. For unsupported options, - * NSAPI_ERROR_UNSUPPORTED is returned and optval is unmodified. - * - * @param level Stack-specific protocol level - * @param optname Stack-specific option identifier - * @param optval Destination for option value - * @param optlen Length of the option value - * @return 0 on success, negative error code on failure - */ - virtual int getstackopt(int level, int optname, void *optval, unsigned *optlen); - -protected: - friend class Socket; - friend class UDPSocket; - friend class TCPSocket; - friend class TCPServer; - - /** Opens a socket - * - * Creates a network socket and stores it in the specified handle. - * The handle must be passed to following calls on the socket. - * - * A stack may have a finite number of sockets, in this case - * NSAPI_ERROR_NO_SOCKET is returned if no socket is available. - * - * @param handle Destination for the handle to a newly created socket - * @param proto Protocol of socket to open, NSAPI_TCP or NSAPI_UDP - * @return 0 on success, negative error code on failure - */ - virtual int socket_open(void **handle, nsapi_protocol_t proto) = 0; - - /** Close the socket - * - * Closes any open connection and deallocates any memory associated - * with the socket. - * - * @param handle Socket handle - * @return 0 on success, negative error code on failure - */ - virtual int socket_close(void *handle) = 0; - - /** Bind a specific address to a socket - * - * Binding a socket specifies the address and port on which to recieve - * data. If the IP address is zeroed, only the port is bound. - * - * @param handle Socket handle - * @param address Local address to bind - * @return 0 on success, negative error code on failure. - */ - virtual int socket_bind(void *handle, const SocketAddress &address) = 0; - - /** Listen for connections on a TCP socket - * - * Marks the socket as a passive socket that can be used to accept - * incoming connections. - * - * @param handle Socket handle - * @param backlog Number of pending connections that can be queued - * simultaneously - * @return 0 on success, negative error code on failure - */ - virtual int socket_listen(void *handle, int backlog) = 0; - - /** Connects TCP socket to a remote host - * - * Initiates a connection to a remote server specified by the - * indicated address. - * - * @param handle Socket handle - * @param address The SocketAddress of the remote host - * @return 0 on success, negative error code on failure - */ - virtual int socket_connect(void *handle, const SocketAddress &address) = 0; - - /** Accepts a connection on a TCP socket - * - * The server socket must be bound and set to listen for connections. - * On a new connection, creates a network socket and stores it in the - * specified handle. The handle must be passed to following calls on - * the socket. - * - * A stack may have a finite number of sockets, in this case - * NSAPI_ERROR_NO_SOCKET is returned if no socket is available. - * - * This call is non-blocking. If accept would block, - * NSAPI_ERROR_WOULD_BLOCK is returned immediately. - * - * @param handle Destination for a handle to the newly created sockey - * @param server Socket handle to server to accept from - * @return 0 on success, negative error code on failure - */ - virtual int socket_accept(void **handle, void *server) = 0; - - /** Send data over a TCP socket - * - * The socket must be connected to a remote host. Returns the number of - * bytes sent from the buffer. - * - * This call is non-blocking. If send would block, - * NSAPI_ERROR_WOULD_BLOCK is returned immediately. - * - * @param handle Socket handle - * @param data Buffer of data to send to the host - * @param size Size of the buffer in bytes - * @return Number of sent bytes on success, negative error - * code on failure - */ - virtual int socket_send(void *handle, const void *data, unsigned size) = 0; - - /** Receive data over a TCP socket - * - * The socket must be connected to a remote host. Returns the number of - * bytes received into the buffer. - * - * This call is non-blocking. If recv would block, - * NSAPI_ERROR_WOULD_BLOCK is returned immediately. - * - * @param handle Socket handle - * @param data Destination buffer for data received from the host - * @param size Size of the buffer in bytes - * @return Number of received bytes on success, negative error - * code on failure - */ - virtual int socket_recv(void *handle, void *data, unsigned size) = 0; - - /** Send a packet over a UDP socket - * - * Sends data to the specified address. Returns the number of bytes - * sent from the buffer. - * - * This call is non-blocking. If sendto would block, - * NSAPI_ERROR_WOULD_BLOCK is returned immediately. - * - * @param handle Socket handle - * @param address The SocketAddress of the remote host - * @param data Buffer of data to send to the host - * @param size Size of the buffer in bytes - * @return Number of sent bytes on success, negative error - * code on failure - */ - virtual int socket_sendto(void *handle, const SocketAddress &address, const void *data, unsigned size) = 0; - - /** Receive a packet over a UDP socket - * - * Receives data and stores the source address in address if address - * is not NULL. Returns the number of bytes received into the buffer. - * - * This call is non-blocking. If recvfrom would block, - * NSAPI_ERROR_WOULD_BLOCK is returned immediately. - * - * @param handle Socket handle - * @param address Destination for the source address or NULL - * @param data Destination buffer for data received from the host - * @param size Size of the buffer in bytes - * @return Number of received bytes on success, negative error - * code on failure - */ - virtual int socket_recvfrom(void *handle, SocketAddress *address, void *buffer, unsigned size) = 0; - - /** Register a callback on state change of the socket - * - * The specified callback will be called on state changes such as when - * the socket can recv/send/accept successfully and on when an error - * occurs. The callback may also be called spuriously without reason. - * - * The callback may be called in an interrupt context and should not - * perform expensive operations such as recv/send calls. - * - * @param handle Socket handle - * @param callback Function to call on state change - * @param data Argument to pass to callback - */ - virtual void socket_attach(void *handle, void (*callback)(void *), void *data) = 0; - - /* Set stack-specific socket options - * - * The setsockopt allow an application to pass stack-specific hints - * to the underlying stack. For unsupported options, - * NSAPI_ERROR_UNSUPPORTED is returned and the socket is unmodified. - * - * @param handle Socket handle - * @param level Stack-specific protocol level - * @param optname Stack-specific option identifier - * @param optval Option value - * @param optlen Length of the option value - * @return 0 on success, negative error code on failure - */ - virtual int setsockopt(void *handle, int level, int optname, const void *optval, unsigned optlen); - - /* Get stack-specific socket options - * - * The getstackopt allow an application to retrieve stack-specific hints - * from the underlying stack. For unsupported options, - * NSAPI_ERROR_UNSUPPORTED is returned and optval is unmodified. - * - * @param handle Socket handle - * @param level Stack-specific protocol level - * @param optname Stack-specific option identifier - * @param optval Destination for option value - * @param optlen Length of the option value - * @return 0 on success, negative error code on failure - */ - virtual int getsockopt(void *handle, int level, int optname, void *optval, unsigned *optlen); -}; - -#endif
--- a/WiFiInterface.h Tue Apr 19 18:30:33 2016 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,62 +0,0 @@ -/* WiFiInterface - * Copyright (c) 2015 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef WIFI_INTERFACE_H -#define WIFI_INTERFACE_H - -#include "NetworkInterface.h" - -/** Enum of WiFi encryption types - * - * The security type specifies a particular security to use when - * connected to a WiFi network - * - * @enum nsapi_protocol_t - */ -enum nsapi_security_t { - NSAPI_SECURITY_NONE = 0, /*!< open access point */ - NSAPI_SECURITY_WEP, /*!< phrase conforms to WEP */ - NSAPI_SECURITY_WPA, /*!< phrase conforms to WPA */ - NSAPI_SECURITY_WPA2, /*!< phrase conforms to WPA2 */ -}; - -/** WiFiInterface class - * - * Common interface that is shared between WiFi devices - */ -class WiFiInterface : public NetworkInterface -{ -public: - /** Start the interface - * - * Attempts to connect to a WiFi network. If passphrase is invalid, - * NSAPI_ERROR_AUTH_ERROR is returned. - * - * @param ssid Name of the network to connect to - * @param pass Security passphrase to connect to the network - * @param security Type of encryption for connection - * @return 0 on success, negative error code on failure - */ - virtual int connect(const char *ssid, const char *pass, nsapi_security_t security = NSAPI_SECURITY_NONE) = 0; - - /** Stop the interface - * - * @return 0 on success, negative error code on failure - */ - virtual int disconnect() = 0; -}; - -#endif