From 1436dfb57e2232afaad32c9b0b845c162f544584 Mon Sep 17 00:00:00 2001 From: Marc Laukien Date: Sat, 6 Apr 2002 03:07:48 +0000 Subject: fixes to collocation detection; removed INADDR_ANY; other fixes --- cpp/src/Glacier/GlacierStarter.cpp | 2 +- cpp/src/Ice/Endpoint.cpp | 6 +-- cpp/src/Ice/Instance.cpp | 12 +---- cpp/src/Ice/Network.cpp | 96 ++------------------------------------ cpp/src/Ice/Network.h | 4 +- cpp/src/Ice/SslAcceptor.cpp | 19 ++------ cpp/src/Ice/SslAcceptor.h | 2 +- cpp/src/Ice/TcpAcceptor.cpp | 19 ++------ cpp/src/Ice/TcpAcceptor.h | 2 +- cpp/src/Ice/UdpTransceiver.cpp | 30 +++--------- cpp/src/Ice/UdpTransceiver.h | 2 +- 11 files changed, 28 insertions(+), 166 deletions(-) (limited to 'cpp/src') diff --git a/cpp/src/Glacier/GlacierStarter.cpp b/cpp/src/Glacier/GlacierStarter.cpp index ef3e56311e2..dd6ffaca69c 100644 --- a/cpp/src/Glacier/GlacierStarter.cpp +++ b/cpp/src/Glacier/GlacierStarter.cpp @@ -83,7 +83,7 @@ Glacier::Router::run(int argc, char* argv[]) ObjectAdapterPtr starterAdapter = communicator()->createObjectAdapterFromProperty("Starter", starterEndpointsProperty); StarterPtr starter = new StarterI(communicator()); - starterAdapter->add(starter, stringToIdentity("Glacier#starter")); + starterAdapter->add(starter, stringToIdentity("Glacier/starter")); starterAdapter->activate(); // diff --git a/cpp/src/Ice/Endpoint.cpp b/cpp/src/Ice/Endpoint.cpp index b88afdc2bcf..5af0812e83c 100644 --- a/cpp/src/Ice/Endpoint.cpp +++ b/cpp/src/Ice/Endpoint.cpp @@ -467,7 +467,7 @@ IceInternal::TcpEndpoint::connector() const AcceptorPtr IceInternal::TcpEndpoint::acceptor(EndpointPtr& endp) const { - TcpAcceptor* p = new TcpAcceptor(_instance, _port); + TcpAcceptor* p = new TcpAcceptor(_instance, _host, _port); endp = new TcpEndpoint(_instance, _host, p->effectivePort(), _timeout); return p; } @@ -802,7 +802,7 @@ IceInternal::SslEndpoint::connector() const AcceptorPtr IceInternal::SslEndpoint::acceptor(EndpointPtr& endp) const { - SslAcceptor* p = new SslAcceptor(_instance, _port); + SslAcceptor* p = new SslAcceptor(_instance, _host, _port); endp = new SslEndpoint(_instance, _host, p->effectivePort(), _timeout); return p; } @@ -1119,7 +1119,7 @@ IceInternal::UdpEndpoint::clientTransceiver() const TransceiverPtr IceInternal::UdpEndpoint::serverTransceiver(EndpointPtr& endp) const { - UdpTransceiver* p = new UdpTransceiver(_instance, _port, _connect); + UdpTransceiver* p = new UdpTransceiver(_instance, _host, _port, _connect); endp = new UdpEndpoint(_instance, _host, p->effectivePort()); return p; } diff --git a/cpp/src/Ice/Instance.cpp b/cpp/src/Ice/Instance.cpp index 0ee66450e23..4d4e4957cb2 100644 --- a/cpp/src/Ice/Instance.cpp +++ b/cpp/src/Ice/Instance.cpp @@ -276,16 +276,8 @@ IceInternal::Instance::Instance(const CommunicatorPtr& communicator, const Prope _logger = new LoggerI; #endif _traceLevels = new TraceLevels(_properties); - _defaultProtocol = _properties->getProperty("Ice.DefaultProtocol"); - if (_defaultProtocol.empty()) - { - _defaultProtocol = "tcp"; - } - _defaultHost = _properties->getProperty("Ice.DefaultHost"); - if (_defaultHost.empty()) - { - _defaultHost = getLocalHost(true); - } + _defaultProtocol = _properties->getPropertyWithDefault("Ice.DefaultProtocol", "tcp"); + _defaultHost = _properties->getPropertyWithDefault("Ice.DefaultHost", "127.0.0.1"); _routerManager = new RouterManager; _referenceFactory = new ReferenceFactory(this); _proxyFactory = new ProxyFactory(this); diff --git a/cpp/src/Ice/Network.cpp b/cpp/src/Ice/Network.cpp index f8f9510d3ba..1da5802c174 100644 --- a/cpp/src/Ice/Network.cpp +++ b/cpp/src/Ice/Network.cpp @@ -575,12 +575,12 @@ repeatAccept: static IceUtil::Mutex getHostByNameMutex; void -IceInternal::getAddress(const char* host, int port, struct sockaddr_in& addr) +IceInternal::getAddress(const string& host, int port, struct sockaddr_in& addr) { memset(&addr, 0, sizeof(struct sockaddr_in)); addr.sin_family = AF_INET; addr.sin_port = htons(port); - addr.sin_addr.s_addr = inet_addr(host); + addr.sin_addr.s_addr = inet_addr(host.c_str()); if (addr.sin_addr.s_addr == INADDR_NONE) { @@ -591,7 +591,7 @@ IceInternal::getAddress(const char* host, int port, struct sockaddr_in& addr) do { - entry = gethostbyname(host); + entry = gethostbyname(host.c_str()); } #ifdef WIN32 while (!entry && WSAGetLastError() == WSATRY_AGAIN && --retry >= 0); @@ -610,96 +610,6 @@ IceInternal::getAddress(const char* host, int port, struct sockaddr_in& addr) } } -void -IceInternal::getLocalAddress(int port, struct sockaddr_in& addr) -{ - char host[1024 + 1]; - if (gethostname(host, 1024) == SOCKET_ERROR) - { - SystemException ex(__FILE__, __LINE__); - ex.error = getSystemErrno(); - throw ex; - } - - memset(&addr, 0, sizeof(struct sockaddr_in)); - addr.sin_family = AF_INET; - addr.sin_port = htons(port); - - { - IceUtil::Mutex::Lock sync(getHostByNameMutex); - - struct hostent* entry; - int retry = 5; - - do - { - entry = gethostbyname(host); - } -#ifdef WIN32 - while (!entry && WSAGetLastError() == WSATRY_AGAIN && --retry >= 0); -#else - while (!entry && h_errno == TRY_AGAIN && --retry >= 0); -#endif - - if (!entry) - { - DNSException ex(__FILE__, __LINE__); - ex.error = getDNSErrno(); - throw ex; - } - - memcpy(&addr.sin_addr, entry->h_addr, entry->h_length); - } -} - -string -IceInternal::getLocalHost(bool numeric) -{ - char host[1024 + 1]; - if (gethostname(host, 1024) == SOCKET_ERROR) - { - SystemException ex(__FILE__, __LINE__); - ex.error = getSystemErrno(); - throw ex; - } - - { - IceUtil::Mutex::Lock sync(getHostByNameMutex); - - struct hostent* entry; - int retry = 5; - - do - { - entry = gethostbyname(host); - } -#ifdef WIN32 - while (!entry && WSAGetLastError() == WSATRY_AGAIN && --retry >= 0); -#else - while (!entry && h_errno == TRY_AGAIN && --retry >= 0); -#endif - - if (!entry) - { - DNSException ex(__FILE__, __LINE__); - ex.error = getDNSErrno(); - throw ex; - } - - if (numeric) - { - struct sockaddr_in addr; - memset(&addr, 0, sizeof(struct sockaddr_in)); - memcpy(&addr.sin_addr, entry->h_addr, entry->h_length); - return string(inet_ntoa(addr.sin_addr)); - } - else - { - return string(entry->h_name); - } - } -} - void IceInternal::createPipe(SOCKET fds[2]) { diff --git a/cpp/src/Ice/Network.h b/cpp/src/Ice/Network.h index 3be1a32e589..cd5a1a648fa 100644 --- a/cpp/src/Ice/Network.h +++ b/cpp/src/Ice/Network.h @@ -81,9 +81,7 @@ void doListen(SOCKET, int); void doConnect(SOCKET, struct sockaddr_in&, int); SOCKET doAccept(SOCKET, int); -void getAddress(const char*, int, struct sockaddr_in&); -void getLocalAddress(int, struct sockaddr_in&); -std::string getLocalHost(bool); +void getAddress(const std::string&, int, struct sockaddr_in&); void createPipe(SOCKET fds[2]); diff --git a/cpp/src/Ice/SslAcceptor.cpp b/cpp/src/Ice/SslAcceptor.cpp index 89db1f4e44c..2982d770036 100644 --- a/cpp/src/Ice/SslAcceptor.cpp +++ b/cpp/src/Ice/SslAcceptor.cpp @@ -112,15 +112,8 @@ bool IceInternal::SslAcceptor::equivalent(const string& host, int port) const { struct sockaddr_in addr; - getAddress(host.c_str(), port, addr); - if (addr.sin_addr.s_addr == htonl(INADDR_LOOPBACK)) - { - return port == ntohs(_addr.sin_port); - } - - struct sockaddr_in localAddr; - getLocalAddress(ntohs(_addr.sin_port), localAddr); - return memcmp(&addr, &localAddr, sizeof(struct sockaddr_in)) == 0; + getAddress(host, port, addr); + return memcmp(&addr, &_addr, sizeof(struct sockaddr_in)) == 0; } int @@ -129,7 +122,7 @@ IceInternal::SslAcceptor::effectivePort() return ntohs(_addr.sin_port); } -IceInternal::SslAcceptor::SslAcceptor(const InstancePtr& instance, int port) : +IceInternal::SslAcceptor::SslAcceptor(const InstancePtr& instance, const string& host, int port) : _instance(instance), _traceLevels(instance->traceLevels()), _logger(instance->logger()), @@ -142,12 +135,8 @@ IceInternal::SslAcceptor::SslAcceptor(const InstancePtr& instance, int port) : try { - memset(&_addr, 0, sizeof(_addr)); - _addr.sin_family = AF_INET; - _addr.sin_port = htons(port); - _addr.sin_addr.s_addr = htonl(INADDR_ANY); - _fd = createSocket(false); + getAddress(host, port, _addr); doBind(_fd, _addr); } catch(...) diff --git a/cpp/src/Ice/SslAcceptor.h b/cpp/src/Ice/SslAcceptor.h index 17ceaddf8e7..5192052674b 100644 --- a/cpp/src/Ice/SslAcceptor.h +++ b/cpp/src/Ice/SslAcceptor.h @@ -41,7 +41,7 @@ public: private: - SslAcceptor(const InstancePtr&, int); + SslAcceptor(const InstancePtr&, const std::string&, int); virtual ~SslAcceptor(); friend class SslEndpoint; diff --git a/cpp/src/Ice/TcpAcceptor.cpp b/cpp/src/Ice/TcpAcceptor.cpp index 52284e3cb99..413ea73d69a 100644 --- a/cpp/src/Ice/TcpAcceptor.cpp +++ b/cpp/src/Ice/TcpAcceptor.cpp @@ -84,15 +84,8 @@ bool IceInternal::TcpAcceptor::equivalent(const string& host, int port) const { struct sockaddr_in addr; - getAddress(host.c_str(), port, addr); - if (addr.sin_addr.s_addr == htonl(INADDR_LOOPBACK)) - { - return port == ntohs(_addr.sin_port); - } - - struct sockaddr_in localAddr; - getLocalAddress(ntohs(_addr.sin_port), localAddr); - return memcmp(&addr, &localAddr, sizeof(struct sockaddr_in)) == 0; + getAddress(host, port, addr); + return memcmp(&addr, &_addr, sizeof(struct sockaddr_in)) == 0; } int @@ -101,7 +94,7 @@ IceInternal::TcpAcceptor::effectivePort() return ntohs(_addr.sin_port); } -IceInternal::TcpAcceptor::TcpAcceptor(const InstancePtr& instance, int port) : +IceInternal::TcpAcceptor::TcpAcceptor(const InstancePtr& instance, const string& host, int port) : _instance(instance), _traceLevels(instance->traceLevels()), _logger(instance->logger()), @@ -114,12 +107,8 @@ IceInternal::TcpAcceptor::TcpAcceptor(const InstancePtr& instance, int port) : try { - memset(&_addr, 0, sizeof(_addr)); - _addr.sin_family = AF_INET; - _addr.sin_port = htons(port); - _addr.sin_addr.s_addr = htonl(INADDR_ANY); - _fd = createSocket(false); + getAddress(host, port, _addr); doBind(_fd, _addr); } catch(...) diff --git a/cpp/src/Ice/TcpAcceptor.h b/cpp/src/Ice/TcpAcceptor.h index a07b1bac279..c0d773c48f8 100644 --- a/cpp/src/Ice/TcpAcceptor.h +++ b/cpp/src/Ice/TcpAcceptor.h @@ -41,7 +41,7 @@ public: private: - TcpAcceptor(const InstancePtr&, int); + TcpAcceptor(const InstancePtr&, const std::string&, int); virtual ~TcpAcceptor(); friend class TcpEndpoint; diff --git a/cpp/src/Ice/UdpTransceiver.cpp b/cpp/src/Ice/UdpTransceiver.cpp index 5cb5855f186..88770e74a19 100644 --- a/cpp/src/Ice/UdpTransceiver.cpp +++ b/cpp/src/Ice/UdpTransceiver.cpp @@ -148,18 +148,9 @@ IceInternal::UdpTransceiver::toString() const bool IceInternal::UdpTransceiver::equivalent(const string& host, int port) const { - assert(_incoming); // This equivalence test is only valid for incoming connections. - struct sockaddr_in addr; - getAddress(host.c_str(), port, addr); - if (addr.sin_addr.s_addr == htonl(INADDR_LOOPBACK)) - { - return port == ntohs(_addr.sin_port); - } - - struct sockaddr_in localAddr; - getLocalAddress(ntohs(_addr.sin_port), localAddr); - return memcmp(&addr, &localAddr, sizeof(struct sockaddr_in)) == 0; + getAddress(host, port, addr); + return memcmp(&addr, &_addr, sizeof(struct sockaddr_in)) == 0; } int @@ -174,9 +165,7 @@ IceInternal::UdpTransceiver::setProtocolName(const string& protocolName) _protocolName = protocolName; } -IceInternal::UdpTransceiver::UdpTransceiver(const InstancePtr& instance, - const string& host, - int port, +IceInternal::UdpTransceiver::UdpTransceiver(const InstancePtr& instance, const string& host, int port, const string& protocolName) : _instance(instance), _traceLevels(instance->traceLevels()), @@ -187,9 +176,8 @@ IceInternal::UdpTransceiver::UdpTransceiver(const InstancePtr& instance, { try { - getAddress(host.c_str(), port, _addr); - _fd = createSocket(true); + getAddress(host, port, _addr); doConnect(_fd, _addr, -1); _connect = false; // We're connected now @@ -206,8 +194,8 @@ IceInternal::UdpTransceiver::UdpTransceiver(const InstancePtr& instance, } } -IceInternal::UdpTransceiver::UdpTransceiver(const InstancePtr& instance, int port, bool connect, - const string& protocolName) : +IceInternal::UdpTransceiver::UdpTransceiver(const InstancePtr& instance, const string& host, int port, + bool connect, const string& protocolName) : _instance(instance), _traceLevels(instance->traceLevels()), _logger(instance->logger()), @@ -217,12 +205,8 @@ IceInternal::UdpTransceiver::UdpTransceiver(const InstancePtr& instance, int por { try { - memset(&_addr, 0, sizeof(_addr)); - _addr.sin_family = AF_INET; - _addr.sin_port = htons(port); - _addr.sin_addr.s_addr = htonl(INADDR_ANY); - _fd = createSocket(true); + getAddress(host, port, _addr); doBind(_fd, _addr); if (_traceLevels->network >= 1) diff --git a/cpp/src/Ice/UdpTransceiver.h b/cpp/src/Ice/UdpTransceiver.h index 6e92c1e7ea3..9cfa267d9d8 100644 --- a/cpp/src/Ice/UdpTransceiver.h +++ b/cpp/src/Ice/UdpTransceiver.h @@ -45,7 +45,7 @@ public: private: UdpTransceiver(const InstancePtr&, const std::string&, int, const std::string& protocolName = "udp"); - UdpTransceiver(const InstancePtr&, int, bool, const std::string& protocolName = "udp"); + UdpTransceiver(const InstancePtr&, const std::string&, int, bool, const std::string& protocolName = "udp"); virtual ~UdpTransceiver(); friend class UdpEndpoint; -- cgit v1.2.3