diff options
author | jha <jha@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2001-02-08 22:35:36 +0000 |
---|---|---|
committer | jha <jha@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2001-02-08 22:35:36 +0000 |
commit | 958219b3c9c9f41d9a54cdd364f210094598dfb6 (patch) | |
tree | e03823cbcb3f46e4eb98a7c2fa9e58d1c810572e | |
parent | 957818ed51b0fe56ed6fc48f21247850ce956131 (diff) | |
download | ATCD-958219b3c9c9f41d9a54cdd364f210094598dfb6.tar.gz |
Numerous fixes for IPv6 addressing. A full report will be made when it
is merged in with the baseline. This is a checkpoint commit.
-rw-r--r-- | ace/INET_Addr.cpp | 44 | ||||
-rw-r--r-- | ace/INET_Addr.h | 2 | ||||
-rw-r--r-- | ace/INET_Addr.i | 20 |
3 files changed, 44 insertions, 22 deletions
diff --git a/ace/INET_Addr.cpp b/ace/INET_Addr.cpp index a4a1454c62b..91bec15fa1c 100644 --- a/ace/INET_Addr.cpp +++ b/ace/INET_Addr.cpp @@ -75,15 +75,9 @@ ACE_INET_Addr::operator == (const ACE_INET_Addr &sap) const ACE_TRACE ("ACE_INET_Addr::operator =="); return this->get_port_number() == sap.get_port_number() -#if defined (ACE_HAS_IPV6) - && ACE_OS::memcmp ((void *) &this->inet_addr_.sin6_addr, - (void *) &sap.inet_addr_.sin6_addr, - sizeof (this->inet_addr_.sin6_addr)) == 0; -#else - && ACE_OS::memcmp ((void *) &this->inet_addr_.sin_addr, - (void *) &sap.inet_addr_.sin_addr, - sizeof (this->inet_addr_.sin_addr)) == 0; -#endif + && ACE_OS::memcmp ((void *) this->addr_pointer(), + (void *) sap.addr_pointer(), + this->addr_size()) == 0; } ACE_INET_Addr::ACE_INET_Addr (void) @@ -202,17 +196,11 @@ ACE_INET_Addr::set (u_short port_number, ACE_UINT32 ip_addr, int encode) { - ACE_UNUSED_ARG (port_number); - ACE_UNUSED_ARG (ip_addr); - ACE_UNUSED_ARG (encode); - if(ip_addr == INADDR_ANY) return this->set(port_number,ACE_INADDR_ANY); - struct sockaddr_in ipv4addr; if(encode) ip_addr = htonl(ip_addr); - ipv4addr.sin_addr.s_addr = ip_addr; char addr[INET_ADDRSTRLEN]; if(0 == ACE_OS::inet_ntop (AF_INET, (const void*)&ip_addr, addr, INET_ADDRSTRLEN)) { @@ -304,18 +292,20 @@ ACE_INET_Addr::set (u_short port_number, #if defined (ACE_HAS_IPV6) else if (ACE_OS::inet_pton (AF_INET6, host_name, - (void*)&addr) == 1) + (void*)&addr) == 1) { + printf("Setting address from pton\n"); + + return this->set (port_number, + addr, + encode); + } #else else if (ACE_OS::inet_aton (host_name, (struct in_addr *) &addr) == 1) -#endif return this->set (port_number, -#if defined (ACE_HAS_IPV6) - addr, -#else encode ? ntohl (addr) : addr, -#endif encode); +#endif else { #if defined (VXWORKS) || defined (CHORUS) @@ -464,6 +454,7 @@ ACE_INET_Addr::ACE_INET_Addr (u_short port_number, int ACE_INET_Addr::set (const sockaddr_in *addr, int len) { + ACE_UNUSED_ARG (len); return this->set(addr->sin_port,addr->sin_addr.s_addr); } #endif @@ -711,7 +702,16 @@ const char * ACE_INET_Addr::get_host_addr (char *dst, int size) const { #if defined (ACE_HAS_IPV6) - return ACE_OS::inet_ntop (AF_INET6, (const void*)&this->inet_addr_.sin6_addr,dst,size); + dst[0] = '['; + const char *ch = ACE_OS::inet_ntop (AF_INET6, (const void*)&this->inet_addr_.sin6_addr,dst+1,size-1); + if(ch == 0) { + dst[0] = '\0'; + return 0; + } + int end = ACE_OS::strlen(dst); + dst[end] = ']'; + dst[end+1] = '\0'; + return dst; #else return ACE_OS::inet_ntop (AF_INET, (const void*)&this->inet_addr_.sin_addr,dst,size); #endif diff --git a/ace/INET_Addr.h b/ace/INET_Addr.h index 36f7c9b7731..2dd868e2182 100644 --- a/ace/INET_Addr.h +++ b/ace/INET_Addr.h @@ -315,6 +315,8 @@ public: const char protocol[] = "tcp"); #endif + void *addr_pointer(void) const; + size_t addr_size(void) const; private: /// Underlying representation. ace_sockaddr_in_t inet_addr_; diff --git a/ace/INET_Addr.i b/ace/INET_Addr.i index bf307a89330..9ea736733c1 100644 --- a/ace/INET_Addr.i +++ b/ace/INET_Addr.i @@ -54,6 +54,26 @@ ACE_INET_Addr::operator < (const ACE_INET_Addr &rhs) const #endif } +ACE_INLINE void * +ACE_INET_Addr::addr_pointer(void) const +{ +#if defined (ACE_HAS_IPV6) + return (void*)&this->inet_addr_.sin6_addr; +#else + return (void*)&this->inet_addr_.sin_addr; +#endif +} + +ACE_INLINE size_t +ACE_INET_Addr::addr_size(void) const +{ +#if defined (ACE_HAS_IPV6) + return sizeof this->inet_addr_.sin6_addr; +#else + return sizeof this->inet_addr_.sin_addr; +#endif +} + #if defined (ACE_HAS_WCHAR) ACE_INLINE int ACE_INET_Addr::set (u_short port_number, |