mirror of https://github.com/ARMmbed/mbed-os.git
				
				
				
			Fix ipv6 addr in SocketAddress
Correctly set and return the ipv6 address.pull/2216/head^2
							parent
							
								
									56e11d6709
								
							
						
					
					
						commit
						aea45c88ce
					
				| 
						 | 
				
			
			@ -80,11 +80,20 @@ static void ipv4_to_address(char *addr, const uint8_t *bytes)
 | 
			
		|||
 | 
			
		||||
static void ipv6_to_address(char *addr, const uint8_t *bytes)
 | 
			
		||||
{
 | 
			
		||||
    int pos = 0;
 | 
			
		||||
    for (int i = 0; i < NSAPI_IPv6_BYTES; i+=2) {
 | 
			
		||||
        sprintf(&addr[5*i], "%02x%02x", bytes[i], bytes[i+1]);
 | 
			
		||||
        addr[5*i+4] = ':';
 | 
			
		||||
        int ret = sprintf(&addr[pos], "%02x%02x", bytes[i], bytes[i+1]);
 | 
			
		||||
        if (ret < 0) {
 | 
			
		||||
            memset(addr, 0, NSAPI_IPv6_SIZE + 1);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        pos += ret;
 | 
			
		||||
 | 
			
		||||
        addr[pos++] = ':';
 | 
			
		||||
    }
 | 
			
		||||
    addr[NSAPI_IPv6_BYTES-1] = '\0';
 | 
			
		||||
    pos -= 1; // Overwrite last ':'
 | 
			
		||||
    addr[pos++] = '\0';
 | 
			
		||||
    MBED_ASSERT(NSAPI_IPv6_SIZE == pos);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
SocketAddress::SocketAddress(NetworkInterface *iface, const char *host, uint16_t port)
 | 
			
		||||
| 
						 | 
				
			
			@ -136,7 +145,7 @@ void SocketAddress::set_ip_address(const char *addr)
 | 
			
		|||
        address_to_ipv4(_ip_bytes, addr);
 | 
			
		||||
    } else if (addr && address_is_ipv6(addr)) {
 | 
			
		||||
        _ip_version = NSAPI_IPv6;
 | 
			
		||||
        address_to_ipv4(_ip_bytes, addr);
 | 
			
		||||
        address_to_ipv6(_ip_bytes, addr);
 | 
			
		||||
    } else {
 | 
			
		||||
        _ip_version = NSAPI_IPv4;
 | 
			
		||||
        memset(_ip_bytes, 0, NSAPI_IPv4_BYTES);
 | 
			
		||||
| 
						 | 
				
			
			@ -171,7 +180,7 @@ const char *SocketAddress::get_ip_address() const
 | 
			
		|||
    if (!ip_address[0]) {
 | 
			
		||||
        if (_ip_version == NSAPI_IPv4) {
 | 
			
		||||
            ipv4_to_address(ip_address, _ip_bytes);
 | 
			
		||||
        } else if (_ip_version == NSAPI_IPv4) {
 | 
			
		||||
        } else if (_ip_version == NSAPI_IPv6) {
 | 
			
		||||
            ipv6_to_address(ip_address, _ip_bytes);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue