mbed-os5 only for TYBLE16

Dependents:   TYBLE16_simple_data_logger TYBLE16_MP3_Air

Committer:
kenjiArai
Date:
Tue Dec 17 23:23:45 2019 +0000
Revision:
0:5b88d5760320
Child:
1:9db0e321a9f4
mbed-os5 only for TYBLE16

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:5b88d5760320 1
kenjiArai 0:5b88d5760320 2 /** \addtogroup netsocket */
kenjiArai 0:5b88d5760320 3 /** @{*/
kenjiArai 0:5b88d5760320 4 /* UDPSocket
kenjiArai 0:5b88d5760320 5 * Copyright (c) 2015 ARM Limited
kenjiArai 0:5b88d5760320 6 *
kenjiArai 0:5b88d5760320 7 * Licensed under the Apache License, Version 2.0 (the "License");
kenjiArai 0:5b88d5760320 8 * you may not use this file except in compliance with the License.
kenjiArai 0:5b88d5760320 9 * You may obtain a copy of the License at
kenjiArai 0:5b88d5760320 10 *
kenjiArai 0:5b88d5760320 11 * http://www.apache.org/licenses/LICENSE-2.0
kenjiArai 0:5b88d5760320 12 *
kenjiArai 0:5b88d5760320 13 * Unless required by applicable law or agreed to in writing, software
kenjiArai 0:5b88d5760320 14 * distributed under the License is distributed on an "AS IS" BASIS,
kenjiArai 0:5b88d5760320 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
kenjiArai 0:5b88d5760320 16 * See the License for the specific language governing permissions and
kenjiArai 0:5b88d5760320 17 * limitations under the License.
kenjiArai 0:5b88d5760320 18 */
kenjiArai 0:5b88d5760320 19
kenjiArai 0:5b88d5760320 20 #ifndef UDPSOCKET_H
kenjiArai 0:5b88d5760320 21 #define UDPSOCKET_H
kenjiArai 0:5b88d5760320 22
kenjiArai 0:5b88d5760320 23 #include "netsocket/InternetSocket.h"
kenjiArai 0:5b88d5760320 24 #include "netsocket/NetworkStack.h"
kenjiArai 0:5b88d5760320 25 #include "netsocket/NetworkInterface.h"
kenjiArai 0:5b88d5760320 26 #include "rtos/EventFlags.h"
kenjiArai 0:5b88d5760320 27
kenjiArai 0:5b88d5760320 28
kenjiArai 0:5b88d5760320 29 /** UDP socket implementation.
kenjiArai 0:5b88d5760320 30 */
kenjiArai 0:5b88d5760320 31 class UDPSocket : public InternetSocket {
kenjiArai 0:5b88d5760320 32 public:
kenjiArai 0:5b88d5760320 33 /** Create an uninitialized socket.
kenjiArai 0:5b88d5760320 34 *
kenjiArai 0:5b88d5760320 35 * @note Must call open to initialize the socket on a network stack.
kenjiArai 0:5b88d5760320 36 */
kenjiArai 0:5b88d5760320 37 UDPSocket();
kenjiArai 0:5b88d5760320 38
kenjiArai 0:5b88d5760320 39 /** Create and open a socket on the network stack of the given
kenjiArai 0:5b88d5760320 40 * network interface.
kenjiArai 0:5b88d5760320 41 *
kenjiArai 0:5b88d5760320 42 * @tparam S Type of the Network stack.
kenjiArai 0:5b88d5760320 43 * @param stack Network stack as target for socket.
kenjiArai 0:5b88d5760320 44 * @deprecated since mbed-os-5.11
kenjiArai 0:5b88d5760320 45 */
kenjiArai 0:5b88d5760320 46 template <typename S>
kenjiArai 0:5b88d5760320 47 MBED_DEPRECATED_SINCE("mbed-os-5.11",
kenjiArai 0:5b88d5760320 48 "The UDPSocket(S *stack) constructor is deprecated"
kenjiArai 0:5b88d5760320 49 "It discards the open() call return value."
kenjiArai 0:5b88d5760320 50 "Use another constructor and call open() explicitly, instead.")
kenjiArai 0:5b88d5760320 51 UDPSocket(S *stack)
kenjiArai 0:5b88d5760320 52 {
kenjiArai 0:5b88d5760320 53 open(stack);
kenjiArai 0:5b88d5760320 54 }
kenjiArai 0:5b88d5760320 55
kenjiArai 0:5b88d5760320 56 /** Destroy a socket.
kenjiArai 0:5b88d5760320 57 *
kenjiArai 0:5b88d5760320 58 * @note Closes socket if the socket is still open.
kenjiArai 0:5b88d5760320 59 */
kenjiArai 0:5b88d5760320 60 virtual ~UDPSocket();
kenjiArai 0:5b88d5760320 61
kenjiArai 0:5b88d5760320 62 /** Send data to the specified host and port.
kenjiArai 0:5b88d5760320 63 *
kenjiArai 0:5b88d5760320 64 * By default, sendto blocks until data is sent. If socket is set to
kenjiArai 0:5b88d5760320 65 * nonblocking or times out, NSAPI_ERROR_WOULD_BLOCK is returned
kenjiArai 0:5b88d5760320 66 * immediately.
kenjiArai 0:5b88d5760320 67 *
kenjiArai 0:5b88d5760320 68 * @param host Domain name of the remote host or a dotted notation IP address.
kenjiArai 0:5b88d5760320 69 * @param port Port of the remote host.
kenjiArai 0:5b88d5760320 70 * @param data Buffer of data to send to the host.
kenjiArai 0:5b88d5760320 71 * @param size Size of the buffer in bytes.
kenjiArai 0:5b88d5760320 72 * @return Number of sent bytes on success, negative error
kenjiArai 0:5b88d5760320 73 * code on failure.
kenjiArai 0:5b88d5760320 74 */
kenjiArai 0:5b88d5760320 75 virtual nsapi_size_or_error_t sendto(const char *host, uint16_t port,
kenjiArai 0:5b88d5760320 76 const void *data, nsapi_size_t size);
kenjiArai 0:5b88d5760320 77
kenjiArai 0:5b88d5760320 78 /** Send data to the specified address.
kenjiArai 0:5b88d5760320 79 *
kenjiArai 0:5b88d5760320 80 * By default, sendto blocks until data is sent. If socket is set to
kenjiArai 0:5b88d5760320 81 * nonblocking or times out, NSAPI_ERROR_WOULD_BLOCK is returned
kenjiArai 0:5b88d5760320 82 * immediately.
kenjiArai 0:5b88d5760320 83 *
kenjiArai 0:5b88d5760320 84 * @param address The SocketAddress of the remote host.
kenjiArai 0:5b88d5760320 85 * @param data Buffer of data to send to the host.
kenjiArai 0:5b88d5760320 86 * @param size Size of the buffer in bytes.
kenjiArai 0:5b88d5760320 87 * @return Number of sent bytes on success, negative error
kenjiArai 0:5b88d5760320 88 * code on failure.
kenjiArai 0:5b88d5760320 89 */
kenjiArai 0:5b88d5760320 90 virtual nsapi_size_or_error_t sendto(const SocketAddress &address,
kenjiArai 0:5b88d5760320 91 const void *data, nsapi_size_t size);
kenjiArai 0:5b88d5760320 92
kenjiArai 0:5b88d5760320 93 /** Receive a datagram and store the source address in address if it's not NULL.
kenjiArai 0:5b88d5760320 94 *
kenjiArai 0:5b88d5760320 95 * By default, recvfrom blocks until a datagram is received. If socket is set to
kenjiArai 0:5b88d5760320 96 * nonblocking or times out with no datagram, NSAPI_ERROR_WOULD_BLOCK
kenjiArai 0:5b88d5760320 97 * is returned.
kenjiArai 0:5b88d5760320 98 *
kenjiArai 0:5b88d5760320 99 * @note If the datagram is larger than the buffer, the excess data is silently discarded.
kenjiArai 0:5b88d5760320 100 *
kenjiArai 0:5b88d5760320 101 * @note If socket is connected, only packets coming from connected peer address
kenjiArai 0:5b88d5760320 102 * are accepted.
kenjiArai 0:5b88d5760320 103 *
kenjiArai 0:5b88d5760320 104 * @note recvfrom() is allowed write to address and data buffers even if error occurs.
kenjiArai 0:5b88d5760320 105 *
kenjiArai 0:5b88d5760320 106 * @param address Destination for the source address or NULL.
kenjiArai 0:5b88d5760320 107 * @param data Destination buffer for datagram received from the host.
kenjiArai 0:5b88d5760320 108 * @param size Size of the buffer in bytes.
kenjiArai 0:5b88d5760320 109 * @return Number of received bytes on success, negative error
kenjiArai 0:5b88d5760320 110 * code on failure.
kenjiArai 0:5b88d5760320 111 */
kenjiArai 0:5b88d5760320 112 virtual nsapi_size_or_error_t recvfrom(SocketAddress *address,
kenjiArai 0:5b88d5760320 113 void *data, nsapi_size_t size);
kenjiArai 0:5b88d5760320 114
kenjiArai 0:5b88d5760320 115 /** Set the remote address for next send() call and filtering
kenjiArai 0:5b88d5760320 116 * of incoming packets. To reset the address, zero initialized
kenjiArai 0:5b88d5760320 117 * SocketAddress must be in the address parameter.
kenjiArai 0:5b88d5760320 118 *
kenjiArai 0:5b88d5760320 119 * @param address The SocketAddress of the remote host.
kenjiArai 0:5b88d5760320 120 * @return 0 on success, negative error code on failure.
kenjiArai 0:5b88d5760320 121 */
kenjiArai 0:5b88d5760320 122 virtual nsapi_error_t connect(const SocketAddress &address);
kenjiArai 0:5b88d5760320 123
kenjiArai 0:5b88d5760320 124 /** Send a datagram to connected remote address.
kenjiArai 0:5b88d5760320 125 *
kenjiArai 0:5b88d5760320 126 * By default, send blocks until all data is sent. If socket is set to
kenjiArai 0:5b88d5760320 127 * nonblocking or times out, a partial amount can be written.
kenjiArai 0:5b88d5760320 128 * NSAPI_ERROR_WOULD_BLOCK is returned if no data was written.
kenjiArai 0:5b88d5760320 129 *
kenjiArai 0:5b88d5760320 130 * @note The socket must be connected to a remote host before send() call.
kenjiArai 0:5b88d5760320 131 *
kenjiArai 0:5b88d5760320 132 * @param data Buffer of data to send to the host.
kenjiArai 0:5b88d5760320 133 * @param size Size of the buffer in bytes.
kenjiArai 0:5b88d5760320 134 * @return Number of sent bytes on success, negative error
kenjiArai 0:5b88d5760320 135 * code on failure.
kenjiArai 0:5b88d5760320 136 */
kenjiArai 0:5b88d5760320 137 virtual nsapi_size_or_error_t send(const void *data, nsapi_size_t size);
kenjiArai 0:5b88d5760320 138
kenjiArai 0:5b88d5760320 139 /** Receive data from a socket.
kenjiArai 0:5b88d5760320 140 *
kenjiArai 0:5b88d5760320 141 * This is equivalent to calling recvfrom(NULL, data, size).
kenjiArai 0:5b88d5760320 142 *
kenjiArai 0:5b88d5760320 143 * If the socket is connected, only packets coming from a connected peer address
kenjiArai 0:5b88d5760320 144 * are accepted.
kenjiArai 0:5b88d5760320 145 *
kenjiArai 0:5b88d5760320 146 * By default, recv blocks until some data is received. If socket is set to
kenjiArai 0:5b88d5760320 147 * nonblocking or times out, NSAPI_ERROR_WOULD_BLOCK can be returned to
kenjiArai 0:5b88d5760320 148 * indicate no data.
kenjiArai 0:5b88d5760320 149 *
kenjiArai 0:5b88d5760320 150 * @note recv() is allowed write to data buffer even if error occurs.
kenjiArai 0:5b88d5760320 151 *
kenjiArai 0:5b88d5760320 152 * @param data Pointer to buffer for data received from the host.
kenjiArai 0:5b88d5760320 153 * @param size Size of the buffer in bytes.
kenjiArai 0:5b88d5760320 154 * @return Number of received bytes on success, negative error
kenjiArai 0:5b88d5760320 155 * code on failure.
kenjiArai 0:5b88d5760320 156 */
kenjiArai 0:5b88d5760320 157 virtual nsapi_size_or_error_t recv(void *data, nsapi_size_t size);
kenjiArai 0:5b88d5760320 158
kenjiArai 0:5b88d5760320 159 /** Not implemented for UDP.
kenjiArai 0:5b88d5760320 160 *
kenjiArai 0:5b88d5760320 161 * @param error Not used.
kenjiArai 0:5b88d5760320 162 * @return NSAPI_ERROR_UNSUPPORTED
kenjiArai 0:5b88d5760320 163 */
kenjiArai 0:5b88d5760320 164 virtual Socket *accept(nsapi_error_t *error = NULL);
kenjiArai 0:5b88d5760320 165
kenjiArai 0:5b88d5760320 166 /** Not implemented for UDP.
kenjiArai 0:5b88d5760320 167 *
kenjiArai 0:5b88d5760320 168 * @param backlog Not used.
kenjiArai 0:5b88d5760320 169 * @return NSAPI_ERROR_UNSUPPORTED
kenjiArai 0:5b88d5760320 170 */
kenjiArai 0:5b88d5760320 171 virtual nsapi_error_t listen(int backlog = 1);
kenjiArai 0:5b88d5760320 172
kenjiArai 0:5b88d5760320 173 #if !defined(DOXYGEN_ONLY)
kenjiArai 0:5b88d5760320 174
kenjiArai 0:5b88d5760320 175 protected:
kenjiArai 0:5b88d5760320 176 virtual nsapi_protocol_t get_proto();
kenjiArai 0:5b88d5760320 177
kenjiArai 0:5b88d5760320 178 #endif //!defined(DOXYGEN_ONLY)
kenjiArai 0:5b88d5760320 179 };
kenjiArai 0:5b88d5760320 180
kenjiArai 0:5b88d5760320 181
kenjiArai 0:5b88d5760320 182 #endif
kenjiArai 0:5b88d5760320 183
kenjiArai 0:5b88d5760320 184 /** @}*/