diff options
author | Benoit Foucher <benoit@zeroc.com> | 2017-04-10 19:33:17 +0200 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2017-04-10 19:33:17 +0200 |
commit | 1fa97b799b91fa6b0842e3267fec3d6e3a240df5 (patch) | |
tree | 1bc3abfddbcb66b51c776da15e2d88586ca2bbf4 /cpp/src/Ice/ObjectAdapterI.cpp | |
parent | Fix (ICE-7771) - UWP build fails, missing targets file (diff) | |
download | ice-1fa97b799b91fa6b0842e3267fec3d6e3a240df5.tar.bz2 ice-1fa97b799b91fa6b0842e3267fec3d6e3a240df5.tar.xz ice-1fa97b799b91fa6b0842e3267fec3d6e3a240df5.zip |
Fixed ICE-7755 - listen on all IPs associated with a DNS name
Diffstat (limited to 'cpp/src/Ice/ObjectAdapterI.cpp')
-rw-r--r-- | cpp/src/Ice/ObjectAdapterI.cpp | 33 |
1 files changed, 26 insertions, 7 deletions
diff --git a/cpp/src/Ice/ObjectAdapterI.cpp b/cpp/src/Ice/ObjectAdapterI.cpp index 5de6bf0acaa..bc22131f8cf 100644 --- a/cpp/src/Ice/ObjectAdapterI.cpp +++ b/cpp/src/Ice/ObjectAdapterI.cpp @@ -787,7 +787,7 @@ Ice::ObjectAdapterI::isLocal(const ObjectPrxPtr& proxy) const for(vector<IncomingConnectionFactoryPtr>::const_iterator q = _incomingConnectionFactories.begin(); q != _incomingConnectionFactories.end(); ++q) { - if((*p)->equivalent((*q)->endpoint())) + if((*q)->isLocal(*p)) { return true; } @@ -1102,11 +1102,19 @@ Ice::ObjectAdapterI::initialize(const RouterPrxPtr& router) vector<EndpointIPtr> endpoints = parseEndpoints(properties->getProperty(_name + ".Endpoints"), true); for(vector<EndpointIPtr>::iterator p = endpoints.begin(); p != endpoints.end(); ++p) { - IncomingConnectionFactoryPtr factory = ICE_MAKE_SHARED(IncomingConnectionFactory, _instance, *p, ICE_SHARED_FROM_THIS); - factory->initialize(); - _incomingConnectionFactories.push_back(factory); + EndpointIPtr publishedEndpoint; + vector<EndpointIPtr> expanded = (*p)->expandHost(publishedEndpoint); + for(vector<EndpointIPtr>::iterator q = expanded.begin(); q != expanded.end(); ++q) + { + IncomingConnectionFactoryPtr factory = ICE_MAKE_SHARED(IncomingConnectionFactory, + _instance, + *q, + publishedEndpoint, + ICE_SHARED_FROM_THIS); + factory->initialize(); + _incomingConnectionFactories.push_back(factory); + } } - if(endpoints.empty()) { TraceLevelsPtr tl = _instance->traceLevels(); @@ -1322,8 +1330,19 @@ ObjectAdapterI::parsePublishedEndpoints() // for(unsigned int i = 0; i < _incomingConnectionFactories.size(); ++i) { - vector<EndpointIPtr> endps = _incomingConnectionFactories[i]->endpoint()->expand(); - endpoints.insert(endpoints.end(), endps.begin(), endps.end()); + vector<EndpointIPtr> endps = _incomingConnectionFactories[i]->endpoint()->expandIfWildcard(); + for(vector<EndpointIPtr>::const_iterator p = endps.begin(); p != endps.end(); ++p) + { + // + // Check for duplicate endpoints, this might occur if an endpoint with a DNS name + // expands to multiple addresses. In this case, multiple incoming connection + // factories can point to the same published endpoint. + // + if(::find(endpoints.begin(), endpoints.end(), *p) == endpoints.end()) + { + endpoints.push_back(*p); + } + } } } |