Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Alexander Kuppe2010-06-24 13:13:49 +0000
committerMarkus Alexander Kuppe2010-06-24 13:13:49 +0000
commitff75a61f8973b0ae451596f27c43a83418371396 (patch)
tree1cd5310603d67a15aaabe3c94c65b419f43c12c2
parent25778f700bde86d9b5b4ca9e1871b47b139bdda7 (diff)
downloadorg.eclipse.ecf-ff75a61f8973b0ae451596f27c43a83418371396.tar.gz
org.eclipse.ecf-ff75a61f8973b0ae451596f27c43a83418371396.tar.xz
org.eclipse.ecf-ff75a61f8973b0ae451596f27c43a83418371396.zip
NEW - bug 317811: [Discovery][DNS-SD] Fix class name typo (DnsSdDisocoveryLocator > DnsSdDiscoveryLocator)
-rw-r--r--providers/bundles/org.eclipse.ecf.provider.dnssd/src/org/eclipse/ecf/provider/dnssd/DnsSdDisocoveryLocator.java355
1 files changed, 0 insertions, 355 deletions
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
deleted file mode 100644
index 0b7601b14..000000000
--- a/providers/bundles/org.eclipse.ecf.provider.dnssd/src/org/eclipse/ecf/provider/dnssd/DnsSdDisocoveryLocator.java
+++ /dev/null
@@ -1,355 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 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;
-
-import java.net.URI;
-import java.net.UnknownHostException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Properties;
-import java.util.Set;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.ecf.core.ContainerConnectException;
-import org.eclipse.ecf.core.events.ContainerConnectedEvent;
-import org.eclipse.ecf.core.events.ContainerConnectingEvent;
-import org.eclipse.ecf.core.events.ContainerDisconnectedEvent;
-import org.eclipse.ecf.core.events.ContainerDisconnectingEvent;
-import org.eclipse.ecf.core.identity.ID;
-import org.eclipse.ecf.core.identity.IDFactory;
-import org.eclipse.ecf.core.security.IConnectContext;
-import org.eclipse.ecf.discovery.AbstractDiscoveryContainerAdapter;
-import org.eclipse.ecf.discovery.DiscoveryContainerConfig;
-import org.eclipse.ecf.discovery.IServiceInfo;
-import org.eclipse.ecf.discovery.ServiceInfo;
-import org.eclipse.ecf.discovery.ServiceProperties;
-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.ResolverConfig;
-import org.xbill.DNS.SRVRecord;
-import org.xbill.DNS.SimpleResolver;
-import org.xbill.DNS.TXTRecord;
-import org.xbill.DNS.Type;
-
-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
- .getDefault().createStringID(
- DnsSdDisocoveryLocator.class.getName())));
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- * org.eclipse.ecf.discovery.IDiscoveryLocator#getServiceInfo(org.eclipse
- * .ecf.discovery.identity.IServiceID)
- */
- public IServiceInfo getServiceInfo(IServiceID aServiceId) {
- Assert.isNotNull(aServiceId);
- IServiceInfo[] services = getServices(aServiceId.getServiceTypeID());
- for (int i = 0; i < services.length; i++) {
- //TODO This can be a lot faster if done directly instead of via org.eclipse.ecf.provider.dnssrv.DnsSrvDisocoveryLocator.getServices(IServiceTypeID)
- IServiceInfo iServiceInfo = services[i];
- if(iServiceInfo.getServiceID().equals(aServiceId)) {
- return iServiceInfo;
- }
- }
- return null;
- }
-
- /**
- * This always returns the service type found for our local domain
- * Use org.eclipse.ecf.provider.dnssrv.DnsSrvDisocoveryLocator.getServices(IServiceTypeID) with a wildcard query instead.
- *
- * @see org.eclipse.ecf.discovery.IDiscoveryLocator#getServiceTypes()
- */
- public IServiceTypeID[] getServiceTypes() {
- // technically can't do anything without a scope (domain) -> falling back to local domain (mDNS?)
- DnsSdServiceTypeID serviceTypeId = (DnsSdServiceTypeID) targetID;
- return getServiceTypes(serviceTypeId);
- }
-
- private IServiceTypeID[] getServiceTypes(final DnsSdServiceTypeID serviceTypeId) {
- List result = new ArrayList();
- Record[] queryResult = getRecords(serviceTypeId);
- for (int j = 0; j < queryResult.length; j++) {
- Record record = queryResult[j];
- if(record instanceof PTRRecord) {
- PTRRecord ptrRecord = (PTRRecord) record;
- result.add(new DnsSdServiceTypeID(getServicesNamespace(), ptrRecord.getTarget()));
- } else if (record instanceof SRVRecord) {
- SRVRecord srvRecord = (SRVRecord) record;
- result.add(new DnsSdServiceTypeID(getServicesNamespace(), srvRecord.getName()));
- }
- }
- return (IServiceTypeID[]) result.toArray(new IServiceTypeID[result.size()]);
- }
-
- private Record[] getRecords(final DnsSdServiceTypeID serviceTypeId) {
- List result = new ArrayList();
- Lookup[] queries = serviceTypeId.getInternalQueries();
- for (int i = 0; i < queries.length; i++) {
- Lookup query = queries[i];
- query.setResolver(resolver);
- Record[] queryResult = query.run();
- if(queryResult != null) {
- result.addAll(Arrays.asList(queryResult));
- }
- }
- return (Record[]) result.toArray(new Record[result.size()]);
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.ecf.discovery.IDiscoveryLocator#getServices()
- */
- public IServiceInfo[] getServices() {
- // technically can't do anything without a scope (domain) -> falling back to local domain (mDNS?)
- return getServices(targetID);
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- * org.eclipse.ecf.discovery.IDiscoveryLocator#getServices(org.eclipse.ecf
- * .discovery.identity.IServiceTypeID)
- */
- public IServiceInfo[] getServices(IServiceTypeID aServiceTypeId) {
- Assert.isNotNull(aServiceTypeId);
- DnsSdServiceTypeID serviceTypeId = (DnsSdServiceTypeID) aServiceTypeId;
- List srvRecords = getSRVRecords(serviceTypeId.getInternalQueries());
- List serviceInfos = getServiceInfos(srvRecords);
- 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();) {
- SRVRecord srvRecord = (SRVRecord) iterator.next();
- int priority = srvRecord.getPriority();
- int weight = srvRecord.getWeight();
- int port = srvRecord.getPort();
- Name target = srvRecord.getTarget();
- String host = target.toString();
- host = host.substring(0, host.length() - 1);
-
- IServiceTypeID aServiceTypeID = new DnsSdServiceTypeID(getConnectNamespace(), srvRecord.getName());
-
- // 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];
- List strings = txtResult.getStrings();
- for (Iterator itr = strings.iterator(); itr.hasNext();) {
- String str = (String) itr.next();
- String[] split = str.split("=");
- props.put(split[0], split[1]);
- }
- }
- String path = props.getProperty(DNS_SD_PATH);
- String proto = props.getProperty(DNS_SD_PTCL) == null ? aServiceTypeID.getProtocols()[0] : props.getProperty(DNS_SD_PTCL);
-
- URI uri = URI.create(proto + "://" + host + ":" + port + (path == null ? "" : path));
- IServiceInfo info =new ServiceInfo(uri, host, aServiceTypeID, priority, weight, new ServiceProperties(props));
- infos.add(info);
- }
- return infos;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- * org.eclipse.ecf.discovery.IDiscoveryAdvertiser#registerService(org.eclipse
- * .ecf.discovery.IServiceInfo)
- */
- public void registerService(IServiceInfo serviceInfo) {
- Assert.isNotNull(serviceInfo);
- // nop, we are just a Locator but AbstractDiscoveryContainerAdapter
- // doesn't support this yet
- throw new UnsupportedOperationException(
- "This is not an IDiscoveryAdvertiser");
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- * org.eclipse.ecf.discovery.IDiscoveryAdvertiser#unregisterService(org.
- * eclipse.ecf.discovery.IServiceInfo)
- */
- public void unregisterService(IServiceInfo serviceInfo) {
- Assert.isNotNull(serviceInfo);
- // nop, we are just a Locator but AbstractDiscoveryContainerAdapter
- // doesn't support this yet
- throw new UnsupportedOperationException(
- "This is not an IDiscoveryAdvertiser");
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- * org.eclipse.ecf.core.IContainer#connect(org.eclipse.ecf.core.identity.ID,
- * org.eclipse.ecf.core.security.IConnectContext)
- */
- public void connect(ID aTargetID, IConnectContext connectContext)
- throws ContainerConnectException {
-
- // connect can only be called once
- if (targetID != null || getConfig() == null) {
- throw new ContainerConnectException("Already connected");
- }
-
- // fall back to the search path as last resort
- if(aTargetID == null || !(aTargetID instanceof DnsSdServiceTypeID)) {
- ResolverConfig config = new ResolverConfig();
- Name[] searchPaths = config.searchPath();
- if(searchPaths.length >= 0) {
- targetID = new DnsSdServiceTypeID();
- targetID.setSearchPath(searchPaths);
- } else {
- throw new ContainerConnectException("No target id given");
- }
- } else {
- targetID = (DnsSdServiceTypeID) aTargetID;
- }
-
- // instantiate a default resolver
- if(resolver == null) {
- try {
- resolver = new SimpleResolver();
- } catch (UnknownHostException e) {
- throw new ContainerConnectException(e);
- }
- }
-
- // read browsing domains for the given targetID/searchpath and merge with existing
- targetID.addSearchPath(getBrowsingDomains(targetID));
-
- // done setting up this provider, send event
- fireContainerEvent(new ContainerConnectingEvent(this.getID(), targetID,
- connectContext));
- fireContainerEvent(new ContainerConnectedEvent(this.getID(), targetID));
- }
-
- private String[] getBrowsingDomains(IServiceTypeID aServiceTypeId) {
- Set res = new HashSet();
-
- String[] rrs = new String[] {BnRDnsSdServiceTypeID.BROWSE_DOMAIN, BnRDnsSdServiceTypeID.DEFAULT_BROWSE_DOMAIN};
- for (int i = 0; i < rrs.length; i++) {
- BnRDnsSdServiceTypeID serviceType =
- new BnRDnsSdServiceTypeID(aServiceTypeId, rrs[i]);
-
- Record[] defaultBrowsing = getRecords(serviceType);
- for (int j = 0; j < defaultBrowsing.length; j++) {
- PTRRecord record = (PTRRecord) defaultBrowsing[j];
- res.add(record.getTarget().toString());
- }
- }
-
- return (String[]) res.toArray(new String[res.size()]);
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.ecf.core.IContainer#disconnect()
- */
- public void disconnect() {
- fireContainerEvent(new ContainerDisconnectingEvent(this.getID(),
- getConnectedID()));
- targetID = null;
- fireContainerEvent(new ContainerDisconnectedEvent(this.getID(),
- getConnectedID()));
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.ecf.core.IContainer#getConnectedID()
- */
- public ID getConnectedID() {
- return targetID;
- }
-
- /**
- * @param searchPaths The default search path used for discovery
- */
- public void setSearchPath(String[] searchPaths) {
- targetID.setSearchPath(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);
- }
- }
-}

Back to the top