Rahul Dahiya / Mbed OS STM32F7 Ethernet
Committer:
rahul_dahiya
Date:
Wed Jan 15 15:57:15 2020 +0530
Revision:
0:fb8047b156bb
STM32F7 LWIP

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rahul_dahiya 0:fb8047b156bb 1 /* Socket
rahul_dahiya 0:fb8047b156bb 2 * Copyright (c) 2015 ARM Limited
rahul_dahiya 0:fb8047b156bb 3 *
rahul_dahiya 0:fb8047b156bb 4 * Licensed under the Apache License, Version 2.0 (the "License");
rahul_dahiya 0:fb8047b156bb 5 * you may not use this file except in compliance with the License.
rahul_dahiya 0:fb8047b156bb 6 * You may obtain a copy of the License at
rahul_dahiya 0:fb8047b156bb 7 *
rahul_dahiya 0:fb8047b156bb 8 * http://www.apache.org/licenses/LICENSE-2.0
rahul_dahiya 0:fb8047b156bb 9 *
rahul_dahiya 0:fb8047b156bb 10 * Unless required by applicable law or agreed to in writing, software
rahul_dahiya 0:fb8047b156bb 11 * distributed under the License is distributed on an "AS IS" BASIS,
rahul_dahiya 0:fb8047b156bb 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
rahul_dahiya 0:fb8047b156bb 13 * See the License for the specific language governing permissions and
rahul_dahiya 0:fb8047b156bb 14 * limitations under the License.
rahul_dahiya 0:fb8047b156bb 15 */
rahul_dahiya 0:fb8047b156bb 16
rahul_dahiya 0:fb8047b156bb 17 #include "SocketAddress.h"
rahul_dahiya 0:fb8047b156bb 18 #include "NetworkInterface.h"
rahul_dahiya 0:fb8047b156bb 19 #include "NetworkStack.h"
rahul_dahiya 0:fb8047b156bb 20 #include <string.h>
rahul_dahiya 0:fb8047b156bb 21 #include "mbed.h"
rahul_dahiya 0:fb8047b156bb 22
rahul_dahiya 0:fb8047b156bb 23
rahul_dahiya 0:fb8047b156bb 24 static bool ipv4_is_valid(const char *addr)
rahul_dahiya 0:fb8047b156bb 25 {
rahul_dahiya 0:fb8047b156bb 26 int i = 0;
rahul_dahiya 0:fb8047b156bb 27
rahul_dahiya 0:fb8047b156bb 28 // Check each digit for [0-9.]
rahul_dahiya 0:fb8047b156bb 29 for (; addr[i]; i++) {
rahul_dahiya 0:fb8047b156bb 30 if (!(addr[i] >= '0' && addr[i] <= '9') && addr[i] != '.') {
rahul_dahiya 0:fb8047b156bb 31 return false;
rahul_dahiya 0:fb8047b156bb 32 }
rahul_dahiya 0:fb8047b156bb 33 }
rahul_dahiya 0:fb8047b156bb 34
rahul_dahiya 0:fb8047b156bb 35 // Ending with '.' garuntees host
rahul_dahiya 0:fb8047b156bb 36 if (i > 0 && addr[i-1] == '.') {
rahul_dahiya 0:fb8047b156bb 37 return false;
rahul_dahiya 0:fb8047b156bb 38 }
rahul_dahiya 0:fb8047b156bb 39
rahul_dahiya 0:fb8047b156bb 40 return true;
rahul_dahiya 0:fb8047b156bb 41 }
rahul_dahiya 0:fb8047b156bb 42
rahul_dahiya 0:fb8047b156bb 43 static bool ipv6_is_valid(const char *addr)
rahul_dahiya 0:fb8047b156bb 44 {
rahul_dahiya 0:fb8047b156bb 45 // Check each digit for [0-9a-fA-F:]
rahul_dahiya 0:fb8047b156bb 46 // Must also have at least 2 colons
rahul_dahiya 0:fb8047b156bb 47 int colons = 0;
rahul_dahiya 0:fb8047b156bb 48 for (int i = 0; addr[i]; i++) {
rahul_dahiya 0:fb8047b156bb 49 if (!(addr[i] >= '0' && addr[i] <= '9') &&
rahul_dahiya 0:fb8047b156bb 50 !(addr[i] >= 'a' && addr[i] <= 'f') &&
rahul_dahiya 0:fb8047b156bb 51 !(addr[i] >= 'A' && addr[i] <= 'F') &&
rahul_dahiya 0:fb8047b156bb 52 addr[i] != ':') {
rahul_dahiya 0:fb8047b156bb 53 return false;
rahul_dahiya 0:fb8047b156bb 54 }
rahul_dahiya 0:fb8047b156bb 55 if (addr[i] == ':') {
rahul_dahiya 0:fb8047b156bb 56 colons++;
rahul_dahiya 0:fb8047b156bb 57 }
rahul_dahiya 0:fb8047b156bb 58 }
rahul_dahiya 0:fb8047b156bb 59
rahul_dahiya 0:fb8047b156bb 60 return colons >= 2;
rahul_dahiya 0:fb8047b156bb 61 }
rahul_dahiya 0:fb8047b156bb 62
rahul_dahiya 0:fb8047b156bb 63 static void ipv4_from_address(uint8_t *bytes, const char *addr)
rahul_dahiya 0:fb8047b156bb 64 {
rahul_dahiya 0:fb8047b156bb 65 int count = 0;
rahul_dahiya 0:fb8047b156bb 66 int i = 0;
rahul_dahiya 0:fb8047b156bb 67
rahul_dahiya 0:fb8047b156bb 68 for (; count < NSAPI_IPv4_BYTES; count++) {
rahul_dahiya 0:fb8047b156bb 69 unsigned char b;
rahul_dahiya 0:fb8047b156bb 70 int scanned = sscanf(&addr[i], "%hhu", &b);
rahul_dahiya 0:fb8047b156bb 71 if (scanned < 1) {
rahul_dahiya 0:fb8047b156bb 72 return;
rahul_dahiya 0:fb8047b156bb 73 }
rahul_dahiya 0:fb8047b156bb 74
rahul_dahiya 0:fb8047b156bb 75 bytes[count] = b;
rahul_dahiya 0:fb8047b156bb 76
rahul_dahiya 0:fb8047b156bb 77 for (; addr[i] != '.'; i++) {
rahul_dahiya 0:fb8047b156bb 78 if (!addr[i]) {
rahul_dahiya 0:fb8047b156bb 79 return;
rahul_dahiya 0:fb8047b156bb 80 }
rahul_dahiya 0:fb8047b156bb 81 }
rahul_dahiya 0:fb8047b156bb 82
rahul_dahiya 0:fb8047b156bb 83 i++;
rahul_dahiya 0:fb8047b156bb 84 }
rahul_dahiya 0:fb8047b156bb 85 }
rahul_dahiya 0:fb8047b156bb 86
rahul_dahiya 0:fb8047b156bb 87 static int ipv6_scan_chunk(uint16_t *shorts, const char *chunk) {
rahul_dahiya 0:fb8047b156bb 88 int count = 0;
rahul_dahiya 0:fb8047b156bb 89 int i = 0;
rahul_dahiya 0:fb8047b156bb 90
rahul_dahiya 0:fb8047b156bb 91 for (; count < NSAPI_IPv6_BYTES/2; count++) {
rahul_dahiya 0:fb8047b156bb 92 unsigned short s;
rahul_dahiya 0:fb8047b156bb 93 int scanned = sscanf(&chunk[i], "%hx", &s);
rahul_dahiya 0:fb8047b156bb 94 if (scanned < 1) {
rahul_dahiya 0:fb8047b156bb 95 return count;
rahul_dahiya 0:fb8047b156bb 96 }
rahul_dahiya 0:fb8047b156bb 97
rahul_dahiya 0:fb8047b156bb 98 shorts[count] = s;
rahul_dahiya 0:fb8047b156bb 99
rahul_dahiya 0:fb8047b156bb 100 for (; chunk[i] != ':'; i++) {
rahul_dahiya 0:fb8047b156bb 101 if (!chunk[i]) {
rahul_dahiya 0:fb8047b156bb 102 return count+1;
rahul_dahiya 0:fb8047b156bb 103 }
rahul_dahiya 0:fb8047b156bb 104 }
rahul_dahiya 0:fb8047b156bb 105
rahul_dahiya 0:fb8047b156bb 106 i++;
rahul_dahiya 0:fb8047b156bb 107 }
rahul_dahiya 0:fb8047b156bb 108
rahul_dahiya 0:fb8047b156bb 109 return count;
rahul_dahiya 0:fb8047b156bb 110 }
rahul_dahiya 0:fb8047b156bb 111
rahul_dahiya 0:fb8047b156bb 112 static void ipv6_from_address(uint8_t *bytes, const char *addr)
rahul_dahiya 0:fb8047b156bb 113 {
rahul_dahiya 0:fb8047b156bb 114 // Start with zeroed address
rahul_dahiya 0:fb8047b156bb 115 uint16_t shorts[NSAPI_IPv6_BYTES/2];
rahul_dahiya 0:fb8047b156bb 116 int suffix = 0;
rahul_dahiya 0:fb8047b156bb 117
rahul_dahiya 0:fb8047b156bb 118 // Find double colons and scan suffix
rahul_dahiya 0:fb8047b156bb 119 for (int i = 0; addr[i]; i++) {
rahul_dahiya 0:fb8047b156bb 120 if (addr[i] == ':' && addr[i+1] == ':') {
rahul_dahiya 0:fb8047b156bb 121 suffix = ipv6_scan_chunk(shorts, &addr[i+2]);
rahul_dahiya 0:fb8047b156bb 122 break;
rahul_dahiya 0:fb8047b156bb 123 }
rahul_dahiya 0:fb8047b156bb 124 }
rahul_dahiya 0:fb8047b156bb 125
rahul_dahiya 0:fb8047b156bb 126 // Move suffix to end
rahul_dahiya 0:fb8047b156bb 127 memmove(&shorts[NSAPI_IPv6_BYTES/2-suffix], &shorts[0],
rahul_dahiya 0:fb8047b156bb 128 suffix*sizeof(uint16_t));
rahul_dahiya 0:fb8047b156bb 129 memset(&shorts[0], 0,
rahul_dahiya 0:fb8047b156bb 130 (NSAPI_IPv6_BYTES/2-suffix)*sizeof(uint16_t));
rahul_dahiya 0:fb8047b156bb 131
rahul_dahiya 0:fb8047b156bb 132 // Scan prefix
rahul_dahiya 0:fb8047b156bb 133 ipv6_scan_chunk(shorts, &addr[0]);
rahul_dahiya 0:fb8047b156bb 134
rahul_dahiya 0:fb8047b156bb 135 // Flip bytes
rahul_dahiya 0:fb8047b156bb 136 for (int i = 0; i < NSAPI_IPv6_BYTES/2; i++) {
rahul_dahiya 0:fb8047b156bb 137 bytes[2*i+0] = (uint8_t)(shorts[i] >> 8);
rahul_dahiya 0:fb8047b156bb 138 bytes[2*i+1] = (uint8_t)(shorts[i] >> 0);
rahul_dahiya 0:fb8047b156bb 139 }
rahul_dahiya 0:fb8047b156bb 140 }
rahul_dahiya 0:fb8047b156bb 141
rahul_dahiya 0:fb8047b156bb 142 static void ipv4_to_address(char *addr, const uint8_t *bytes)
rahul_dahiya 0:fb8047b156bb 143 {
rahul_dahiya 0:fb8047b156bb 144 sprintf(addr, "%d.%d.%d.%d", bytes[0], bytes[1], bytes[2], bytes[3]);
rahul_dahiya 0:fb8047b156bb 145 }
rahul_dahiya 0:fb8047b156bb 146
rahul_dahiya 0:fb8047b156bb 147 static void ipv6_to_address(char *addr, const uint8_t *bytes)
rahul_dahiya 0:fb8047b156bb 148 {
rahul_dahiya 0:fb8047b156bb 149 for (int i = 0; i < NSAPI_IPv6_BYTES/2; i++) {
rahul_dahiya 0:fb8047b156bb 150 sprintf(&addr[5*i], "%02x%02x", bytes[2*i], bytes[2*i+1]);
rahul_dahiya 0:fb8047b156bb 151 addr[5*i+4] = ':';
rahul_dahiya 0:fb8047b156bb 152 }
rahul_dahiya 0:fb8047b156bb 153 addr[NSAPI_IPv6_SIZE-1] = '\0';
rahul_dahiya 0:fb8047b156bb 154 }
rahul_dahiya 0:fb8047b156bb 155
rahul_dahiya 0:fb8047b156bb 156
rahul_dahiya 0:fb8047b156bb 157 SocketAddress::SocketAddress(nsapi_addr_t addr, uint16_t port)
rahul_dahiya 0:fb8047b156bb 158 {
rahul_dahiya 0:fb8047b156bb 159 _ip_address[0] = '\0';
rahul_dahiya 0:fb8047b156bb 160 set_addr(addr);
rahul_dahiya 0:fb8047b156bb 161 set_port(port);
rahul_dahiya 0:fb8047b156bb 162 }
rahul_dahiya 0:fb8047b156bb 163
rahul_dahiya 0:fb8047b156bb 164 SocketAddress::SocketAddress(const char *addr, uint16_t port)
rahul_dahiya 0:fb8047b156bb 165 {
rahul_dahiya 0:fb8047b156bb 166 _ip_address[0] = '\0';
rahul_dahiya 0:fb8047b156bb 167 set_ip_address(addr);
rahul_dahiya 0:fb8047b156bb 168 set_port(port);
rahul_dahiya 0:fb8047b156bb 169 }
rahul_dahiya 0:fb8047b156bb 170
rahul_dahiya 0:fb8047b156bb 171 SocketAddress::SocketAddress(const void *bytes, nsapi_version_t version, uint16_t port)
rahul_dahiya 0:fb8047b156bb 172 {
rahul_dahiya 0:fb8047b156bb 173 _ip_address[0] = '\0';
rahul_dahiya 0:fb8047b156bb 174 set_ip_bytes(bytes, version);
rahul_dahiya 0:fb8047b156bb 175 set_port(port);
rahul_dahiya 0:fb8047b156bb 176 }
rahul_dahiya 0:fb8047b156bb 177
rahul_dahiya 0:fb8047b156bb 178 SocketAddress::SocketAddress(const SocketAddress &addr)
rahul_dahiya 0:fb8047b156bb 179 {
rahul_dahiya 0:fb8047b156bb 180 _ip_address[0] = '\0';
rahul_dahiya 0:fb8047b156bb 181 set_addr(addr.get_addr());
rahul_dahiya 0:fb8047b156bb 182 set_port(addr.get_port());
rahul_dahiya 0:fb8047b156bb 183 }
rahul_dahiya 0:fb8047b156bb 184
rahul_dahiya 0:fb8047b156bb 185 bool SocketAddress::set_ip_address(const char *addr)
rahul_dahiya 0:fb8047b156bb 186 {
rahul_dahiya 0:fb8047b156bb 187 _ip_address[0] = '\0';
rahul_dahiya 0:fb8047b156bb 188
rahul_dahiya 0:fb8047b156bb 189 if (addr && ipv4_is_valid(addr)) {
rahul_dahiya 0:fb8047b156bb 190 _addr.version = NSAPI_IPv4;
rahul_dahiya 0:fb8047b156bb 191 ipv4_from_address(_addr.bytes, addr);
rahul_dahiya 0:fb8047b156bb 192 return true;
rahul_dahiya 0:fb8047b156bb 193 } else if (addr && ipv6_is_valid(addr)) {
rahul_dahiya 0:fb8047b156bb 194 _addr.version = NSAPI_IPv6;
rahul_dahiya 0:fb8047b156bb 195 ipv6_from_address(_addr.bytes, addr);
rahul_dahiya 0:fb8047b156bb 196 return true;
rahul_dahiya 0:fb8047b156bb 197 } else {
rahul_dahiya 0:fb8047b156bb 198 _addr = nsapi_addr_t();
rahul_dahiya 0:fb8047b156bb 199 return false;
rahul_dahiya 0:fb8047b156bb 200 }
rahul_dahiya 0:fb8047b156bb 201 }
rahul_dahiya 0:fb8047b156bb 202
rahul_dahiya 0:fb8047b156bb 203 void SocketAddress::set_ip_bytes(const void *bytes, nsapi_version_t version)
rahul_dahiya 0:fb8047b156bb 204 {
rahul_dahiya 0:fb8047b156bb 205 nsapi_addr_t addr;
rahul_dahiya 0:fb8047b156bb 206
rahul_dahiya 0:fb8047b156bb 207 addr = nsapi_addr_t();
rahul_dahiya 0:fb8047b156bb 208 addr.version = version;
rahul_dahiya 0:fb8047b156bb 209 if (version == NSAPI_IPv6) {
rahul_dahiya 0:fb8047b156bb 210 memcpy(addr.bytes, bytes, NSAPI_IPv6_BYTES);
rahul_dahiya 0:fb8047b156bb 211 } else if (version == NSAPI_IPv4) {
rahul_dahiya 0:fb8047b156bb 212 memcpy(addr.bytes, bytes, NSAPI_IPv4_BYTES);
rahul_dahiya 0:fb8047b156bb 213 }
rahul_dahiya 0:fb8047b156bb 214 set_addr(addr);
rahul_dahiya 0:fb8047b156bb 215 }
rahul_dahiya 0:fb8047b156bb 216
rahul_dahiya 0:fb8047b156bb 217 void SocketAddress::set_addr(nsapi_addr_t addr)
rahul_dahiya 0:fb8047b156bb 218 {
rahul_dahiya 0:fb8047b156bb 219 _ip_address[0] = '\0';
rahul_dahiya 0:fb8047b156bb 220 _addr = addr;
rahul_dahiya 0:fb8047b156bb 221 }
rahul_dahiya 0:fb8047b156bb 222
rahul_dahiya 0:fb8047b156bb 223 void SocketAddress::set_port(uint16_t port)
rahul_dahiya 0:fb8047b156bb 224 {
rahul_dahiya 0:fb8047b156bb 225 _port = port;
rahul_dahiya 0:fb8047b156bb 226 }
rahul_dahiya 0:fb8047b156bb 227
rahul_dahiya 0:fb8047b156bb 228 const char *SocketAddress::get_ip_address() const
rahul_dahiya 0:fb8047b156bb 229 {
rahul_dahiya 0:fb8047b156bb 230 if (_addr.version == NSAPI_UNSPEC) {
rahul_dahiya 0:fb8047b156bb 231 return NULL;
rahul_dahiya 0:fb8047b156bb 232 }
rahul_dahiya 0:fb8047b156bb 233
rahul_dahiya 0:fb8047b156bb 234 if (!_ip_address[0]) {
rahul_dahiya 0:fb8047b156bb 235 if (_addr.version == NSAPI_IPv4) {
rahul_dahiya 0:fb8047b156bb 236 ipv4_to_address(_ip_address, _addr.bytes);
rahul_dahiya 0:fb8047b156bb 237 } else if (_addr.version == NSAPI_IPv6) {
rahul_dahiya 0:fb8047b156bb 238 ipv6_to_address(_ip_address, _addr.bytes);
rahul_dahiya 0:fb8047b156bb 239 }
rahul_dahiya 0:fb8047b156bb 240 }
rahul_dahiya 0:fb8047b156bb 241
rahul_dahiya 0:fb8047b156bb 242 return _ip_address;
rahul_dahiya 0:fb8047b156bb 243 }
rahul_dahiya 0:fb8047b156bb 244
rahul_dahiya 0:fb8047b156bb 245 const void *SocketAddress::get_ip_bytes() const
rahul_dahiya 0:fb8047b156bb 246 {
rahul_dahiya 0:fb8047b156bb 247 return _addr.bytes;
rahul_dahiya 0:fb8047b156bb 248 }
rahul_dahiya 0:fb8047b156bb 249
rahul_dahiya 0:fb8047b156bb 250 nsapi_version_t SocketAddress::get_ip_version() const
rahul_dahiya 0:fb8047b156bb 251 {
rahul_dahiya 0:fb8047b156bb 252 return _addr.version;
rahul_dahiya 0:fb8047b156bb 253 }
rahul_dahiya 0:fb8047b156bb 254
rahul_dahiya 0:fb8047b156bb 255 nsapi_addr_t SocketAddress::get_addr() const
rahul_dahiya 0:fb8047b156bb 256 {
rahul_dahiya 0:fb8047b156bb 257 return _addr;
rahul_dahiya 0:fb8047b156bb 258 }
rahul_dahiya 0:fb8047b156bb 259
rahul_dahiya 0:fb8047b156bb 260 uint16_t SocketAddress::get_port() const
rahul_dahiya 0:fb8047b156bb 261 {
rahul_dahiya 0:fb8047b156bb 262 return _port;
rahul_dahiya 0:fb8047b156bb 263 }
rahul_dahiya 0:fb8047b156bb 264
rahul_dahiya 0:fb8047b156bb 265 SocketAddress::operator bool() const
rahul_dahiya 0:fb8047b156bb 266 {
rahul_dahiya 0:fb8047b156bb 267 if (_addr.version == NSAPI_IPv4) {
rahul_dahiya 0:fb8047b156bb 268 for (int i = 0; i < NSAPI_IPv4_BYTES; i++) {
rahul_dahiya 0:fb8047b156bb 269 if (_addr.bytes[i]) {
rahul_dahiya 0:fb8047b156bb 270 return true;
rahul_dahiya 0:fb8047b156bb 271 }
rahul_dahiya 0:fb8047b156bb 272 }
rahul_dahiya 0:fb8047b156bb 273
rahul_dahiya 0:fb8047b156bb 274 return false;
rahul_dahiya 0:fb8047b156bb 275 } else if (_addr.version == NSAPI_IPv6) {
rahul_dahiya 0:fb8047b156bb 276 for (int i = 0; i < NSAPI_IPv6_BYTES; i++) {
rahul_dahiya 0:fb8047b156bb 277 if (_addr.bytes[i]) {
rahul_dahiya 0:fb8047b156bb 278 return true;
rahul_dahiya 0:fb8047b156bb 279 }
rahul_dahiya 0:fb8047b156bb 280 }
rahul_dahiya 0:fb8047b156bb 281
rahul_dahiya 0:fb8047b156bb 282 return false;
rahul_dahiya 0:fb8047b156bb 283 } else {
rahul_dahiya 0:fb8047b156bb 284 return false;
rahul_dahiya 0:fb8047b156bb 285 }
rahul_dahiya 0:fb8047b156bb 286 }
rahul_dahiya 0:fb8047b156bb 287
rahul_dahiya 0:fb8047b156bb 288 bool operator==(const SocketAddress &a, const SocketAddress &b)
rahul_dahiya 0:fb8047b156bb 289 {
rahul_dahiya 0:fb8047b156bb 290 if (!a && !b) {
rahul_dahiya 0:fb8047b156bb 291 return true;
rahul_dahiya 0:fb8047b156bb 292 } else if (a._addr.version != b._addr.version) {
rahul_dahiya 0:fb8047b156bb 293 return false;
rahul_dahiya 0:fb8047b156bb 294 } else if (a._addr.version == NSAPI_IPv4) {
rahul_dahiya 0:fb8047b156bb 295 return memcmp(a._addr.bytes, b._addr.bytes, NSAPI_IPv4_BYTES) == 0;
rahul_dahiya 0:fb8047b156bb 296 } else if (a._addr.version == NSAPI_IPv6) {
rahul_dahiya 0:fb8047b156bb 297 return memcmp(a._addr.bytes, b._addr.bytes, NSAPI_IPv6_BYTES) == 0;
rahul_dahiya 0:fb8047b156bb 298 }
rahul_dahiya 0:fb8047b156bb 299
rahul_dahiya 0:fb8047b156bb 300 MBED_UNREACHABLE;
rahul_dahiya 0:fb8047b156bb 301 }
rahul_dahiya 0:fb8047b156bb 302
rahul_dahiya 0:fb8047b156bb 303 bool operator!=(const SocketAddress &a, const SocketAddress &b)
rahul_dahiya 0:fb8047b156bb 304 {
rahul_dahiya 0:fb8047b156bb 305 return !(a == b);
rahul_dahiya 0:fb8047b156bb 306 }
rahul_dahiya 0:fb8047b156bb 307
rahul_dahiya 0:fb8047b156bb 308 void SocketAddress::_SocketAddress(NetworkStack *iface, const char *host, uint16_t port)
rahul_dahiya 0:fb8047b156bb 309 {
rahul_dahiya 0:fb8047b156bb 310 _ip_address[0] = '\0';
rahul_dahiya 0:fb8047b156bb 311
rahul_dahiya 0:fb8047b156bb 312 // gethostbyname must check for literals, so can call it directly
rahul_dahiya 0:fb8047b156bb 313 int err = iface->gethostbyname(host, this);
rahul_dahiya 0:fb8047b156bb 314 _port = port;
rahul_dahiya 0:fb8047b156bb 315 if (err) {
rahul_dahiya 0:fb8047b156bb 316 _addr = nsapi_addr_t();
rahul_dahiya 0:fb8047b156bb 317 _port = 0;
rahul_dahiya 0:fb8047b156bb 318 }
rahul_dahiya 0:fb8047b156bb 319 }