diff options
| author | Markus Alexander Kuppe | 2010-07-14 16:22:11 +0000 |
|---|---|---|
| committer | Markus Alexander Kuppe | 2010-07-14 16:22:11 +0000 |
| commit | 61979c00b92d40cb2b7506c83284e977e16834dc (patch) | |
| tree | 014feb595f867fea49dba5001e0de7007f29deb3 | |
| parent | 8678326d1d50199e29106c8b4f505bd04d734088 (diff) | |
| download | org.eclipse.ecf-61979c00b92d40cb2b7506c83284e977e16834dc.tar.gz org.eclipse.ecf-61979c00b92d40cb2b7506c83284e977e16834dc.tar.xz org.eclipse.ecf-61979c00b92d40cb2b7506c83284e977e16834dc.zip | |
NEW - bug 314999: [Discovery][DNS-SD] Implement IDiscoveryAdvertiser
https://bugs.eclipse.org/bugs/show_bug.cgi?id=314999
| -rw-r--r-- | providers/bundles/org.eclipse.ecf.provider.dnssd/src/org/eclipse/ecf/provider/dnssd/DnsSdDiscoveryAdvertiser.java | 126 |
1 files changed, 85 insertions, 41 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 110cd6a8d..709f0531c 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 @@ -49,49 +49,49 @@ public class DnsSdDiscoveryAdvertiser extends DnsSdDiscoveryContainerAdapter { DnsSdServiceID serviceID = (DnsSdServiceID) serviceInfo.getServiceID(); DnsSdServiceTypeID serviceTypeID = (DnsSdServiceTypeID) serviceID.getServiceTypeID(); - String[] scopes = serviceTypeID.getScopes(); - for (int i = 0; i < scopes.length; i++) { - try { - String domain = scopes[i] + "."; - Name zone = Name.fromString(domain); - - Name name = Name.fromString("_" + serviceTypeID.getServices()[0] + "._" + serviceTypeID.getProtocols()[0], zone); - - //TODO make TTL configurable per serviceinfo instance or via config admin - int ttl = 3600; - int priority = serviceInfo.getPriority(); - int port = serviceInfo.getLocation().getPort(); - String target = serviceInfo.getLocation().getHost(); - int weight = serviceInfo.getWeight(); + String[] scopes = serviceTypeID.getScopes(); + for (int i = 0; i < scopes.length; i++) { + try { + String domain = scopes[i] + "."; + Name zone = Name.fromString(domain); + + Name name = Name.fromString("_" + serviceTypeID.getServices()[0] + "._" + serviceTypeID.getProtocols()[0], zone); + + //TODO make TTL configurable per serviceinfo instance or via config admin + int ttl = 3600; + int priority = serviceInfo.getPriority(); + int port = serviceInfo.getLocation().getPort(); + String target = serviceInfo.getLocation().getHost(); + int weight = serviceInfo.getWeight(); - // TYPE.SRV - Record record = Record.fromString(name, Type.SRV, DClass.IN, ttl, priority + " " + weight + " " + port + " " + target + ".", zone); - Update update = new Update(zone); - update.replace(record); - - // TYPE.TXT for service properties - IServiceProperties properties = serviceInfo.getServiceProperties(); - Enumeration enumeration = properties.getPropertyNames(); - while(enumeration.hasMoreElements()) { - Object property = enumeration.nextElement(); - String key = property.toString(); - String value = (String) properties.getProperty(key).toString(); - record = Record.fromString(name, Type.TXT, DClass.IN, ttl, key + "=" + value, zone); - update.add(record); - } - - // set up a new resolver for the given domain - ((SimpleResolver)resolver).setAddress(InetAddress.getByName("ns1.ecf-project.org")); - resolver.setTCP(true); - Message response = resolver.send(update); - - if(response.getRcode() != Rcode.NOERROR) { - DnsSdDiscoveryException.getException(response.getRcode()); - } - } catch (Exception e) { - throw new DnsSdDiscoveryException(e); + // TYPE.SRV + Record record = Record.fromString(name, Type.SRV, DClass.IN, ttl, priority + " " + weight + " " + port + " " + target + ".", zone); + Update update = new Update(zone); + update.replace(record); + + // TYPE.TXT for service properties + IServiceProperties properties = serviceInfo.getServiceProperties(); + Enumeration enumeration = properties.getPropertyNames(); + while(enumeration.hasMoreElements()) { + Object property = enumeration.nextElement(); + String key = property.toString(); + String value = (String) properties.getProperty(key).toString(); + record = Record.fromString(name, Type.TXT, DClass.IN, ttl, key + "=" + value, zone); + update.add(record); + } + + // set up a new resolver for the given domain + ((SimpleResolver)resolver).setAddress(InetAddress.getByName("ns1.ecf-project.org")); + resolver.setTCP(true); + Message response = resolver.send(update); + + if(response.getRcode() != Rcode.NOERROR) { + DnsSdDiscoveryException.getException(response.getRcode()); } + } catch (Exception e) { + throw new DnsSdDiscoveryException(e); } + } } /* (non-Javadoc) @@ -99,7 +99,51 @@ public class DnsSdDiscoveryAdvertiser extends DnsSdDiscoveryContainerAdapter { */ public void unregisterService(IServiceInfo serviceInfo) { Assert.isNotNull(serviceInfo); - throw new UnsupportedOperationException("Not yet implemented"); + DnsSdServiceID serviceID = (DnsSdServiceID) serviceInfo.getServiceID(); + DnsSdServiceTypeID serviceTypeID = (DnsSdServiceTypeID) serviceID.getServiceTypeID(); + String[] scopes = serviceTypeID.getScopes(); + for (int i = 0; i < scopes.length; i++) { + try { + String domain = scopes[i] + "."; + Name zone = Name.fromString(domain); + + Name name = Name.fromString("_" + serviceTypeID.getServices()[0] + "._" + serviceTypeID.getProtocols()[0], zone); + + //TODO make TTL configurable per serviceinfo instance or via config admin + int ttl = 3600; + int priority = serviceInfo.getPriority(); + int port = serviceInfo.getLocation().getPort(); + String target = serviceInfo.getLocation().getHost(); + int weight = serviceInfo.getWeight(); + + // TYPE.SRV + Record record = Record.fromString(name, Type.SRV, DClass.IN, ttl, priority + " " + weight + " " + port + " " + target + ".", zone); + Update update = new Update(zone); + update.delete(record); + + // TYPE.TXT for service properties + IServiceProperties properties = serviceInfo.getServiceProperties(); + Enumeration enumeration = properties.getPropertyNames(); + while(enumeration.hasMoreElements()) { + Object property = enumeration.nextElement(); + String key = property.toString(); + String value = (String) properties.getProperty(key).toString(); + record = Record.fromString(name, Type.TXT, DClass.IN, ttl, key + "=" + value, zone); + update.delete(record); + } + + // set up a new resolver for the given domain + ((SimpleResolver)resolver).setAddress(InetAddress.getByName("ns1.ecf-project.org")); + resolver.setTCP(true); + Message response = resolver.send(update); + + if(response.getRcode() != Rcode.NOERROR) { + DnsSdDiscoveryException.getException(response.getRcode()); + } + } catch (Exception e) { + throw new DnsSdDiscoveryException(e); + } + } } /* (non-Javadoc) |
