NetworkSocketAPI

Dependencies:   DnsQuery

Dependents:   HelloWizFi250Interface

Fork of NetworkSocketAPI by NetworkSocketAPI

Committer:
kaizen
Date:
Tue Aug 30 02:00:24 2016 +0000
Revision:
127:086a648760a3
Parent:
123:556a038fdf63
Added some delay for waiting to receive response of query.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Christopher Haster 105:2fd212f8da61 1 /* NetworkStack
Christopher Haster 105:2fd212f8da61 2 * Copyright (c) 2015 ARM Limited
Christopher Haster 105:2fd212f8da61 3 *
Christopher Haster 105:2fd212f8da61 4 * Licensed under the Apache License, Version 2.0 (the "License");
Christopher Haster 105:2fd212f8da61 5 * you may not use this file except in compliance with the License.
Christopher Haster 105:2fd212f8da61 6 * You may obtain a copy of the License at
Christopher Haster 105:2fd212f8da61 7 *
Christopher Haster 105:2fd212f8da61 8 * http://www.apache.org/licenses/LICENSE-2.0
Christopher Haster 105:2fd212f8da61 9 *
Christopher Haster 105:2fd212f8da61 10 * Unless required by applicable law or agreed to in writing, software
Christopher Haster 105:2fd212f8da61 11 * distributed under the License is distributed on an "AS IS" BASIS,
Christopher Haster 105:2fd212f8da61 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Christopher Haster 105:2fd212f8da61 13 * See the License for the specific language governing permissions and
Christopher Haster 105:2fd212f8da61 14 * limitations under the License.
Christopher Haster 105:2fd212f8da61 15 */
Christopher Haster 105:2fd212f8da61 16
Christopher Haster 105:2fd212f8da61 17 #ifndef NETWORK_INTERFACE_H
Christopher Haster 105:2fd212f8da61 18 #define NETWORK_INTERFACE_H
Christopher Haster 105:2fd212f8da61 19
Christopher Haster 105:2fd212f8da61 20 #include "mbed.h"
Christopher Haster 105:2fd212f8da61 21 #include "SocketAddress.h"
Christopher Haster 105:2fd212f8da61 22
Christopher Haster 105:2fd212f8da61 23
Christopher Haster 105:2fd212f8da61 24 /** Enum of standardized error codes
Christopher Haster 105:2fd212f8da61 25 *
Christopher Haster 105:2fd212f8da61 26 * Valid error codes have negative values and may
Christopher Haster 105:2fd212f8da61 27 * be returned by any network operation.
Christopher Haster 105:2fd212f8da61 28 *
Christopher Haster 105:2fd212f8da61 29 * @enum nsapi_error_t
Christopher Haster 105:2fd212f8da61 30 */
Christopher Haster 105:2fd212f8da61 31 enum nsapi_error_t {
Christopher Haster 105:2fd212f8da61 32 NSAPI_ERROR_WOULD_BLOCK = -3001, /*!< no data is not available but call is non-blocking */
Christopher Haster 123:556a038fdf63 33 NSAPI_ERROR_UNSUPPORTED = -3002, /*!< unsupported functionality */
Christopher Haster 123:556a038fdf63 34 NSAPI_ERROR_PARAMETER = -3003, /*!< invalid configuration */
Christopher Haster 123:556a038fdf63 35 NSAPI_ERROR_NO_CONNECTION = -3004, /*!< not connected to a network */
Christopher Haster 123:556a038fdf63 36 NSAPI_ERROR_NO_SOCKET = -3005, /*!< socket not available for use */
Christopher Haster 123:556a038fdf63 37 NSAPI_ERROR_NO_ADDRESS = -3006, /*!< IP address is not known */
Christopher Haster 123:556a038fdf63 38 NSAPI_ERROR_NO_MEMORY = -3007, /*!< memory resource not available */
Christopher Haster 123:556a038fdf63 39 NSAPI_ERROR_DNS_FAILURE = -3008, /*!< DNS failed to complete successfully */
Christopher Haster 123:556a038fdf63 40 NSAPI_ERROR_DHCP_FAILURE = -3009, /*!< DHCP failed to complete successfully */
Christopher Haster 123:556a038fdf63 41 NSAPI_ERROR_AUTH_FAILURE = -3010, /*!< connection to access point faield */
Christopher Haster 123:556a038fdf63 42 NSAPI_ERROR_DEVICE_ERROR = -3011, /*!< failure interfacing with the network procesor */
Christopher Haster 105:2fd212f8da61 43 };
Christopher Haster 105:2fd212f8da61 44
Christopher Haster 105:2fd212f8da61 45 /** Enum of socket protocols
Christopher Haster 105:2fd212f8da61 46 *
Christopher Haster 105:2fd212f8da61 47 * The socket protocol specifies a particular protocol to
Christopher Haster 105:2fd212f8da61 48 * be used with a newly created socket.
Christopher Haster 105:2fd212f8da61 49 *
Christopher Haster 105:2fd212f8da61 50 * @enum nsapi_protocol_t
Christopher Haster 105:2fd212f8da61 51 */
Christopher Haster 105:2fd212f8da61 52 enum nsapi_protocol_t {
Christopher Haster 105:2fd212f8da61 53 NSAPI_TCP, /*!< Socket is of TCP type */
Christopher Haster 105:2fd212f8da61 54 NSAPI_UDP, /*!< Socket is of UDP type */
Christopher Haster 105:2fd212f8da61 55 };
Christopher Haster 105:2fd212f8da61 56
Christopher Haster 112:e0cbb3e43c20 57 /* Enum of standardized stack option levels
Christopher Haster 112:e0cbb3e43c20 58 *
Christopher Haster 112:e0cbb3e43c20 59 * @enum nsapi_level_t
Christopher Haster 112:e0cbb3e43c20 60 */
Christopher Haster 112:e0cbb3e43c20 61 enum nsapi_level_t {
Christopher Haster 112:e0cbb3e43c20 62 NSAPI_STACK, /*!< Stack option level */
Christopher Haster 112:e0cbb3e43c20 63 NSAPI_SOCKET, /*!< Socket option level */
Christopher Haster 112:e0cbb3e43c20 64 };
Christopher Haster 112:e0cbb3e43c20 65
Christopher Haster 112:e0cbb3e43c20 66 /* Enum of standardized stack options
Christopher Haster 112:e0cbb3e43c20 67 *
Christopher Haster 112:e0cbb3e43c20 68 * These options may not be supported on all stacks, in which
Christopher Haster 112:e0cbb3e43c20 69 * case NSAPI_ERROR_UNSUPPORTED may be returned from setsockopt.
Christopher Haster 112:e0cbb3e43c20 70 *
Christopher Haster 112:e0cbb3e43c20 71 * @enum nsapi_option_t
Christopher Haster 112:e0cbb3e43c20 72 */
Christopher Haster 112:e0cbb3e43c20 73 enum nsapi_option_t {
Christopher Haster 112:e0cbb3e43c20 74 NSAPI_REUSEADDR, /*!< Allow bind to reuse local addresses */
Christopher Haster 112:e0cbb3e43c20 75 NSAPI_KEEPALIVE, /*!< Enables sending of keepalive messages */
Christopher Haster 112:e0cbb3e43c20 76 NSAPI_LINGER, /*!< Keeps close from returning until queues empty */
Christopher Haster 112:e0cbb3e43c20 77 NSAPI_SNDBUF, /*!< Sets send buffer size */
Christopher Haster 112:e0cbb3e43c20 78 NSAPI_RCVBUF, /*!< Sets recv buffer size */
Christopher Haster 112:e0cbb3e43c20 79 };
Christopher Haster 112:e0cbb3e43c20 80
Christopher Haster 105:2fd212f8da61 81
Christopher Haster 105:2fd212f8da61 82 /** NetworkStack class
Christopher Haster 105:2fd212f8da61 83 *
Christopher Haster 105:2fd212f8da61 84 * Common interface that is shared between hardware that
Christopher Haster 105:2fd212f8da61 85 * can connect to a network over IP. By implementing the
Christopher Haster 105:2fd212f8da61 86 * NetworkStack, a network stack can be used as a target
Christopher Haster 105:2fd212f8da61 87 * for instantiating network sockets.
Christopher Haster 105:2fd212f8da61 88 */
Christopher Haster 105:2fd212f8da61 89 class NetworkStack
Christopher Haster 105:2fd212f8da61 90 {
Christopher Haster 105:2fd212f8da61 91 public:
Christopher Haster 105:2fd212f8da61 92 virtual ~NetworkStack() {};
Christopher Haster 105:2fd212f8da61 93
Christopher Haster 105:2fd212f8da61 94 /** Get the local IP address
Christopher Haster 105:2fd212f8da61 95 *
Christopher Haster 105:2fd212f8da61 96 * @return Null-terminated representation of the local IP address
Christopher Haster 105:2fd212f8da61 97 * or null if not yet connected
Christopher Haster 105:2fd212f8da61 98 */
Christopher Haster 105:2fd212f8da61 99 virtual const char *get_ip_address() = 0;
Christopher Haster 105:2fd212f8da61 100
Christopher Haster 105:2fd212f8da61 101 /** Translates a hostname to an IP address
Christopher Haster 105:2fd212f8da61 102 *
Christopher Haster 105:2fd212f8da61 103 * The hostname may be either a domain name or an IP address. If the
Christopher Haster 105:2fd212f8da61 104 * hostname is an IP address, no network transactions will be performed.
Christopher Haster 105:2fd212f8da61 105 *
Christopher Haster 105:2fd212f8da61 106 * If no stack-specific DNS resolution is provided, the hostname
Christopher Haster 105:2fd212f8da61 107 * will be resolve using a UDP socket on the stack.
Christopher Haster 105:2fd212f8da61 108 *
Christopher Haster 105:2fd212f8da61 109 * @param address Destination for the host SocketAddress
Christopher Haster 105:2fd212f8da61 110 * @param host Hostname to resolve
Christopher Haster 105:2fd212f8da61 111 * @return 0 on success, negative error code on failure
Christopher Haster 105:2fd212f8da61 112 */
Christopher Haster 105:2fd212f8da61 113 virtual int gethostbyname(SocketAddress *address, const char *host);
Christopher Haster 105:2fd212f8da61 114
Christopher Haster 105:2fd212f8da61 115 /* Set stack-specific stack options
Christopher Haster 105:2fd212f8da61 116 *
Christopher Haster 105:2fd212f8da61 117 * The setstackopt allow an application to pass stack-specific hints
Christopher Haster 105:2fd212f8da61 118 * to the underlying stack. For unsupported options,
Christopher Haster 105:2fd212f8da61 119 * NSAPI_ERROR_UNSUPPORTED is returned and the stack is unmodified.
Christopher Haster 105:2fd212f8da61 120 *
Christopher Haster 105:2fd212f8da61 121 * @param level Stack-specific protocol level
Christopher Haster 105:2fd212f8da61 122 * @param optname Stack-specific option identifier
Christopher Haster 105:2fd212f8da61 123 * @param optval Option value
Christopher Haster 105:2fd212f8da61 124 * @param optlen Length of the option value
Christopher Haster 105:2fd212f8da61 125 * @return 0 on success, negative error code on failure
Christopher Haster 105:2fd212f8da61 126 */
Christopher Haster 105:2fd212f8da61 127 virtual int setstackopt(int level, int optname, const void *optval, unsigned optlen);
Christopher Haster 105:2fd212f8da61 128
Christopher Haster 105:2fd212f8da61 129 /* Get stack-specific stack options
Christopher Haster 105:2fd212f8da61 130 *
Christopher Haster 105:2fd212f8da61 131 * The getstackopt allow an application to retrieve stack-specific hints
Christopher Haster 105:2fd212f8da61 132 * from the underlying stack. For unsupported options,
Christopher Haster 105:2fd212f8da61 133 * NSAPI_ERROR_UNSUPPORTED is returned and optval is unmodified.
Christopher Haster 105:2fd212f8da61 134 *
Christopher Haster 105:2fd212f8da61 135 * @param level Stack-specific protocol level
Christopher Haster 105:2fd212f8da61 136 * @param optname Stack-specific option identifier
Christopher Haster 105:2fd212f8da61 137 * @param optval Destination for option value
Christopher Haster 105:2fd212f8da61 138 * @param optlen Length of the option value
Christopher Haster 105:2fd212f8da61 139 * @return 0 on success, negative error code on failure
Christopher Haster 105:2fd212f8da61 140 */
Christopher Haster 105:2fd212f8da61 141 virtual int getstackopt(int level, int optname, void *optval, unsigned *optlen);
Christopher Haster 105:2fd212f8da61 142
Christopher Haster 105:2fd212f8da61 143 protected:
Christopher Haster 105:2fd212f8da61 144 friend class Socket;
Christopher Haster 105:2fd212f8da61 145 friend class UDPSocket;
Christopher Haster 105:2fd212f8da61 146 friend class TCPSocket;
Christopher Haster 105:2fd212f8da61 147 friend class TCPServer;
Christopher Haster 105:2fd212f8da61 148
Christopher Haster 105:2fd212f8da61 149 /** Opens a socket
Christopher Haster 105:2fd212f8da61 150 *
Christopher Haster 105:2fd212f8da61 151 * Creates a network socket and stores it in the specified handle.
Christopher Haster 105:2fd212f8da61 152 * The handle must be passed to following calls on the socket.
Christopher Haster 105:2fd212f8da61 153 *
Christopher Haster 105:2fd212f8da61 154 * A stack may have a finite number of sockets, in this case
Christopher Haster 105:2fd212f8da61 155 * NSAPI_ERROR_NO_SOCKET is returned if no socket is available.
Christopher Haster 105:2fd212f8da61 156 *
Christopher Haster 105:2fd212f8da61 157 * @param handle Destination for the handle to a newly created socket
Christopher Haster 105:2fd212f8da61 158 * @param proto Protocol of socket to open, NSAPI_TCP or NSAPI_UDP
Christopher Haster 105:2fd212f8da61 159 * @return 0 on success, negative error code on failure
Christopher Haster 105:2fd212f8da61 160 */
Christopher Haster 105:2fd212f8da61 161 virtual int socket_open(void **handle, nsapi_protocol_t proto) = 0;
Christopher Haster 105:2fd212f8da61 162
Christopher Haster 105:2fd212f8da61 163 /** Close the socket
Christopher Haster 105:2fd212f8da61 164 *
Christopher Haster 105:2fd212f8da61 165 * Closes any open connection and deallocates any memory associated
Christopher Haster 105:2fd212f8da61 166 * with the socket.
Christopher Haster 105:2fd212f8da61 167 *
Christopher Haster 105:2fd212f8da61 168 * @param handle Socket handle
Christopher Haster 105:2fd212f8da61 169 * @return 0 on success, negative error code on failure
Christopher Haster 105:2fd212f8da61 170 */
Christopher Haster 105:2fd212f8da61 171 virtual int socket_close(void *handle) = 0;
Christopher Haster 105:2fd212f8da61 172
Christopher Haster 105:2fd212f8da61 173 /** Bind a specific address to a socket
Christopher Haster 105:2fd212f8da61 174 *
Christopher Haster 105:2fd212f8da61 175 * Binding a socket specifies the address and port on which to recieve
Christopher Haster 105:2fd212f8da61 176 * data. If the IP address is zeroed, only the port is bound.
Christopher Haster 105:2fd212f8da61 177 *
Christopher Haster 105:2fd212f8da61 178 * @param handle Socket handle
Christopher Haster 105:2fd212f8da61 179 * @param address Local address to bind
Christopher Haster 105:2fd212f8da61 180 * @return 0 on success, negative error code on failure.
Christopher Haster 105:2fd212f8da61 181 */
Christopher Haster 105:2fd212f8da61 182 virtual int socket_bind(void *handle, const SocketAddress &address) = 0;
Christopher Haster 105:2fd212f8da61 183
Christopher Haster 105:2fd212f8da61 184 /** Listen for connections on a TCP socket
Christopher Haster 105:2fd212f8da61 185 *
Christopher Haster 105:2fd212f8da61 186 * Marks the socket as a passive socket that can be used to accept
Christopher Haster 105:2fd212f8da61 187 * incoming connections.
Christopher Haster 105:2fd212f8da61 188 *
Christopher Haster 105:2fd212f8da61 189 * @param handle Socket handle
Christopher Haster 105:2fd212f8da61 190 * @param backlog Number of pending connections that can be queued
Christopher Haster 105:2fd212f8da61 191 * simultaneously
Christopher Haster 105:2fd212f8da61 192 * @return 0 on success, negative error code on failure
Christopher Haster 105:2fd212f8da61 193 */
Christopher Haster 105:2fd212f8da61 194 virtual int socket_listen(void *handle, int backlog) = 0;
Christopher Haster 105:2fd212f8da61 195
Christopher Haster 105:2fd212f8da61 196 /** Connects TCP socket to a remote host
Christopher Haster 105:2fd212f8da61 197 *
Christopher Haster 105:2fd212f8da61 198 * Initiates a connection to a remote server specified by the
Christopher Haster 105:2fd212f8da61 199 * indicated address.
Christopher Haster 105:2fd212f8da61 200 *
Christopher Haster 105:2fd212f8da61 201 * @param handle Socket handle
Christopher Haster 105:2fd212f8da61 202 * @param address The SocketAddress of the remote host
Christopher Haster 105:2fd212f8da61 203 * @return 0 on success, negative error code on failure
Christopher Haster 105:2fd212f8da61 204 */
Christopher Haster 105:2fd212f8da61 205 virtual int socket_connect(void *handle, const SocketAddress &address) = 0;
Christopher Haster 105:2fd212f8da61 206
Christopher Haster 105:2fd212f8da61 207 /** Accepts a connection on a TCP socket
Christopher Haster 105:2fd212f8da61 208 *
Christopher Haster 105:2fd212f8da61 209 * The server socket must be bound and set to listen for connections.
Christopher Haster 105:2fd212f8da61 210 * On a new connection, creates a network socket and stores it in the
Christopher Haster 105:2fd212f8da61 211 * specified handle. The handle must be passed to following calls on
Christopher Haster 105:2fd212f8da61 212 * the socket.
Christopher Haster 105:2fd212f8da61 213 *
Christopher Haster 105:2fd212f8da61 214 * A stack may have a finite number of sockets, in this case
Christopher Haster 105:2fd212f8da61 215 * NSAPI_ERROR_NO_SOCKET is returned if no socket is available.
Christopher Haster 105:2fd212f8da61 216 *
Christopher Haster 105:2fd212f8da61 217 * This call is non-blocking. If accept would block,
Christopher Haster 105:2fd212f8da61 218 * NSAPI_ERROR_WOULD_BLOCK is returned immediately.
Christopher Haster 105:2fd212f8da61 219 *
Christopher Haster 105:2fd212f8da61 220 * @param handle Destination for a handle to the newly created sockey
Christopher Haster 105:2fd212f8da61 221 * @param server Socket handle to server to accept from
Christopher Haster 105:2fd212f8da61 222 * @return 0 on success, negative error code on failure
Christopher Haster 105:2fd212f8da61 223 */
Christopher Haster 105:2fd212f8da61 224 virtual int socket_accept(void **handle, void *server) = 0;
Christopher Haster 105:2fd212f8da61 225
Christopher Haster 105:2fd212f8da61 226 /** Send data over a TCP socket
Christopher Haster 105:2fd212f8da61 227 *
Christopher Haster 105:2fd212f8da61 228 * The socket must be connected to a remote host. Returns the number of
Christopher Haster 105:2fd212f8da61 229 * bytes sent from the buffer.
Christopher Haster 105:2fd212f8da61 230 *
Christopher Haster 105:2fd212f8da61 231 * This call is non-blocking. If send would block,
Christopher Haster 105:2fd212f8da61 232 * NSAPI_ERROR_WOULD_BLOCK is returned immediately.
Christopher Haster 105:2fd212f8da61 233 *
Christopher Haster 105:2fd212f8da61 234 * @param handle Socket handle
Christopher Haster 105:2fd212f8da61 235 * @param data Buffer of data to send to the host
Christopher Haster 105:2fd212f8da61 236 * @param size Size of the buffer in bytes
Christopher Haster 105:2fd212f8da61 237 * @return Number of sent bytes on success, negative error
Christopher Haster 105:2fd212f8da61 238 * code on failure
Christopher Haster 105:2fd212f8da61 239 */
Christopher Haster 105:2fd212f8da61 240 virtual int socket_send(void *handle, const void *data, unsigned size) = 0;
Christopher Haster 105:2fd212f8da61 241
Christopher Haster 105:2fd212f8da61 242 /** Receive data over a TCP socket
Christopher Haster 105:2fd212f8da61 243 *
Christopher Haster 105:2fd212f8da61 244 * The socket must be connected to a remote host. Returns the number of
Christopher Haster 105:2fd212f8da61 245 * bytes received into the buffer.
Christopher Haster 105:2fd212f8da61 246 *
Christopher Haster 105:2fd212f8da61 247 * This call is non-blocking. If recv would block,
Christopher Haster 105:2fd212f8da61 248 * NSAPI_ERROR_WOULD_BLOCK is returned immediately.
Christopher Haster 105:2fd212f8da61 249 *
Christopher Haster 105:2fd212f8da61 250 * @param handle Socket handle
Christopher Haster 105:2fd212f8da61 251 * @param data Destination buffer for data received from the host
Christopher Haster 105:2fd212f8da61 252 * @param size Size of the buffer in bytes
Christopher Haster 105:2fd212f8da61 253 * @return Number of received bytes on success, negative error
Christopher Haster 105:2fd212f8da61 254 * code on failure
Christopher Haster 105:2fd212f8da61 255 */
Christopher Haster 105:2fd212f8da61 256 virtual int socket_recv(void *handle, void *data, unsigned size) = 0;
Christopher Haster 105:2fd212f8da61 257
Christopher Haster 105:2fd212f8da61 258 /** Send a packet over a UDP socket
Christopher Haster 105:2fd212f8da61 259 *
Christopher Haster 105:2fd212f8da61 260 * Sends data to the specified address. Returns the number of bytes
Christopher Haster 105:2fd212f8da61 261 * sent from the buffer.
Christopher Haster 105:2fd212f8da61 262 *
Christopher Haster 105:2fd212f8da61 263 * This call is non-blocking. If sendto would block,
Christopher Haster 105:2fd212f8da61 264 * NSAPI_ERROR_WOULD_BLOCK is returned immediately.
Christopher Haster 105:2fd212f8da61 265 *
Christopher Haster 105:2fd212f8da61 266 * @param handle Socket handle
Christopher Haster 105:2fd212f8da61 267 * @param address The SocketAddress of the remote host
Christopher Haster 105:2fd212f8da61 268 * @param data Buffer of data to send to the host
Christopher Haster 105:2fd212f8da61 269 * @param size Size of the buffer in bytes
Christopher Haster 105:2fd212f8da61 270 * @return Number of sent bytes on success, negative error
Christopher Haster 105:2fd212f8da61 271 * code on failure
Christopher Haster 105:2fd212f8da61 272 */
Christopher Haster 105:2fd212f8da61 273 virtual int socket_sendto(void *handle, const SocketAddress &address, const void *data, unsigned size) = 0;
Christopher Haster 105:2fd212f8da61 274
Christopher Haster 105:2fd212f8da61 275 /** Receive a packet over a UDP socket
Christopher Haster 105:2fd212f8da61 276 *
Christopher Haster 105:2fd212f8da61 277 * Receives data and stores the source address in address if address
Christopher Haster 105:2fd212f8da61 278 * is not NULL. Returns the number of bytes received into the buffer.
Christopher Haster 105:2fd212f8da61 279 *
Christopher Haster 105:2fd212f8da61 280 * This call is non-blocking. If recvfrom would block,
Christopher Haster 105:2fd212f8da61 281 * NSAPI_ERROR_WOULD_BLOCK is returned immediately.
Christopher Haster 105:2fd212f8da61 282 *
Christopher Haster 105:2fd212f8da61 283 * @param handle Socket handle
Christopher Haster 105:2fd212f8da61 284 * @param address Destination for the source address or NULL
Christopher Haster 105:2fd212f8da61 285 * @param data Destination buffer for data received from the host
Christopher Haster 105:2fd212f8da61 286 * @param size Size of the buffer in bytes
Christopher Haster 105:2fd212f8da61 287 * @return Number of received bytes on success, negative error
Christopher Haster 105:2fd212f8da61 288 * code on failure
Christopher Haster 105:2fd212f8da61 289 */
Christopher Haster 105:2fd212f8da61 290 virtual int socket_recvfrom(void *handle, SocketAddress *address, void *buffer, unsigned size) = 0;
Christopher Haster 105:2fd212f8da61 291
Christopher Haster 105:2fd212f8da61 292 /** Register a callback on state change of the socket
Christopher Haster 105:2fd212f8da61 293 *
Christopher Haster 105:2fd212f8da61 294 * The specified callback will be called on state changes such as when
Christopher Haster 105:2fd212f8da61 295 * the socket can recv/send/accept successfully and on when an error
Christopher Haster 105:2fd212f8da61 296 * occurs. The callback may also be called spuriously without reason.
Christopher Haster 105:2fd212f8da61 297 *
Christopher Haster 105:2fd212f8da61 298 * The callback may be called in an interrupt context and should not
Christopher Haster 105:2fd212f8da61 299 * perform expensive operations such as recv/send calls.
Christopher Haster 105:2fd212f8da61 300 *
Christopher Haster 105:2fd212f8da61 301 * @param handle Socket handle
Christopher Haster 105:2fd212f8da61 302 * @param callback Function to call on state change
Christopher Haster 105:2fd212f8da61 303 * @param data Argument to pass to callback
Christopher Haster 105:2fd212f8da61 304 */
Christopher Haster 105:2fd212f8da61 305 virtual void socket_attach(void *handle, void (*callback)(void *), void *data) = 0;
Christopher Haster 105:2fd212f8da61 306
Christopher Haster 105:2fd212f8da61 307 /* Set stack-specific socket options
Christopher Haster 105:2fd212f8da61 308 *
Christopher Haster 105:2fd212f8da61 309 * The setsockopt allow an application to pass stack-specific hints
Christopher Haster 105:2fd212f8da61 310 * to the underlying stack. For unsupported options,
Christopher Haster 105:2fd212f8da61 311 * NSAPI_ERROR_UNSUPPORTED is returned and the socket is unmodified.
Christopher Haster 105:2fd212f8da61 312 *
Christopher Haster 105:2fd212f8da61 313 * @param handle Socket handle
Christopher Haster 105:2fd212f8da61 314 * @param level Stack-specific protocol level
Christopher Haster 105:2fd212f8da61 315 * @param optname Stack-specific option identifier
Christopher Haster 105:2fd212f8da61 316 * @param optval Option value
Christopher Haster 105:2fd212f8da61 317 * @param optlen Length of the option value
Christopher Haster 105:2fd212f8da61 318 * @return 0 on success, negative error code on failure
Christopher Haster 105:2fd212f8da61 319 */
Christopher Haster 105:2fd212f8da61 320 virtual int setsockopt(void *handle, int level, int optname, const void *optval, unsigned optlen);
Christopher Haster 105:2fd212f8da61 321
Christopher Haster 105:2fd212f8da61 322 /* Get stack-specific socket options
Christopher Haster 105:2fd212f8da61 323 *
Christopher Haster 105:2fd212f8da61 324 * The getstackopt allow an application to retrieve stack-specific hints
Christopher Haster 105:2fd212f8da61 325 * from the underlying stack. For unsupported options,
Christopher Haster 105:2fd212f8da61 326 * NSAPI_ERROR_UNSUPPORTED is returned and optval is unmodified.
Christopher Haster 105:2fd212f8da61 327 *
Christopher Haster 105:2fd212f8da61 328 * @param handle Socket handle
Christopher Haster 105:2fd212f8da61 329 * @param level Stack-specific protocol level
Christopher Haster 105:2fd212f8da61 330 * @param optname Stack-specific option identifier
Christopher Haster 105:2fd212f8da61 331 * @param optval Destination for option value
Christopher Haster 105:2fd212f8da61 332 * @param optlen Length of the option value
Christopher Haster 105:2fd212f8da61 333 * @return 0 on success, negative error code on failure
Christopher Haster 105:2fd212f8da61 334 */
Christopher Haster 105:2fd212f8da61 335 virtual int getsockopt(void *handle, int level, int optname, void *optval, unsigned *optlen);
Christopher Haster 105:2fd212f8da61 336 };
Christopher Haster 105:2fd212f8da61 337
Christopher Haster 105:2fd212f8da61 338 #endif