diff options
author | Steve Huston <shuston@riverace.com> | 2015-03-12 18:52:45 -0400 |
---|---|---|
committer | Steve Huston <shuston@riverace.com> | 2015-03-12 18:52:45 -0400 |
commit | 47ccfd63e27de8fa9c92fad653e40a49e404efb3 (patch) | |
tree | 3e1743623aa3f68b4e3b9a3c5cb87a49015aee9a /ACE/ace/INET_Addr.cpp | |
parent | 2090102d827e2010a939d9ececd1118fa816fff9 (diff) | |
parent | 162ff579089f2c28b72f1e2952baeca125dcfb24 (diff) | |
download | ATCD-47ccfd63e27de8fa9c92fad653e40a49e404efb3.tar.gz |
Merge back from master to prepare for pull
Diffstat (limited to 'ACE/ace/INET_Addr.cpp')
-rw-r--r-- | ACE/ace/INET_Addr.cpp | 139 |
1 files changed, 48 insertions, 91 deletions
diff --git a/ACE/ace/INET_Addr.cpp b/ACE/ace/INET_Addr.cpp index 96e26b93dcf..65722e5c4d6 100644 --- a/ACE/ace/INET_Addr.cpp +++ b/ACE/ace/INET_Addr.cpp @@ -152,31 +152,11 @@ ACE_INET_Addr::hash (void) const return this->get_ip_address () + this->get_port_number (); } -bool -ACE_INET_Addr::next (void) -{ - if (this->inet_addrs_.empty () || - this->inet_addrs_iter_ == this->inet_addrs_.end ()) - return false; - - union ip46 next_a = *this->inet_addrs_iter_++; - this->set_addr (&next_a, sizeof (next_a)); - return true; -} - -void -ACE_INET_Addr::reset (void) -{ - this->inet_addrs_iter_ = this->inet_addrs_.begin (); - this->next (); - return; -} - ACE_INET_Addr::ACE_INET_Addr (void) : ACE_Addr (determine_type (), sizeof (inet_addr_)) { // ACE_TRACE ("ACE_INET_Addr::ACE_INET_Addr"); - this->reset_i (); + this->reset (); } ACE_INET_Addr & @@ -203,8 +183,6 @@ ACE_INET_Addr::set (const ACE_INET_Addr &sa) this->set_type (sa.get_type()); this->set_size (sa.get_size()); - this->inet_addrs_ = sa.inet_addrs_; - this->reset (); } return 0; @@ -295,7 +273,7 @@ ACE_INET_Addr::ACE_INET_Addr (const char address[], int address_family) : ACE_Addr (determine_type (), sizeof (inet_addr_)) { ACE_TRACE ("ACE_INET_Addr::ACE_INET_Addr"); - this->reset_i (); + this->reset (); this->set (address, address_family); } @@ -304,7 +282,7 @@ ACE_INET_Addr::ACE_INET_Addr (const wchar_t address[], int address_family) : ACE_Addr (determine_type (), sizeof (inet_addr_)) { ACE_TRACE ("ACE_INET_Addr::ACE_INET_Addr"); - this->reset_i (); + this->reset (); this->set (address, address_family); } @@ -316,7 +294,7 @@ ACE_INET_Addr::ACE_INET_Addr (const ACE_INET_Addr &sa) : ACE_Addr (sa.get_type (), sa.get_size()) { ACE_TRACE ("ACE_INET_Addr::ACE_INET_Addr"); - this->reset_i (); + this->reset (); this->set (sa); } @@ -383,6 +361,12 @@ ACE_INET_Addr::set (u_short port_number, { if (hp != 0) { + struct sockaddr_in6 v6; + ACE_OS::memset (&v6, 0, sizeof (v6)); + v6.sin6_family = AF_INET6; + (void) ACE_OS::memcpy ((void *) &v6.sin6_addr, + hp->h_addr, + hp->h_length); this->set_type (hp->h_addrtype); for (size_t i = 0; hp->h_addr_list[i]; ++i) { @@ -410,35 +394,16 @@ ACE_INET_Addr::set (u_short port_number, return -1; # else struct addrinfo hints; - struct addrinfo *res = 0, *curr = 0; + struct addrinfo *res = 0; int error = 0; ACE_OS::memset (&hints, 0, sizeof (hints)); hints.ai_family = AF_INET6; if ((error = ::getaddrinfo (host_name, 0, &hints, &res)) == 0) { this->set_type (res->ai_family); - for (curr = res; curr; curr = curr->ai_next) - { - union ip46 next_addr; - if (curr->ai_family == AF_INET6) - { - ACE_OS::memcpy (&next_addr.in6_, - curr->ai_addr, - curr->ai_addrlen); - next_addr.in6_.sin6_port = - encode ? ACE_NTOHS (port_number) : port_number; - } - else - { - ACE_OS::memcpy (&next_addr.in4_, - curr->ai_addr, - curr->ai_addrlen); - next_addr.in4_.sin_port = - encode ? ACE_NTOHS (port_number) : port_number; - } - this->inet_addrs_.push_back (next_addr); - } - this->reset (); + this->set_addr (res->ai_addr, + ACE_Utils::truncate_cast<int>(res->ai_addrlen)); + this->set_port_number (port_number, encode); ::freeaddrinfo (res); return 0; } @@ -464,40 +429,34 @@ ACE_INET_Addr::set (u_short port_number, struct in_addr addrv4; if (ACE_OS::inet_aton (host_name, &addrv4) == 1) + return this->set (port_number, + encode ? ACE_NTOHL (addrv4.s_addr) : addrv4.s_addr, + encode); + else { - this->inet_addrs_iter_ = this->inet_addrs_.end (); - return this->set (port_number, - encode ? ACE_NTOHL (addrv4.s_addr) : addrv4.s_addr, - encode); - } - - hostent hentry; - ACE_HOSTENT_DATA buf; - int h_error = 0; // Not the same as errno! + hostent hentry; + ACE_HOSTENT_DATA buf; + int h_error = 0; // Not the same as errno! - hostent *hp = ACE_OS::gethostbyname_r (host_name, &hentry, - buf, &h_error); - if (hp == 0) - { - errno = h_error; - return -1; - } + hostent *hp = ACE_OS::gethostbyname_r (host_name, &hentry, + buf, &h_error); + if (hp == 0) + errno = h_error; - this->set_type (hp->h_addrtype); - for (size_t i = 0; hp->h_addr_list[i]; ++i) - { - union ip46 next_addr; - struct sockaddr_in *next_addr_in = (struct sockaddr_in *)&next_addr.in4_; - (void) ACE_OS::memset (&next_addr, sizeof (next_addr), 0); - next_addr_in->sin_family = AF_INET; - next_addr_in->sin_port = encode ? ACE_NTOHS (port_number) : port_number; - (void) ACE_OS::memcpy ((void *) &next_addr_in->sin_addr, - hp->h_addr_list[i], - hp->h_length); - this->inet_addrs_.push_back (next_addr); + if (hp == 0) + { + return -1; + } + else + { + (void) ACE_OS::memcpy ((void *) &addrv4.s_addr, + hp->h_addr, + hp->h_length); + return this->set (port_number, + encode ? ACE_NTOHL (addrv4.s_addr) : addrv4.s_addr, + encode); + } } - this->reset (); - return 0; } // Helper function to get a port number from a port name. @@ -673,18 +632,17 @@ ACE_INET_Addr::get_addr (void) const } void -ACE_INET_Addr::set_addr (const void *addr, int len) +ACE_INET_Addr::set_addr (void *addr, int len) { this->set_addr (addr, len, 0); } // Set a pointer to the address. void -ACE_INET_Addr::set_addr (const void *addr, int /* len */, int map) +ACE_INET_Addr::set_addr (void *addr, int /* len */, int map) { ACE_TRACE ("ACE_INET_Addr::set_addr"); - const struct sockaddr_in *getfamily = - static_cast<const struct sockaddr_in *> (addr); + struct sockaddr_in *getfamily = static_cast<struct sockaddr_in *> (addr); if (getfamily->sin_family == AF_INET) { @@ -702,8 +660,7 @@ ACE_INET_Addr::set_addr (const void *addr, int /* len */, int map) #if defined (ACE_HAS_IPV6) else if (getfamily->sin_family == AF_INET6) { - const struct sockaddr_in6 *in6 = - static_cast<const struct sockaddr_in6*> (addr); + struct sockaddr_in6 *in6 = static_cast<struct sockaddr_in6*> (addr); this->set_port_number (in6->sin6_port, 0); this->set_address (reinterpret_cast<const char*> (&in6->sin6_addr), sizeof (in6->sin6_addr), @@ -719,7 +676,7 @@ ACE_INET_Addr::ACE_INET_Addr (const sockaddr_in *addr, int len) : ACE_Addr (determine_type (), sizeof (inet_addr_)) { ACE_TRACE ("ACE_INET_Addr::ACE_INET_Addr"); - this->reset_i (); + this->reset (); this->set (addr, len); } @@ -730,7 +687,7 @@ ACE_INET_Addr::ACE_INET_Addr (u_short port_number, : ACE_Addr (determine_type (), sizeof (inet_addr_)) { ACE_TRACE ("ACE_INET_Addr::ACE_INET_Addr"); - this->reset_i (); + this->reset (); if (this->set (port_number, inet_address) == -1) ACELIB_ERROR ((LM_ERROR, ACE_TEXT ("%p\n"), @@ -746,7 +703,7 @@ ACE_INET_Addr::ACE_INET_Addr (const char port_name[], : ACE_Addr (determine_type (), sizeof (inet_addr_)) { ACE_TRACE ("ACE_INET_Addr::ACE_INET_Addr"); - this->reset_i (); + this->reset (); if (this->set (port_name, host_name, protocol) == -1) @@ -761,7 +718,7 @@ ACE_INET_Addr::ACE_INET_Addr (const wchar_t port_name[], : ACE_Addr (determine_type (), sizeof (inet_addr_)) { ACE_TRACE ("ACE_INET_Addr::ACE_INET_Addr"); - this->reset_i (); + this->reset (); if (this->set (port_name, host_name, protocol) == -1) @@ -778,7 +735,7 @@ ACE_INET_Addr::ACE_INET_Addr (const char port_name[], : ACE_Addr (determine_type (), sizeof (inet_addr_)) { ACE_TRACE ("ACE_INET_Addr::ACE_INET_Addr"); - this->reset_i (); + this->reset (); if (this->set (port_name, ACE_HTONL (inet_address), protocol) == -1) @@ -793,7 +750,7 @@ ACE_INET_Addr::ACE_INET_Addr (const wchar_t port_name[], : ACE_Addr (determine_type (), sizeof (inet_addr_)) { ACE_TRACE ("ACE_INET_Addr::ACE_INET_Addr"); - this->reset_i (); + this->reset (); if (this->set (port_name, ACE_HTONL (inet_address), protocol) == -1) |