Rtos API example

Committer:
marcozecchini
Date:
Sat Feb 23 12:13:36 2019 +0000
Revision:
0:9fca2b23d0ba
final commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
marcozecchini 0:9fca2b23d0ba 1
marcozecchini 0:9fca2b23d0ba 2 /* SocketAddress
marcozecchini 0:9fca2b23d0ba 3 * Copyright (c) 2015 ARM Limited
marcozecchini 0:9fca2b23d0ba 4 *
marcozecchini 0:9fca2b23d0ba 5 * Licensed under the Apache License, Version 2.0 (the "License");
marcozecchini 0:9fca2b23d0ba 6 * you may not use this file except in compliance with the License.
marcozecchini 0:9fca2b23d0ba 7 * You may obtain a copy of the License at
marcozecchini 0:9fca2b23d0ba 8 *
marcozecchini 0:9fca2b23d0ba 9 * http://www.apache.org/licenses/LICENSE-2.0
marcozecchini 0:9fca2b23d0ba 10 *
marcozecchini 0:9fca2b23d0ba 11 * Unless required by applicable law or agreed to in writing, software
marcozecchini 0:9fca2b23d0ba 12 * distributed under the License is distributed on an "AS IS" BASIS,
marcozecchini 0:9fca2b23d0ba 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
marcozecchini 0:9fca2b23d0ba 14 * See the License for the specific language governing permissions and
marcozecchini 0:9fca2b23d0ba 15 * limitations under the License.
marcozecchini 0:9fca2b23d0ba 16 */
marcozecchini 0:9fca2b23d0ba 17
marcozecchini 0:9fca2b23d0ba 18 #ifndef SOCKET_ADDRESS_H
marcozecchini 0:9fca2b23d0ba 19 #define SOCKET_ADDRESS_H
marcozecchini 0:9fca2b23d0ba 20
marcozecchini 0:9fca2b23d0ba 21 #include "nsapi_types.h"
marcozecchini 0:9fca2b23d0ba 22 #include "mbed_toolchain.h"
marcozecchini 0:9fca2b23d0ba 23
marcozecchini 0:9fca2b23d0ba 24 // Predeclared classes
marcozecchini 0:9fca2b23d0ba 25 class NetworkStack;
marcozecchini 0:9fca2b23d0ba 26 class NetworkInterface;
marcozecchini 0:9fca2b23d0ba 27
marcozecchini 0:9fca2b23d0ba 28
marcozecchini 0:9fca2b23d0ba 29 /** SocketAddress class
marcozecchini 0:9fca2b23d0ba 30 *
marcozecchini 0:9fca2b23d0ba 31 * Representation of an IP address and port pair.
marcozecchini 0:9fca2b23d0ba 32 * @addtogroup netsocket
marcozecchini 0:9fca2b23d0ba 33 */
marcozecchini 0:9fca2b23d0ba 34 class SocketAddress {
marcozecchini 0:9fca2b23d0ba 35 public:
marcozecchini 0:9fca2b23d0ba 36 /** Create a SocketAddress from a hostname and port
marcozecchini 0:9fca2b23d0ba 37 *
marcozecchini 0:9fca2b23d0ba 38 * The hostname may be either a domain name or an IP address. If the
marcozecchini 0:9fca2b23d0ba 39 * hostname is an IP address, no network transactions will be performed.
marcozecchini 0:9fca2b23d0ba 40 *
marcozecchini 0:9fca2b23d0ba 41 * On failure, the IP address and port will be set to zero
marcozecchini 0:9fca2b23d0ba 42 *
marcozecchini 0:9fca2b23d0ba 43 * @param stack Network stack to use for DNS resolution
marcozecchini 0:9fca2b23d0ba 44 * @param host Hostname to resolve
marcozecchini 0:9fca2b23d0ba 45 * @param port Optional 16-bit port
marcozecchini 0:9fca2b23d0ba 46 * @deprecated
marcozecchini 0:9fca2b23d0ba 47 * Constructors hide possible errors. Replaced by
marcozecchini 0:9fca2b23d0ba 48 * NetworkInterface::gethostbyname.
marcozecchini 0:9fca2b23d0ba 49 */
marcozecchini 0:9fca2b23d0ba 50 template <typename S>
marcozecchini 0:9fca2b23d0ba 51 MBED_DEPRECATED_SINCE("mbed-os-5.1.3",
marcozecchini 0:9fca2b23d0ba 52 "Constructors hide possible errors. Replaced by "
marcozecchini 0:9fca2b23d0ba 53 "NetworkInterface::gethostbyname.")
marcozecchini 0:9fca2b23d0ba 54 SocketAddress(S *stack, const char *host, uint16_t port = 0)
marcozecchini 0:9fca2b23d0ba 55 {
marcozecchini 0:9fca2b23d0ba 56 _SocketAddress(nsapi_create_stack(stack), host, port);
marcozecchini 0:9fca2b23d0ba 57 }
marcozecchini 0:9fca2b23d0ba 58
marcozecchini 0:9fca2b23d0ba 59 /** Create a SocketAddress from a raw IP address and port
marcozecchini 0:9fca2b23d0ba 60 *
marcozecchini 0:9fca2b23d0ba 61 * @param addr Raw IP address
marcozecchini 0:9fca2b23d0ba 62 * @param port Optional 16-bit port
marcozecchini 0:9fca2b23d0ba 63 */
marcozecchini 0:9fca2b23d0ba 64 SocketAddress(nsapi_addr_t addr = nsapi_addr_t(), uint16_t port = 0);
marcozecchini 0:9fca2b23d0ba 65
marcozecchini 0:9fca2b23d0ba 66 /** Create a SocketAddress from an IP address and port
marcozecchini 0:9fca2b23d0ba 67 *
marcozecchini 0:9fca2b23d0ba 68 * @param addr Null-terminated representation of the IP address
marcozecchini 0:9fca2b23d0ba 69 * @param port Optional 16-bit port
marcozecchini 0:9fca2b23d0ba 70 */
marcozecchini 0:9fca2b23d0ba 71 SocketAddress(const char *addr, uint16_t port = 0);
marcozecchini 0:9fca2b23d0ba 72
marcozecchini 0:9fca2b23d0ba 73 /** Create a SocketAddress from raw IP bytes, IP version, and port
marcozecchini 0:9fca2b23d0ba 74 *
marcozecchini 0:9fca2b23d0ba 75 * @param bytes Raw IP address in big-endian order
marcozecchini 0:9fca2b23d0ba 76 * @param version IP address version, NSAPI_IPv4 or NSAPI_IPv6
marcozecchini 0:9fca2b23d0ba 77 * @param port Optional 16-bit port
marcozecchini 0:9fca2b23d0ba 78 */
marcozecchini 0:9fca2b23d0ba 79 SocketAddress(const void *bytes, nsapi_version_t version, uint16_t port = 0);
marcozecchini 0:9fca2b23d0ba 80
marcozecchini 0:9fca2b23d0ba 81 /** Create a SocketAddress from another SocketAddress
marcozecchini 0:9fca2b23d0ba 82 *
marcozecchini 0:9fca2b23d0ba 83 * @param addr SocketAddress to copy
marcozecchini 0:9fca2b23d0ba 84 */
marcozecchini 0:9fca2b23d0ba 85 SocketAddress(const SocketAddress &addr);
marcozecchini 0:9fca2b23d0ba 86
marcozecchini 0:9fca2b23d0ba 87 /** Set the IP address
marcozecchini 0:9fca2b23d0ba 88 *
marcozecchini 0:9fca2b23d0ba 89 * @param addr Null-terminated represention of the IP address
marcozecchini 0:9fca2b23d0ba 90 * @return True if address is a valid representation of an IP address,
marcozecchini 0:9fca2b23d0ba 91 * otherwise False and SocketAddress is set to null
marcozecchini 0:9fca2b23d0ba 92 */
marcozecchini 0:9fca2b23d0ba 93 bool set_ip_address(const char *addr);
marcozecchini 0:9fca2b23d0ba 94
marcozecchini 0:9fca2b23d0ba 95 /** Set the raw IP bytes and IP version
marcozecchini 0:9fca2b23d0ba 96 *
marcozecchini 0:9fca2b23d0ba 97 * @param bytes Raw IP address in big-endian order
marcozecchini 0:9fca2b23d0ba 98 * @param version IP address version, NSAPI_IPv4 or NSAPI_IPv6
marcozecchini 0:9fca2b23d0ba 99 */
marcozecchini 0:9fca2b23d0ba 100 void set_ip_bytes(const void *bytes, nsapi_version_t version);
marcozecchini 0:9fca2b23d0ba 101
marcozecchini 0:9fca2b23d0ba 102 /** Set the raw IP address
marcozecchini 0:9fca2b23d0ba 103 *
marcozecchini 0:9fca2b23d0ba 104 * @param addr Raw IP address
marcozecchini 0:9fca2b23d0ba 105 */
marcozecchini 0:9fca2b23d0ba 106 void set_addr(nsapi_addr_t addr);
marcozecchini 0:9fca2b23d0ba 107
marcozecchini 0:9fca2b23d0ba 108 /** Set the port
marcozecchini 0:9fca2b23d0ba 109 *
marcozecchini 0:9fca2b23d0ba 110 * @param port 16-bit port
marcozecchini 0:9fca2b23d0ba 111 */
marcozecchini 0:9fca2b23d0ba 112 void set_port(uint16_t port);
marcozecchini 0:9fca2b23d0ba 113
marcozecchini 0:9fca2b23d0ba 114 /** Get the IP address
marcozecchini 0:9fca2b23d0ba 115 *
marcozecchini 0:9fca2b23d0ba 116 * @return Null-terminated representation of the IP Address
marcozecchini 0:9fca2b23d0ba 117 */
marcozecchini 0:9fca2b23d0ba 118 const char *get_ip_address() const;
marcozecchini 0:9fca2b23d0ba 119
marcozecchini 0:9fca2b23d0ba 120 /* Get the raw IP bytes
marcozecchini 0:9fca2b23d0ba 121 *
marcozecchini 0:9fca2b23d0ba 122 * @return Raw IP address in big-endian order
marcozecchini 0:9fca2b23d0ba 123 */
marcozecchini 0:9fca2b23d0ba 124 const void *get_ip_bytes() const;
marcozecchini 0:9fca2b23d0ba 125
marcozecchini 0:9fca2b23d0ba 126 /** Get the IP address version
marcozecchini 0:9fca2b23d0ba 127 *
marcozecchini 0:9fca2b23d0ba 128 * @return IP address version, NSAPI_IPv4 or NSAPI_IPv6
marcozecchini 0:9fca2b23d0ba 129 */
marcozecchini 0:9fca2b23d0ba 130 nsapi_version_t get_ip_version() const;
marcozecchini 0:9fca2b23d0ba 131
marcozecchini 0:9fca2b23d0ba 132 /** Get the raw IP address
marcozecchini 0:9fca2b23d0ba 133 *
marcozecchini 0:9fca2b23d0ba 134 * @return Raw IP address
marcozecchini 0:9fca2b23d0ba 135 */
marcozecchini 0:9fca2b23d0ba 136 nsapi_addr_t get_addr() const;
marcozecchini 0:9fca2b23d0ba 137
marcozecchini 0:9fca2b23d0ba 138 /** Get the port
marcozecchini 0:9fca2b23d0ba 139 *
marcozecchini 0:9fca2b23d0ba 140 * @return The 16-bit port
marcozecchini 0:9fca2b23d0ba 141 */
marcozecchini 0:9fca2b23d0ba 142 uint16_t get_port() const;
marcozecchini 0:9fca2b23d0ba 143
marcozecchini 0:9fca2b23d0ba 144 /** Test if address is zero
marcozecchini 0:9fca2b23d0ba 145 *
marcozecchini 0:9fca2b23d0ba 146 * @return True if address is not zero
marcozecchini 0:9fca2b23d0ba 147 */
marcozecchini 0:9fca2b23d0ba 148 operator bool() const;
marcozecchini 0:9fca2b23d0ba 149
marcozecchini 0:9fca2b23d0ba 150 /** Compare two addresses for equality
marcozecchini 0:9fca2b23d0ba 151 *
marcozecchini 0:9fca2b23d0ba 152 * @return True if both addresses are equal
marcozecchini 0:9fca2b23d0ba 153 */
marcozecchini 0:9fca2b23d0ba 154 friend bool operator==(const SocketAddress &a, const SocketAddress &b);
marcozecchini 0:9fca2b23d0ba 155
marcozecchini 0:9fca2b23d0ba 156 /** Compare two addresses for equality
marcozecchini 0:9fca2b23d0ba 157 *
marcozecchini 0:9fca2b23d0ba 158 * @return True if both addresses are not equal
marcozecchini 0:9fca2b23d0ba 159 */
marcozecchini 0:9fca2b23d0ba 160 friend bool operator!=(const SocketAddress &a, const SocketAddress &b);
marcozecchini 0:9fca2b23d0ba 161
marcozecchini 0:9fca2b23d0ba 162 private:
marcozecchini 0:9fca2b23d0ba 163 void _SocketAddress(NetworkStack *iface, const char *host, uint16_t port);
marcozecchini 0:9fca2b23d0ba 164
marcozecchini 0:9fca2b23d0ba 165 mutable char _ip_address[NSAPI_IP_SIZE];
marcozecchini 0:9fca2b23d0ba 166 nsapi_addr_t _addr;
marcozecchini 0:9fca2b23d0ba 167 uint16_t _port;
marcozecchini 0:9fca2b23d0ba 168 };
marcozecchini 0:9fca2b23d0ba 169
marcozecchini 0:9fca2b23d0ba 170
marcozecchini 0:9fca2b23d0ba 171 #endif
marcozecchini 0:9fca2b23d0ba 172
marcozecchini 0:9fca2b23d0ba 173 /** @}*/