Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Alexander Kuppe2010-06-08 10:39:43 +0000
committerMarkus Alexander Kuppe2010-06-08 10:39:43 +0000
commitcebbdc4110d6f558d41fb6001c93658bf8702967 (patch)
tree3fc7bb270838796b80de6604a9c999b6c4842354
parent5e52546087578f9bf2da741229b019b02a22961b (diff)
downloadorg.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
-rw-r--r--providers/bundles/org.eclipse.ecf.provider.dnssd/src/org/eclipse/ecf/provider/dnssd/DnsSdDiscoveryException.java21
-rw-r--r--providers/bundles/org.eclipse.ecf.provider.dnssd/src/org/eclipse/ecf/provider/dnssd/DnsSdDisocoveryLocator.java39
-rw-r--r--providers/bundles/org.eclipse.ecf.provider.dnssd/src/org/eclipse/ecf/provider/dnssd/DnsSdServiceTypeID.java13
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;
}
}

Back to the top