diff options
author | Markus Alexander Kuppe | 2010-06-25 08:26:38 +0000 |
---|---|---|
committer | Markus Alexander Kuppe | 2010-06-25 08:26:38 +0000 |
commit | 6d0fea503bb8c51a3ee131fc7aa43728fdf02c7e (patch) | |
tree | 6564d60607c6c7d60b2ba0af5086f2d938b90a9b /providers | |
parent | b7e862ff5925eed45561414dab48c50eb1845def (diff) | |
download | org.eclipse.ecf-6d0fea503bb8c51a3ee131fc7aa43728fdf02c7e.tar.gz org.eclipse.ecf-6d0fea503bb8c51a3ee131fc7aa43728fdf02c7e.tar.xz org.eclipse.ecf-6d0fea503bb8c51a3ee131fc7aa43728fdf02c7e.zip |
NEW - bug 317798: [[Discovery][DNS-SD] Create/register IDiscoveryAdvertiser container/service
https://bugs.eclipse.org/bugs/show_bug.cgi?id=317798
Diffstat (limited to 'providers')
3 files changed, 141 insertions, 8 deletions
diff --git a/providers/bundles/org.eclipse.ecf.provider.dnssd/src/org/eclipse/ecf/provider/dnssd/ContainerInstantiator.java b/providers/bundles/org.eclipse.ecf.provider.dnssd/src/org/eclipse/ecf/provider/dnssd/ContainerInstantiator.java index 7a01e3db9..8aec613b8 100644 --- a/providers/bundles/org.eclipse.ecf.provider.dnssd/src/org/eclipse/ecf/provider/dnssd/ContainerInstantiator.java +++ b/providers/bundles/org.eclipse.ecf.provider.dnssd/src/org/eclipse/ecf/provider/dnssd/ContainerInstantiator.java @@ -22,13 +22,12 @@ public class ContainerInstantiator implements IContainerInstantiator { */ public IContainer createInstance(ContainerTypeDescription description, Object[] parameters) throws ContainerCreateException { -// For the moment advertiser and locator are served by the same class/instance -// if(description != null && "ecf.discovery.dnssd.advertiser".equals(description.getName())) { -// return new DnsSdDiscoveryLocator(); -// } else if(description != null && "ecf.discovery.dnssd.locator".equals(description.getName())) { + if(description != null && "ecf.discovery.dnssd.advertiser".equals(description.getName())) { + return new DnsSdDiscoveryAdvertiser(); + } else if(description != null && "ecf.discovery.dnssd.locator".equals(description.getName())) { return new DnsSdDiscoveryLocator(); -// } -// return null; + } + return null; } /* (non-Javadoc) 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 new file mode 100644 index 000000000..c83354740 --- /dev/null +++ b/providers/bundles/org.eclipse.ecf.provider.dnssd/src/org/eclipse/ecf/provider/dnssd/DnsSdDiscoveryAdvertiser.java @@ -0,0 +1,134 @@ +/******************************************************************************* + * 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; + +import java.net.UnknownHostException; + +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.identity.ID; +import org.eclipse.ecf.core.security.IConnectContext; +import org.eclipse.ecf.discovery.IServiceInfo; +import org.eclipse.ecf.discovery.identity.IServiceID; +import org.eclipse.ecf.discovery.identity.IServiceTypeID; +import org.xbill.DNS.SimpleResolver; + +public class DnsSdDiscoveryAdvertiser extends DnsSdDiscoveryLocator { + + /* (non-Javadoc) + * @see org.eclipse.ecf.provider.dnssd.DnsSdDiscoveryLocator#registerService(org.eclipse.ecf.discovery.IServiceInfo) + */ + public void registerService(IServiceInfo serviceInfo) { + Assert.isNotNull(serviceInfo); + throw new UnsupportedOperationException("Not yet implemented"); + } + + /* (non-Javadoc) + * @see org.eclipse.ecf.provider.dnssd.DnsSdDiscoveryLocator#unregisterService(org.eclipse.ecf.discovery.IServiceInfo) + */ + public void unregisterService(IServiceInfo serviceInfo) { + Assert.isNotNull(serviceInfo); + throw new UnsupportedOperationException("Not yet implemented"); + } + + /* (non-Javadoc) + * @see org.eclipse.ecf.discovery.AbstractDiscoveryContainerAdapter#unregisterAllServices() + */ + public void unregisterAllServices() { + throw new UnsupportedOperationException("Not yet implemented"); + } + + /* (non-Javadoc) + * @see org.eclipse.ecf.discovery.AbstractDiscoveryContainerAdapter#purgeCache() + */ + public IServiceInfo[] purgeCache() { + throw new UnsupportedOperationException("Not yet implemented"); + } + + /* (non-Javadoc) + * @see org.eclipse.ecf.provider.dnssd.DnsSdDiscoveryLocator#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"); + } + + //TODO convert non DnsSdServiceTypeIDs into DSTIDs + if(aTargetID == null) { + targetID = new DnsSdServiceTypeID(); + } else { + targetID = (DnsSdServiceTypeID) aTargetID; + } + + // instantiate a default resolver + if(resolver == null) { + try { + resolver = new SimpleResolver(); + } catch (UnknownHostException e) { + throw new ContainerConnectException(e); + } + } + + // done setting up this provider, send event + fireContainerEvent(new ContainerConnectingEvent(this.getID(), targetID, + connectContext)); + fireContainerEvent(new ContainerConnectedEvent(this.getID(), targetID)); + } + + /* not a locator! */ + + /* (non-Javadoc) + * @see org.eclipse.ecf.provider.dnssd.DnsSdDiscoveryLocator#getServiceInfo(org.eclipse.ecf.discovery.identity.IServiceID) + */ + public IServiceInfo getServiceInfo(IServiceID aServiceId) { + Assert.isNotNull(aServiceId); + // nop, we are just an Advertiser but AbstractDiscoveryContainerAdapter + // doesn't support this yet + throw new UnsupportedOperationException( + "This is not an IDiscoveryLocator"); + } + + /* (non-Javadoc) + * @see org.eclipse.ecf.provider.dnssd.DnsSdDiscoveryLocator#getServiceTypes() + */ + public IServiceTypeID[] getServiceTypes() { + // nop, we are just an Advertiser but AbstractDiscoveryContainerAdapter + // doesn't support this yet + throw new UnsupportedOperationException( + "This is not an IDiscoveryLocator"); + } + + /* (non-Javadoc) + * @see org.eclipse.ecf.provider.dnssd.DnsSdDiscoveryLocator#getServices() + */ + public IServiceInfo[] getServices() { + // nop, we are just an Advertiser but AbstractDiscoveryContainerAdapter + // doesn't support this yet + throw new UnsupportedOperationException( + "This is not an IDiscoveryLocator"); + } + + /* (non-Javadoc) + * @see org.eclipse.ecf.provider.dnssd.DnsSdDiscoveryLocator#getServices(org.eclipse.ecf.discovery.identity.IServiceTypeID) + */ + public IServiceInfo[] getServices(IServiceTypeID aServiceTypeId) { + Assert.isNotNull(aServiceTypeId); + // nop, we are just an Advertiser but AbstractDiscoveryContainerAdapter + // doesn't support this yet + throw new UnsupportedOperationException( + "This is not an IDiscoveryLocator"); + } +} 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 346e85b4b..fbee5f4bd 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 @@ -52,8 +52,8 @@ public class DnsSdDiscoveryLocator 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; + protected DnsSdServiceTypeID targetID; + protected Resolver resolver; public DnsSdDiscoveryLocator() { super(DnsSdNamespace.NAME, new DiscoveryContainerConfig(IDFactory |