diff options
author | Dwayne Boone <dwayne@zeroc.com> | 2007-06-01 13:21:36 +0000 |
---|---|---|
committer | Dwayne Boone <dwayne@zeroc.com> | 2007-06-01 13:21:36 +0000 |
commit | db16245ff267740502ca7fc01c1cc415a8570225 (patch) | |
tree | be351bae94e2072244f81f78585b51da73910753 /cpp/src | |
parent | Use getaddrinfo instead of gethostbyname on Unix (diff) | |
download | ice-db16245ff267740502ca7fc01c1cc415a8570225.tar.bz2 ice-db16245ff267740502ca7fc01c1cc415a8570225.tar.xz ice-db16245ff267740502ca7fc01c1cc415a8570225.zip |
Changed getHosts to getAddresses
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/Ice/Network.cpp | 23 | ||||
-rw-r--r-- | cpp/src/Ice/Network.h | 2 | ||||
-rw-r--r-- | cpp/src/Ice/TcpConnector.cpp | 6 | ||||
-rw-r--r-- | cpp/src/Ice/TcpConnector.h | 2 | ||||
-rw-r--r-- | cpp/src/Ice/TcpEndpointI.cpp | 13 | ||||
-rw-r--r-- | cpp/src/Ice/UdpEndpointI.cpp | 13 | ||||
-rw-r--r-- | cpp/src/Ice/UdpTransceiver.cpp | 8 | ||||
-rw-r--r-- | cpp/src/Ice/UdpTransceiver.h | 2 | ||||
-rw-r--r-- | cpp/src/IceSSL/ConnectorI.cpp | 8 | ||||
-rw-r--r-- | cpp/src/IceSSL/ConnectorI.h | 2 | ||||
-rw-r--r-- | cpp/src/IceSSL/EndpointI.cpp | 13 |
11 files changed, 39 insertions, 53 deletions
diff --git a/cpp/src/Ice/Network.cpp b/cpp/src/Ice/Network.cpp index 5b515112c8e..2d7152546e7 100644 --- a/cpp/src/Ice/Network.cpp +++ b/cpp/src/Ice/Network.cpp @@ -1323,10 +1323,15 @@ IceInternal::addrToString(const struct sockaddr_in& addr) return s.str(); } -vector<string> -IceInternal::getHosts(const string& host) +vector<struct sockaddr_in> +IceInternal::getAddresses(const string& host, int port) { - vector<string> result; + vector<struct sockaddr_in> result; + + struct sockaddr_in addr; + memset(&addr, 0, sizeof(struct sockaddr_in)); + addr.sin_family = AF_INET; + addr.sin_port = htons(port); #ifdef _WIN32 @@ -1357,8 +1362,8 @@ IceInternal::getHosts(const string& host) char** p = entry->h_addr_list; while(*p) { - struct in_addr* addr = reinterpret_cast<in_addr*>(*p); - result.push_back(inetAddrToString(*addr)); + memcpy(&addr.sin_addr, *p, entry->h_length); + result.push_back(addr); p++; } @@ -1392,11 +1397,12 @@ IceInternal::getHosts(const string& host) struct sockaddr_in* sin = reinterpret_cast<sockaddr_in*>(p->ai_addr); if(sin->sin_addr.s_addr != 0) { - string host = inetAddrToString((*sin).sin_addr); + addr.sin_addr.s_addr = sin->sin_addr.s_addr; + bool found = false; for(unsigned int i = 0; i < result.size(); ++i) { - if(result[i] == host) + if(compareAddress(result[i], addr) == 0) { found = true; break; @@ -1404,7 +1410,8 @@ IceInternal::getHosts(const string& host) } if(!found) { - result.push_back(inetAddrToString((*sin).sin_addr)); + + result.push_back(addr); } } } diff --git a/cpp/src/Ice/Network.h b/cpp/src/Ice/Network.h index eb2c9235ca4..4e029d67c2d 100644 --- a/cpp/src/Ice/Network.h +++ b/cpp/src/Ice/Network.h @@ -116,7 +116,7 @@ ICE_API void fdToLocalAddress(SOCKET, struct sockaddr_in&); ICE_API bool fdToRemoteAddress(SOCKET, struct sockaddr_in&); ICE_API std::string addrToString(const struct sockaddr_in&); -ICE_API std::vector<std::string> getHosts(const std::string&); +ICE_API std::vector<struct sockaddr_in> getAddresses(const std::string&, int); ICE_API std::vector<std::string> getLocalHosts(); ICE_API void setTcpBufSize(SOCKET, const Ice::PropertiesPtr&, const Ice::LoggerPtr&); ICE_API int getSocketErrno(); diff --git a/cpp/src/Ice/TcpConnector.cpp b/cpp/src/Ice/TcpConnector.cpp index 4effb9ff4d6..9c9b07e5872 100644 --- a/cpp/src/Ice/TcpConnector.cpp +++ b/cpp/src/Ice/TcpConnector.cpp @@ -48,12 +48,12 @@ IceInternal::TcpConnector::toString() const return addrToString(_addr); } -IceInternal::TcpConnector::TcpConnector(const InstancePtr& instance, const string& host, int port) : +IceInternal::TcpConnector::TcpConnector(const InstancePtr& instance, const struct sockaddr_in& addr) : _instance(instance), _traceLevels(instance->traceLevels()), - _logger(instance->initializationData().logger) + _logger(instance->initializationData().logger), + _addr(addr) { - getAddress(host, port, _addr); } IceInternal::TcpConnector::~TcpConnector() diff --git a/cpp/src/Ice/TcpConnector.h b/cpp/src/Ice/TcpConnector.h index 3d552b3fd32..edcd0f25ccf 100644 --- a/cpp/src/Ice/TcpConnector.h +++ b/cpp/src/Ice/TcpConnector.h @@ -36,7 +36,7 @@ public: private: - TcpConnector(const InstancePtr&, const std::string&, int); + TcpConnector(const InstancePtr&, const struct sockaddr_in&); virtual ~TcpConnector(); friend class TcpEndpointI; diff --git a/cpp/src/Ice/TcpEndpointI.cpp b/cpp/src/Ice/TcpEndpointI.cpp index 6b0b7a5c4b5..0d0573840fa 100644 --- a/cpp/src/Ice/TcpEndpointI.cpp +++ b/cpp/src/Ice/TcpEndpointI.cpp @@ -283,17 +283,10 @@ vector<ConnectorPtr> IceInternal::TcpEndpointI::connectors() const { vector<ConnectorPtr> connectors; - vector<string> hosts = getHosts(_host); - if(hosts.size() > 1) + vector<struct sockaddr_in> addresses = getAddresses(_host, _port); + for(unsigned int i = 0; i < addresses.size(); ++i) { - for(unsigned int i = 0; i < hosts.size(); ++i) - { - connectors.push_back(new TcpConnector(_instance, hosts[i], _port)); - } - } - else - { - connectors.push_back(new TcpConnector(_instance, _host, _port)); + connectors.push_back(new TcpConnector(_instance, addresses[i])); } return connectors; } diff --git a/cpp/src/Ice/UdpEndpointI.cpp b/cpp/src/Ice/UdpEndpointI.cpp index dac2d3717ee..030c44f6f0b 100644 --- a/cpp/src/Ice/UdpEndpointI.cpp +++ b/cpp/src/Ice/UdpEndpointI.cpp @@ -452,17 +452,10 @@ vector<TransceiverPtr> IceInternal::UdpEndpointI::clientTransceivers() const { vector<TransceiverPtr> transceivers; - vector<string> hosts = getHosts(_host); - if(hosts.size() > 1) + vector<struct sockaddr_in> addresses = getAddresses(_host, _port); + for(unsigned int i = 0; i < addresses.size(); ++i) { - for(unsigned int i = 0; i < hosts.size(); ++i) - { - transceivers.push_back(new UdpTransceiver(_instance, hosts[i], _port, _mcastInterface, _mcastTtl)); - } - } - else - { - transceivers.push_back(new UdpTransceiver(_instance, _host, _port, _mcastInterface, _mcastTtl)); + transceivers.push_back(new UdpTransceiver(_instance, addresses[i], _mcastInterface, _mcastTtl)); } return transceivers; } diff --git a/cpp/src/Ice/UdpTransceiver.cpp b/cpp/src/Ice/UdpTransceiver.cpp index 1fa3fb8e5eb..a14cf302810 100644 --- a/cpp/src/Ice/UdpTransceiver.cpp +++ b/cpp/src/Ice/UdpTransceiver.cpp @@ -384,7 +384,7 @@ IceInternal::UdpTransceiver::effectivePort() const return ntohs(_addr.sin_port); } -IceInternal::UdpTransceiver::UdpTransceiver(const InstancePtr& instance, const string& host, int port, +IceInternal::UdpTransceiver::UdpTransceiver(const InstancePtr& instance, const struct sockaddr_in& addr, const string& mcastInterface, int mcastTtl) : _traceLevels(instance->traceLevels()), _logger(instance->initializationData().logger), @@ -392,14 +392,14 @@ IceInternal::UdpTransceiver::UdpTransceiver(const InstancePtr& instance, const s _incoming(false), _connect(true), _warn(instance->initializationData().properties->getPropertyAsInt("Ice.Warn.Datagrams") > 0), - _shutdownReadWrite(false) + _shutdownReadWrite(false), + _addr(addr) { try { _fd = createSocket(true); setBufSize(instance); setBlock(_fd, false); - getAddress(host, port, _addr); doConnect(_fd, _addr, -1); _connect = false; // We're connected now if(isMulticast(_addr)) @@ -407,7 +407,7 @@ IceInternal::UdpTransceiver::UdpTransceiver(const InstancePtr& instance, const s if(mcastInterface.length() > 0) { struct sockaddr_in addr; - getAddress(mcastInterface, port, addr); + getAddress(mcastInterface, ntohs(_addr.sin_port), addr); setMcastInterface(_fd, addr.sin_addr); } if(mcastTtl != -1) diff --git a/cpp/src/Ice/UdpTransceiver.h b/cpp/src/Ice/UdpTransceiver.h index 85d82e36fdd..97bb5e5ea82 100644 --- a/cpp/src/Ice/UdpTransceiver.h +++ b/cpp/src/Ice/UdpTransceiver.h @@ -48,7 +48,7 @@ public: private: - UdpTransceiver(const InstancePtr&, const std::string&, int, const std::string&, int); + UdpTransceiver(const InstancePtr&, const struct sockaddr_in&, const std::string&, int); UdpTransceiver(const InstancePtr&, const std::string&, int, const std::string&, bool); virtual ~UdpTransceiver(); diff --git a/cpp/src/IceSSL/ConnectorI.cpp b/cpp/src/IceSSL/ConnectorI.cpp index ffda1471012..1d8407e6530 100644 --- a/cpp/src/IceSSL/ConnectorI.cpp +++ b/cpp/src/IceSSL/ConnectorI.cpp @@ -178,12 +178,12 @@ IceSSL::ConnectorI::toString() const return IceInternal::addrToString(_addr); } -IceSSL::ConnectorI::ConnectorI(const InstancePtr& instance, const string& host, int port) : +IceSSL::ConnectorI::ConnectorI(const InstancePtr& instance, const struct sockaddr_in& addr) : _instance(instance), - _host(host), - _logger(instance->communicator()->getLogger()) + _host(IceInternal::inetAddrToString(addr.sin_addr)), + _logger(instance->communicator()->getLogger()), + _addr(addr) { - IceInternal::getAddress(host, port, _addr); } IceSSL::ConnectorI::~ConnectorI() diff --git a/cpp/src/IceSSL/ConnectorI.h b/cpp/src/IceSSL/ConnectorI.h index 71b00e03663..01033b3b1b7 100644 --- a/cpp/src/IceSSL/ConnectorI.h +++ b/cpp/src/IceSSL/ConnectorI.h @@ -35,7 +35,7 @@ public: private: - ConnectorI(const InstancePtr&, const std::string&, int); + ConnectorI(const InstancePtr&, const struct sockaddr_in&); virtual ~ConnectorI(); friend class EndpointI; diff --git a/cpp/src/IceSSL/EndpointI.cpp b/cpp/src/IceSSL/EndpointI.cpp index a657b027874..9e95dd5aa1e 100644 --- a/cpp/src/IceSSL/EndpointI.cpp +++ b/cpp/src/IceSSL/EndpointI.cpp @@ -283,17 +283,10 @@ vector<IceInternal::ConnectorPtr> IceSSL::EndpointI::connectors() const { vector<IceInternal::ConnectorPtr> connectors; - vector<string> hosts = IceInternal::getHosts(_host); - if(hosts.size() > 1) + vector<struct sockaddr_in> addresses = IceInternal::getAddresses(_host, _port); + for(unsigned int i = 0; i < addresses.size(); ++i) { - for(unsigned int i = 0; i < hosts.size(); ++i) - { - connectors.push_back(new ConnectorI(_instance, hosts[i], _port)); - } - } - else - { - connectors.push_back(new ConnectorI(_instance, _host, _port)); + connectors.push_back(new ConnectorI(_instance, addresses[i])); } return connectors; } |