diff options
author | Mark Spruiell <mes@zeroc.com> | 2013-04-04 16:02:42 -0700 |
---|---|---|
committer | Mark Spruiell <mes@zeroc.com> | 2013-04-04 16:02:42 -0700 |
commit | 9cb665138c7d2422739e32b40a249c64fd3b6cd5 (patch) | |
tree | 94759d916599ca08761b98580185a230744ac67a /cpp/src/Ice/EndpointI.cpp | |
parent | x64 VC10 icexml35d.dll was linked to wrong file (diff) | |
download | ice-9cb665138c7d2422739e32b40a249c64fd3b6cd5.tar.bz2 ice-9cb665138c7d2422739e32b40a249c64fd3b6cd5.tar.xz ice-9cb665138c7d2422739e32b40a249c64fd3b6cd5.zip |
* SOCKS support for C++
* Minor cleanup in C#
* Unity fixes
Diffstat (limited to 'cpp/src/Ice/EndpointI.cpp')
-rw-r--r-- | cpp/src/Ice/EndpointI.cpp | 71 |
1 files changed, 46 insertions, 25 deletions
diff --git a/cpp/src/Ice/EndpointI.cpp b/cpp/src/Ice/EndpointI.cpp index aabcb14b2b0..9cd4823c9ae 100644 --- a/cpp/src/Ice/EndpointI.cpp +++ b/cpp/src/Ice/EndpointI.cpp @@ -46,6 +46,17 @@ Init init; Ice::LocalObject* IceInternal::upCast(EndpointI* p) { return p; } IceUtil::Shared* IceInternal::upCast(EndpointHostResolver* p) { return p; } +vector<ConnectorPtr> +IceInternal::EndpointI::connectors(const vector<Address>& /*addrs*/, const NetworkProxyPtr& /*proxy*/) const +{ + // + // This method must be extended by endpoints which use the EndpointHostResolver to create + // connectors from IP addresses. + // + assert(false); + return vector<ConnectorPtr>(); +} + const string& IceInternal::EndpointI::connectionId() const { @@ -63,17 +74,6 @@ IceInternal::EndpointI::internal_getHash() const return _hashValue; } -vector<ConnectorPtr> -IceInternal::EndpointI::connectors(const vector<Address>& /*addrs*/) const -{ - // - // This method must be extended by endpoints which use the EndpointHostResolver to create - // connectors from IP addresses. - // - assert(false); - return vector<ConnectorPtr>(); -} - IceInternal::EndpointI::EndpointI(const std::string& connectionId) : _connectionId(connectionId), _hashInitialized(false) @@ -128,10 +128,14 @@ IceInternal::EndpointHostResolver::resolve(const string& host, int port, Ice::En // Try to get the addresses without DNS lookup. If this doesn't // work, we retry with DNS lookup (and observer). // - vector<Address> addrs = getAddresses(host, port, _protocol, selType, _preferIPv6, false); - if(!addrs.empty()) + NetworkProxyPtr networkProxy = _instance->networkProxy(); + if(!networkProxy) { - return endpoint->connectors(addrs); + vector<Address> addrs = getAddresses(host, port, _protocol, selType, _preferIPv6, false); + if(!addrs.empty()) + { + return endpoint->connectors(addrs, 0); + } } ObserverHelperT<> observer; @@ -144,7 +148,13 @@ IceInternal::EndpointHostResolver::resolve(const string& host, int port, Ice::En vector<ConnectorPtr> connectors; try { - connectors = endpoint->connectors(getAddresses(host, port, _protocol, selType, _preferIPv6, true)); + if(networkProxy) + { + networkProxy = networkProxy->resolveHost(); + } + + connectors = endpoint->connectors(getAddresses(host, port, _protocol, selType, _preferIPv6, true), + networkProxy); } catch(const Ice::LocalException& ex) { @@ -162,20 +172,24 @@ IceInternal::EndpointHostResolver::resolve(const string& host, int port, Ice::En // Try to get the addresses without DNS lookup. If this doesn't work, we queue a resolve // entry and the thread will take care of getting the endpoint addresses. // - try + NetworkProxyPtr networkProxy = _instance->networkProxy(); + if(!networkProxy) { - vector<Address> addrs = getAddresses(host, port, _protocol, selType, _preferIPv6, false); - if(!addrs.empty()) + try { - callback->connectors(endpoint->connectors(addrs)); + vector<Address> addrs = getAddresses(host, port, _protocol, selType, _preferIPv6, false); + if(!addrs.empty()) + { + callback->connectors(endpoint->connectors(addrs, 0)); + return; + } + } + catch(const Ice::LocalException& ex) + { + callback->exception(ex); return; } } - catch(const Ice::LocalException& ex) - { - callback->exception(ex); - return; - } Lock sync(*this); assert(!_destroyed); @@ -241,11 +255,18 @@ IceInternal::EndpointHostResolver::run() threadObserver->stateChanged(ThreadStateIdle, ThreadStateInUseForOther); } + NetworkProxyPtr networkProxy = _instance->networkProxy(); + if(networkProxy) + { + networkProxy = networkProxy->resolveHost(); + } + r.callback->connectors(r.endpoint->connectors(getAddresses(r.host, r.port, _protocol, r.selType, - _preferIPv6, true))); + _preferIPv6, true), + networkProxy)); if(threadObserver) { |