diff options
| author | Markus Alexander Kuppe | 2010-06-08 10:39:43 +0000 |
|---|---|---|
| committer | Markus Alexander Kuppe | 2010-06-08 10:39:43 +0000 |
| commit | cebbdc4110d6f558d41fb6001c93658bf8702967 (patch) | |
| tree | 3fc7bb270838796b80de6604a9c999b6c4842354 | |
| parent | 5e52546087578f9bf2da741229b019b02a22961b (diff) | |
| download | org.eclipse.ecf-cebbdc4110d6f558d41fb6001c93658bf8702967.tar.gz org.eclipse.ecf-cebbdc4110d6f558d41fb6001c93658bf8702967.tar.xz org.eclipse.ecf-cebbdc4110d6f558d41fb6001c93658bf8702967.zip | |
NEW - bug 316106: [Discovery][DNS-SD] Add API to configure DNS resolver
https://bugs.eclipse.org/bugs/show_bug.cgi?id=316106
3 files changed, 72 insertions, 1 deletions
diff --git a/providers/bundles/org.eclipse.ecf.provider.dnssd/src/org/eclipse/ecf/provider/dnssd/DnsSdDiscoveryException.java b/providers/bundles/org.eclipse.ecf.provider.dnssd/src/org/eclipse/ecf/provider/dnssd/DnsSdDiscoveryException.java new file mode 100644 index 000000000..7be827a2d --- /dev/null +++ b/providers/bundles/org.eclipse.ecf.provider.dnssd/src/org/eclipse/ecf/provider/dnssd/DnsSdDiscoveryException.java @@ -0,0 +1,21 @@ +/******************************************************************************* + * Copyright (c) 2010 Markus Alexander Kuppe. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Markus Alexander Kuppe (ecf-dev_eclipse.org <at> lemmster <dot> de) - initial API and implementation + ******************************************************************************/ +package org.eclipse.ecf.provider.dnssd; + + +public class DnsSdDiscoveryException extends RuntimeException { + + private static final long serialVersionUID = 415901701737755102L; + + public DnsSdDiscoveryException(Throwable e) { + super(e); + } +} diff --git a/providers/bundles/org.eclipse.ecf.provider.dnssd/src/org/eclipse/ecf/provider/dnssd/DnsSdDisocoveryLocator.java b/providers/bundles/org.eclipse.ecf.provider.dnssd/src/org/eclipse/ecf/provider/dnssd/DnsSdDisocoveryLocator.java index cd461517a..69e78b0f8 100644 --- a/providers/bundles/org.eclipse.ecf.provider.dnssd/src/org/eclipse/ecf/provider/dnssd/DnsSdDisocoveryLocator.java +++ b/providers/bundles/org.eclipse.ecf.provider.dnssd/src/org/eclipse/ecf/provider/dnssd/DnsSdDisocoveryLocator.java @@ -11,6 +11,7 @@ package org.eclipse.ecf.provider.dnssd; import java.net.URI; +import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; @@ -37,8 +38,10 @@ import org.xbill.DNS.Lookup; import org.xbill.DNS.Name; import org.xbill.DNS.PTRRecord; import org.xbill.DNS.Record; +import org.xbill.DNS.Resolver; import org.xbill.DNS.ResolverConfig; import org.xbill.DNS.SRVRecord; +import org.xbill.DNS.SimpleResolver; import org.xbill.DNS.TXTRecord; import org.xbill.DNS.Type; @@ -47,6 +50,7 @@ public class DnsSdDisocoveryLocator extends AbstractDiscoveryContainerAdapter { private static final String DNS_SD_PATH = "path"; private static final String DNS_SD_PTCL = "dns-sd.ptcl"; private DnsSdServiceTypeID targetID; + private Resolver resolver; public DnsSdDisocoveryLocator() { super(DnsSdNamespace.NAME, new DiscoveryContainerConfig(IDFactory @@ -87,6 +91,7 @@ public class DnsSdDisocoveryLocator extends AbstractDiscoveryContainerAdapter { Lookup[] queries = serviceTypeId.getInternalQueries(); for (int i = 0; i < queries.length; i++) { Lookup query = queries[i]; + query.setResolver(resolver); Record[] queryResult = query.run(); //TODO file bug upstream that queryResult may never be null int length = queryResult == null ? 0 : queryResult.length; @@ -133,6 +138,7 @@ public class DnsSdDisocoveryLocator extends AbstractDiscoveryContainerAdapter { List srvRecords = new ArrayList(); for (int i = 0; i < queries.length; i++) { Lookup query = queries[i]; + query.setResolver(resolver); Record[] queryResult = query.run(); //TODO file bug upstream that queryResult may never be null int length = queryResult == null ? 0 : queryResult.length; @@ -143,6 +149,7 @@ public class DnsSdDisocoveryLocator extends AbstractDiscoveryContainerAdapter { PTRRecord ptrRecord = (PTRRecord) record; Name target = ptrRecord.getTarget(); Lookup srvQuery = new Lookup(target, Type.SRV); + srvQuery.setResolver(resolver); srvQueryResult = srvQuery.run(); } else if (record instanceof SRVRecord) { srvQueryResult = new SRVRecord[]{(SRVRecord) record}; @@ -169,6 +176,7 @@ public class DnsSdDisocoveryLocator extends AbstractDiscoveryContainerAdapter { // query for txt records (attributes) Properties props = new Properties(); Lookup txtQuery = new Lookup(srvRecord.getName(), Type.TXT); + txtQuery.setResolver(resolver); Record[] txtQueryResults = txtQuery.run(); for (int l = 0; l < txtQueryResults.length; l++) { TXTRecord txtResult = (TXTRecord) txtQueryResults[l]; @@ -244,6 +252,11 @@ public class DnsSdDisocoveryLocator extends AbstractDiscoveryContainerAdapter { } else { targetID = (DnsSdServiceTypeID) aTargetID; } + try { + resolver = new SimpleResolver(); + } catch (UnknownHostException e) { + throw new ContainerConnectException(e); + } fireContainerEvent(new ContainerConnectingEvent(this.getID(), targetID, connectContext)); fireContainerEvent(new ContainerConnectedEvent(this.getID(), targetID)); @@ -270,4 +283,30 @@ public class DnsSdDisocoveryLocator extends AbstractDiscoveryContainerAdapter { public ID getConnectedID() { return targetID; } + + /** + * @param searchPaths The default search path used for discovery + */ + public void setSearchPath(String[] searchPaths) { + targetID.setScopes(searchPaths); + } + + /** + * @return The default search path used by this discovery provider + */ + public String[] getSearchPath() { + return targetID.getSearchPath(); + } + + /** + * @param aResolver The resolver to use + * @throws DnsSdDiscoveryException if hostname cannot be resolved + */ + public void setResolver(String aResolver) { + try { + resolver = new SimpleResolver(aResolver); + } catch (UnknownHostException e) { + throw new DnsSdDiscoveryException(e); + } + } } diff --git a/providers/bundles/org.eclipse.ecf.provider.dnssd/src/org/eclipse/ecf/provider/dnssd/DnsSdServiceTypeID.java b/providers/bundles/org.eclipse.ecf.provider.dnssd/src/org/eclipse/ecf/provider/dnssd/DnsSdServiceTypeID.java index 8279b76ae..4db8e2527 100644 --- a/providers/bundles/org.eclipse.ecf.provider.dnssd/src/org/eclipse/ecf/provider/dnssd/DnsSdServiceTypeID.java +++ b/providers/bundles/org.eclipse.ecf.provider.dnssd/src/org/eclipse/ecf/provider/dnssd/DnsSdServiceTypeID.java @@ -115,6 +115,17 @@ public class DnsSdServiceTypeID extends ServiceTypeID implements IServiceTypeID for(int i = 0; i < searchPaths.length; i++) { s[i] = searchPaths[i].toString(); } - scopes = s; + setScopes(s); + } + + public void setScopes(String[] searchPaths) { + scopes = searchPaths; + } + + /** + * @return Search scopes used during discovery + */ + public String[] getSearchPath() { + return scopes; } } |
