Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Alexander Kuppe2010-07-18 19:21:05 +0000
committerMarkus Alexander Kuppe2010-07-18 19:21:05 +0000
commitfde4f42726566e7adf8010908e49852df11f0cf9 (patch)
treeb166e8ff781305a0aaf9b9a317ce3375fb753dcd
parent88d440cc9653c0592750d752f60dffd659141e11 (diff)
downloadorg.eclipse.ecf-fde4f42726566e7adf8010908e49852df11f0cf9.tar.gz
org.eclipse.ecf-fde4f42726566e7adf8010908e49852df11f0cf9.tar.xz
org.eclipse.ecf-fde4f42726566e7adf8010908e49852df11f0cf9.zip
NEW - bug 320188: [Discovery][DNS-SD] IDiscoveryAdvertiser must use registration domains
https://bugs.eclipse.org/bugs/show_bug.cgi?id=320188
-rw-r--r--providers/bundles/org.eclipse.ecf.provider.dnssd/src/org/eclipse/ecf/provider/dnssd/DnsSdDiscoveryAdvertiser.java38
-rw-r--r--providers/bundles/org.eclipse.ecf.provider.dnssd/src/org/eclipse/ecf/provider/dnssd/DnsSdDiscoveryContainerAdapter.java36
-rw-r--r--providers/bundles/org.eclipse.ecf.provider.dnssd/src/org/eclipse/ecf/provider/dnssd/DnsSdDiscoveryLocator.java27
3 files changed, 69 insertions, 32 deletions
diff --git a/providers/bundles/org.eclipse.ecf.provider.dnssd/src/org/eclipse/ecf/provider/dnssd/DnsSdDiscoveryAdvertiser.java b/providers/bundles/org.eclipse.ecf.provider.dnssd/src/org/eclipse/ecf/provider/dnssd/DnsSdDiscoveryAdvertiser.java
index 16fcbc86d..cdc1ea8ae 100644
--- a/providers/bundles/org.eclipse.ecf.provider.dnssd/src/org/eclipse/ecf/provider/dnssd/DnsSdDiscoveryAdvertiser.java
+++ b/providers/bundles/org.eclipse.ecf.provider.dnssd/src/org/eclipse/ecf/provider/dnssd/DnsSdDiscoveryAdvertiser.java
@@ -12,6 +12,7 @@ package org.eclipse.ecf.provider.dnssd;
import java.net.InetAddress;
import java.net.UnknownHostException;
+import java.util.List;
import org.eclipse.core.runtime.Assert;
import org.eclipse.ecf.core.ContainerConnectException;
@@ -23,11 +24,16 @@ import org.eclipse.ecf.core.security.IConnectContext;
import org.eclipse.ecf.discovery.DiscoveryContainerConfig;
import org.eclipse.ecf.discovery.IServiceInfo;
import org.eclipse.ecf.discovery.identity.IServiceTypeID;
+import org.xbill.DNS.Lookup;
import org.xbill.DNS.Message;
+import org.xbill.DNS.NSRecord;
import org.xbill.DNS.Name;
import org.xbill.DNS.Rcode;
import org.xbill.DNS.Record;
+import org.xbill.DNS.SRVRecord;
import org.xbill.DNS.SimpleResolver;
+import org.xbill.DNS.TextParseException;
+import org.xbill.DNS.Type;
import org.xbill.DNS.Update;
public class DnsSdDiscoveryAdvertiser extends DnsSdDiscoveryContainerAdapter {
@@ -100,9 +106,35 @@ public class DnsSdDiscoveryAdvertiser extends DnsSdDiscoveryContainerAdapter {
}
}
- private InetAddress getUpdateDomain(final Name zone) throws UnknownHostException {
- //TODO resolve dyndns domain
- return InetAddress.getByName("ns1.ecf-project.org");
+ private InetAddress getUpdateDomain(final Name zone) throws TextParseException, UnknownHostException {
+ //TODO check if ._udp has to be prepended
+ Lookup query = new Lookup("_dns-update._udp." + zone, Type.SRV);
+ List srvRecords = getSRVRecord(query);
+ if(srvRecords.size() > 0) {
+ //TODO use the first one returned for the moment, use prio/weight later
+ SRVRecord srvRecord = (SRVRecord) srvRecords.get(0);
+ srvRecord.getTarget();
+ srvRecord.getPort();
+ return null;
+ }
+ return getAuthorityNameServer(zone);
+ }
+
+ private InetAddress getAuthorityNameServer(final Name zone) throws UnknownHostException {
+ final Lookup query = new Lookup(zone, Type.NS);
+ query.setResolver(resolver);
+ final Record[] queryResult = query.run();
+ //TODO file bug upstream that queryResult may never be null
+ int length = queryResult == null ? 0 : queryResult.length;
+ for (int j = 0; j < length; j++) {
+ Record record = queryResult[j];
+ if(record instanceof NSRecord) {
+ NSRecord nsRecord = (NSRecord) record;
+ Name target = nsRecord.getTarget();
+ return InetAddress.getByName(target.toString());
+ }
+ }
+ return null;
}
diff --git a/providers/bundles/org.eclipse.ecf.provider.dnssd/src/org/eclipse/ecf/provider/dnssd/DnsSdDiscoveryContainerAdapter.java b/providers/bundles/org.eclipse.ecf.provider.dnssd/src/org/eclipse/ecf/provider/dnssd/DnsSdDiscoveryContainerAdapter.java
index 18a09b203..00b489c88 100644
--- a/providers/bundles/org.eclipse.ecf.provider.dnssd/src/org/eclipse/ecf/provider/dnssd/DnsSdDiscoveryContainerAdapter.java
+++ b/providers/bundles/org.eclipse.ecf.provider.dnssd/src/org/eclipse/ecf/provider/dnssd/DnsSdDiscoveryContainerAdapter.java
@@ -29,11 +29,14 @@ import org.eclipse.ecf.discovery.IServiceInfo;
import org.eclipse.ecf.discovery.identity.IServiceID;
import org.eclipse.ecf.discovery.identity.IServiceTypeID;
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.SRVRecord;
import org.xbill.DNS.SimpleResolver;
import org.xbill.DNS.TSIG;
+import org.xbill.DNS.Type;
public abstract class DnsSdDiscoveryContainerAdapter extends
AbstractDiscoveryContainerAdapter {
@@ -164,6 +167,37 @@ public abstract class DnsSdDiscoveryContainerAdapter extends
return (Record[]) result.toArray(new Record[result.size()]);
}
+ protected List getSRVRecords(Lookup[] queries) {
+ List srvRecords = new ArrayList();
+ for (int i = 0; i < queries.length; i++) {
+ srvRecords.addAll(getSRVRecord(queries[i]));
+ }
+ return srvRecords;
+ }
+
+ protected List getSRVRecord(Lookup query) {
+ final List srvRecords = new ArrayList();
+ query.setResolver(resolver);
+ final Record[] queryResult = query.run();
+ //TODO file bug upstream that queryResult may never be null
+ final int length = queryResult == null ? 0 : queryResult.length;
+ for (int j = 0; j < length; j++) {
+ Record[] srvQueryResult = null;
+ final Record record = queryResult[j];
+ if(record instanceof PTRRecord) {
+ final PTRRecord ptrRecord = (PTRRecord) record;
+ final Name target = ptrRecord.getTarget();
+ final Lookup srvQuery = new Lookup(target, Type.SRV);
+ srvQuery.setResolver(resolver);
+ srvQueryResult = srvQuery.run();
+ } else if (record instanceof SRVRecord) {
+ srvQueryResult = new SRVRecord[]{(SRVRecord) record};
+ }
+ srvRecords.addAll(Arrays.asList(srvQueryResult));
+ }
+ return srvRecords;
+ }
+
/**
* @param searchPaths The default search path used for discovery
*/
@@ -197,6 +231,4 @@ public abstract class DnsSdDiscoveryContainerAdapter extends
public void setTsigKey(String tsigKeyName, String tsigKey) {
resolver.setTSIGKey(new TSIG(tsigKeyName, tsigKey));
}
-
-
}
diff --git a/providers/bundles/org.eclipse.ecf.provider.dnssd/src/org/eclipse/ecf/provider/dnssd/DnsSdDiscoveryLocator.java b/providers/bundles/org.eclipse.ecf.provider.dnssd/src/org/eclipse/ecf/provider/dnssd/DnsSdDiscoveryLocator.java
index 9ceed4bda..691aa3456 100644
--- a/providers/bundles/org.eclipse.ecf.provider.dnssd/src/org/eclipse/ecf/provider/dnssd/DnsSdDiscoveryLocator.java
+++ b/providers/bundles/org.eclipse.ecf.provider.dnssd/src/org/eclipse/ecf/provider/dnssd/DnsSdDiscoveryLocator.java
@@ -13,7 +13,6 @@ 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;
import java.util.List;
import java.util.Properties;
@@ -125,32 +124,6 @@ public class DnsSdDiscoveryLocator extends DnsSdDiscoveryContainerAdapter {
return (IServiceInfo[]) serviceInfos.toArray(new IServiceInfo[serviceInfos.size()]);
}
- private List getSRVRecords(Lookup[] queries) {
- 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;
- for (int j = 0; j < length; j++) {
- Record[] srvQueryResult = null;
- Record record = queryResult[j];
- if(record instanceof PTRRecord) {
- 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};
- }
- srvRecords.addAll(Arrays.asList(srvQueryResult));
- }
- }
- return srvRecords;
- }
-
private List getServiceInfos(List srvQueryResult) {
List infos = new ArrayList();
for (Iterator iterator = srvQueryResult.iterator(); iterator.hasNext();) {

Back to the top