Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Alexander Kuppe2010-07-14 16:22:11 +0000
committerMarkus Alexander Kuppe2010-07-14 16:22:11 +0000
commit61979c00b92d40cb2b7506c83284e977e16834dc (patch)
tree014feb595f867fea49dba5001e0de7007f29deb3
parent8678326d1d50199e29106c8b4f505bd04d734088 (diff)
downloadorg.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.java126
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)

Back to the top