public List <Connector> resolve(string host, int port, Ice.EndpointSelectionType selType, EndpointI endpoint) { // // Try to get the addresses without DNS lookup. If this doesn't // work, we retry with DNS lookup (and observer). // NetworkProxy networkProxy = _instance.networkProxy(); if (networkProxy == null) { List <EndPoint> addrs = Network.getAddresses(host, port, _protocol, selType, _preferIPv6, false); if (addrs.Count > 0) { return(endpoint.connectors(addrs, null)); } } Ice.Instrumentation.CommunicatorObserver obsv = _instance.getObserver(); Ice.Instrumentation.Observer observer = null; if (obsv != null) { observer = obsv.getEndpointLookupObserver(endpoint); if (observer != null) { observer.attach(); } } List <Connector> connectors = null; try { if (networkProxy != null) { networkProxy = networkProxy.resolveHost(); } connectors = endpoint.connectors(Network.getAddresses(host, port, _protocol, selType, _preferIPv6, true), networkProxy); } catch (Ice.LocalException ex) { if (observer != null) { observer.failed(ex.ice_name()); } throw ex; } finally { if (observer != null) { observer.detach(); } } return(connectors); }
public void resolve(string host, int port, Ice.EndpointSelectionType selType, EndpointI endpoint, EndpointI_connectors callback) { // // 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. // NetworkProxy networkProxy = _instance.networkProxy(); if (networkProxy == null) { try { List <EndPoint> addrs = Network.getAddresses(host, port, _protocol, selType, _preferIPv6, false); if (addrs.Count > 0) { callback.connectors(endpoint.connectors(addrs, null)); return; } } catch (Ice.LocalException ex) { callback.exception(ex); return; } } _m.Lock(); try { Debug.Assert(!_destroyed); ResolveEntry entry = new ResolveEntry(); entry.host = host; entry.port = port; entry.selType = selType; entry.endpoint = endpoint; entry.callback = callback; Ice.Instrumentation.CommunicatorObserver obsv = _instance.getObserver(); if (obsv != null) { entry.observer = obsv.getEndpointLookupObserver(endpoint); if (entry.observer != null) { entry.observer.attach(); } } _queue.AddLast(entry); _m.Notify(); } finally { _m.Unlock(); } }