diff options
author | Steve Huston <shuston@riverace.com> | 2001-07-11 22:31:15 +0000 |
---|---|---|
committer | Steve Huston <shuston@riverace.com> | 2001-07-11 22:31:15 +0000 |
commit | 64499cff7596ed7223379c0c470deba8e543b4db (patch) | |
tree | 99946367e16d7643a927ec4d74329009e55768a3 | |
parent | d9b4adb18d862f77ae2b9222626344b08c5f01db (diff) | |
download | ATCD-64499cff7596ed7223379c0c470deba8e543b4db.tar.gz |
In get_ip_address, also allow V4COMPAT address to extract the IPv4 address.
-rw-r--r-- | ace/INET_Addr.cpp | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/ace/INET_Addr.cpp b/ace/INET_Addr.cpp index 56f0325a32e..dbed0681bb6 100644 --- a/ace/INET_Addr.cpp +++ b/ace/INET_Addr.cpp @@ -760,18 +760,23 @@ ACE_INET_Addr::get_ip_address (void) const { ACE_TRACE ("ACE_INET_Addr::get_ip_address"); #if defined (ACE_HAS_IPV6) - if(IN6_IS_ADDR_V4MAPPED(&this->inet_addr_.sin6_addr)) { - ACE_UINT32 addr; - // Return the last 32 bits of the address - char *thisaddrptr = (char*)this->addr_pointer(); - thisaddrptr += 128/8 - 32/8; - memcpy((void*)&addr,(void*)(thisaddrptr),sizeof(addr)); - return ntohl(addr); - } else { - ACE_ERROR ((LM_ERROR, - ACE_LIB_TEXT ("ACE_INET_Addr::get_ip_address: address is a IPv6 address not IPv4\n"))); - return 0; - } + if(IN6_IS_ADDR_V4MAPPED (&this->inet_addr_.sin6_addr) || + IN6_IS_ADDR_V4COMPAT (&this->inet_addr_.sin6_addr) ) + { + ACE_UINT32 addr; + // Return the last 32 bits of the address + char *thisaddrptr = (char*)this->addr_pointer (); + thisaddrptr += 128/8 - 32/8; + memcpy ((void*)&addr, (void*)(thisaddrptr), sizeof(addr)); + return ntohl (addr); + } + else + { + ACE_ERROR ((LM_ERROR, + ACE_LIB_TEXT ("ACE_INET_Addr::get_ip_address: address is a IPv6 address not IPv4\n"))); + errno = EAFNOSUPPORT; + return 0; + } #else return ntohl (ACE_UINT32 (this->inet_addr_.sin_addr.s_addr)); #endif |