Small bug fixes

mirrored from:
https://developer.mbed.org/teams/NetworkSocketAPI/code/NetworkSocketAPI/

- Fix bug with SocketAddress init per @c1728p9
- Fix issue with not passing interface through accept call
- Fix port issue in SocketAddress constructor
Christopher Haster 2016-05-10 12:46:26 -05:00 committed by Russ Butler
parent 8304124a63
commit 7d9b5e6f76
2 changed files with 10 additions and 2 deletions

View File

@ -144,13 +144,17 @@ static void ipv6_to_address(char *addr, const uint8_t *bytes)
SocketAddress::SocketAddress(NetworkStack *iface, const char *host, uint16_t port) SocketAddress::SocketAddress(NetworkStack *iface, const char *host, uint16_t port)
{ {
memset(&_ip_address, 0, sizeof _ip_address);
// Check for valid IP addresses // Check for valid IP addresses
if (host && ipv4_is_valid(host)) { if (host && ipv4_is_valid(host)) {
_ip_version = NSAPI_IPv4; _ip_version = NSAPI_IPv4;
ipv4_from_address(_ip_bytes, host); ipv4_from_address(_ip_bytes, host);
set_port(port);
} else if (host && ipv6_is_valid(host)) { } else if (host && ipv6_is_valid(host)) {
_ip_version = NSAPI_IPv6; _ip_version = NSAPI_IPv6;
ipv4_from_address(_ip_bytes, host); ipv4_from_address(_ip_bytes, host);
set_port(port);
} else { } else {
// DNS lookup // DNS lookup
int err = iface->gethostbyname(this, host); int err = iface->gethostbyname(this, host);
@ -166,18 +170,21 @@ SocketAddress::SocketAddress(NetworkStack *iface, const char *host, uint16_t por
SocketAddress::SocketAddress(const char *addr, uint16_t port) SocketAddress::SocketAddress(const char *addr, uint16_t port)
{ {
memset(&_ip_address, 0, sizeof _ip_address);
set_ip_address(addr); set_ip_address(addr);
set_port(port); set_port(port);
} }
SocketAddress::SocketAddress(const void *bytes, nsapi_version_t version, uint16_t port) SocketAddress::SocketAddress(const void *bytes, nsapi_version_t version, uint16_t port)
{ {
memset(&_ip_address, 0, sizeof _ip_address);
set_ip_bytes(bytes, version); set_ip_bytes(bytes, version);
set_port(port); set_port(port);
} }
SocketAddress::SocketAddress(const SocketAddress &addr) SocketAddress::SocketAddress(const SocketAddress &addr)
{ {
memset(&_ip_address, 0, sizeof _ip_address);
set_ip_bytes(addr.get_ip_bytes(), addr.get_ip_version()); set_ip_bytes(addr.get_ip_bytes(), addr.get_ip_version());
set_port(addr.get_port()); set_port(addr.get_port());
} }
@ -202,10 +209,10 @@ void SocketAddress::set_ip_bytes(const void *bytes, nsapi_version_t version)
{ {
_ip_address[0] = '\0'; _ip_address[0] = '\0';
if (_ip_version == NSAPI_IPv4) { if (version == NSAPI_IPv4) {
_ip_version = NSAPI_IPv4; _ip_version = NSAPI_IPv4;
memcpy(_ip_bytes, bytes, NSAPI_IPv4_BYTES); memcpy(_ip_bytes, bytes, NSAPI_IPv4_BYTES);
} else if (_ip_version == NSAPI_IPv6) { } else if (version == NSAPI_IPv6) {
_ip_version = NSAPI_IPv6; _ip_version = NSAPI_IPv6;
memcpy(_ip_bytes, bytes, NSAPI_IPv6_BYTES); memcpy(_ip_bytes, bytes, NSAPI_IPv6_BYTES);
} else { } else {

View File

@ -61,6 +61,7 @@ int TCPServer::accept(TCPSocket *connection)
void *socket; void *socket;
int err = _iface->socket_accept(&socket, _socket); int err = _iface->socket_accept(&socket, _socket);
if (!err) { if (!err) {
connection->_iface = _iface;
connection->_socket = socket; connection->_socket = socket;
} }