summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjha <jha@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2001-02-08 22:35:36 +0000
committerjha <jha@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2001-02-08 22:35:36 +0000
commit958219b3c9c9f41d9a54cdd364f210094598dfb6 (patch)
treee03823cbcb3f46e4eb98a7c2fa9e58d1c810572e
parent957818ed51b0fe56ed6fc48f21247850ce956131 (diff)
downloadATCD-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.cpp44
-rw-r--r--ace/INET_Addr.h2
-rw-r--r--ace/INET_Addr.i20
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,